Repository: richeterre/SwiftGoal Branch: master Commit: eac3bcd043ed Files: 1905 Total size: 11.5 MB Directory structure: gitextract_y3kpcg6a/ ├── .gitignore ├── Cartfile ├── Cartfile.private ├── Cartfile.resolved ├── Carthage/ │ └── Checkouts/ │ ├── Argo/ │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── .hound.yml │ │ ├── Argo/ │ │ │ ├── Extensions/ │ │ │ │ ├── Dictionary.swift │ │ │ │ ├── NSNumber.swift │ │ │ │ └── RawRepresentable.swift │ │ │ ├── Functions/ │ │ │ │ ├── catDecoded.swift │ │ │ │ ├── curry.swift │ │ │ │ ├── decode.swift │ │ │ │ ├── flatReduce.swift │ │ │ │ └── sequence.swift │ │ │ ├── Operators/ │ │ │ │ ├── Argo.swift │ │ │ │ └── Decode.swift │ │ │ ├── Resources/ │ │ │ │ ├── Argo.h │ │ │ │ └── Info.plist │ │ │ └── Types/ │ │ │ ├── Decodable.swift │ │ │ ├── DecodeError.swift │ │ │ ├── Decoded/ │ │ │ │ ├── Alternative.swift │ │ │ │ ├── Applicative.swift │ │ │ │ ├── Decoded.swift │ │ │ │ ├── FailureCoalescing.swift │ │ │ │ ├── Functor.swift │ │ │ │ └── Monad.swift │ │ │ ├── JSON.swift │ │ │ └── StandardTypes.swift │ │ ├── Argo Playground.playground/ │ │ │ ├── Pages/ │ │ │ │ ├── Basics.xcplaygroundpage/ │ │ │ │ │ ├── Contents.swift │ │ │ │ │ ├── Resources/ │ │ │ │ │ │ └── user_with_email.json │ │ │ │ │ └── timeline.xctimeline │ │ │ │ └── iTunes Example.xcplaygroundpage/ │ │ │ │ ├── Contents.swift │ │ │ │ ├── Resources/ │ │ │ │ │ └── tropos.json │ │ │ │ └── timeline.xctimeline │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── Argo.podspec │ │ ├── Argo.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── Argo-Mac.xcscheme │ │ │ ├── Argo-iOS.xcscheme │ │ │ ├── Argo-tvOS.xcscheme │ │ │ └── Argo-watchOS.xcscheme │ │ ├── Argo.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── ArgoTests/ │ │ │ ├── Info.plist │ │ │ ├── JSON/ │ │ │ │ ├── JSONFileReader.swift │ │ │ │ ├── array_root.json │ │ │ │ ├── big_data.json │ │ │ │ ├── booleans.json │ │ │ │ ├── comment.json │ │ │ │ ├── post_bad_comments.json │ │ │ │ ├── post_comments.json │ │ │ │ ├── post_no_comments.json │ │ │ │ ├── root_array.json │ │ │ │ ├── root_object.json │ │ │ │ ├── types.json │ │ │ │ ├── types_fail_embedded.json │ │ │ │ ├── url.json │ │ │ │ ├── user_with_bad_type.json │ │ │ │ ├── user_with_email.json │ │ │ │ ├── user_with_nested_name.json │ │ │ │ ├── user_without_email.json │ │ │ │ └── user_without_key.json │ │ │ ├── Models/ │ │ │ │ ├── Booleans.swift │ │ │ │ ├── Comment.swift │ │ │ │ ├── NSURL.swift │ │ │ │ ├── Post.swift │ │ │ │ ├── TestModel.swift │ │ │ │ └── User.swift │ │ │ ├── Tests/ │ │ │ │ ├── DecodedTests.swift │ │ │ │ ├── EmbeddedJSONDecodingTests.swift │ │ │ │ ├── EquatableTests.swift │ │ │ │ ├── ExampleTests.swift │ │ │ │ ├── OptionalPropertyDecodingTests.swift │ │ │ │ ├── PListDecodingTests.swift │ │ │ │ ├── PerformanceTests.swift │ │ │ │ ├── RawRepresentableTests.swift │ │ │ │ ├── SwiftDictionaryDecodingTests.swift │ │ │ │ └── TypeTests.swift │ │ │ └── plists/ │ │ │ ├── PListFileReader.swift │ │ │ └── types.plist │ │ ├── CONTRIBUTING.md │ │ ├── Cartfile.private │ │ ├── Cartfile.resolved │ │ ├── Carthage/ │ │ │ └── Checkouts/ │ │ │ └── Curry/ │ │ │ ├── .gitattributes │ │ │ ├── .gitignore │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Curry.podspec │ │ │ ├── Curry.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ ├── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ ├── Curry-Mac.xcscheme │ │ │ │ ├── Curry-iOS.xcscheme │ │ │ │ ├── Curry-tvOS.xcscheme │ │ │ │ └── Curry-watchOS.xcscheme │ │ │ ├── LICENSE │ │ │ ├── Package.swift │ │ │ ├── README.md │ │ │ ├── Resources/ │ │ │ │ ├── Curry.h │ │ │ │ └── Info.plist │ │ │ ├── Source/ │ │ │ │ └── Curry.swift │ │ │ └── bin/ │ │ │ └── generate │ │ ├── Documentation/ │ │ │ ├── .gitkeep │ │ │ ├── Basic-Usage.md │ │ │ ├── Decode-Enums.md │ │ │ ├── Decode-Root-Keys.md │ │ │ ├── Functional-Concepts.md │ │ │ ├── Ideology.md │ │ │ ├── README.md │ │ │ └── Relationships.md │ │ ├── ISSUE_TEMPLATE.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ ├── archive │ │ │ ├── setup │ │ │ └── test │ │ └── circle.yml │ ├── Curry/ │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── CONTRIBUTING.md │ │ ├── Curry.podspec │ │ ├── Curry.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── Curry-Mac.xcscheme │ │ │ ├── Curry-iOS.xcscheme │ │ │ ├── Curry-tvOS.xcscheme │ │ │ └── Curry-watchOS.xcscheme │ │ ├── LICENSE │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Resources/ │ │ │ ├── Curry.h │ │ │ └── Info.plist │ │ ├── Source/ │ │ │ └── Curry.swift │ │ └── bin/ │ │ └── generate │ ├── DZNEmptyDataSet/ │ │ ├── .gitignore │ │ ├── DZNEmptyDataSet.podspec │ │ ├── Examples/ │ │ │ ├── Applications/ │ │ │ │ ├── Applications/ │ │ │ │ │ ├── AppDelegate.h │ │ │ │ │ ├── AppDelegate.m │ │ │ │ │ ├── Application.h │ │ │ │ │ ├── Application.m │ │ │ │ │ ├── Applications-Info.plist │ │ │ │ │ ├── Applications-Prefix.pch │ │ │ │ │ ├── DetailViewController.h │ │ │ │ │ ├── DetailViewController.m │ │ │ │ │ ├── Fonts/ │ │ │ │ │ │ └── Ideal Sans/ │ │ │ │ │ │ └── IdealSans-Book-Pro.otf │ │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ ├── button_background_foursquare_highlight.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── button_background_foursquare_normal.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── button_background_icloud_highlight.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── button_background_icloud_normal.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── button_background_kickstarter_highlight.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── button_background_kickstarter_normal.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── header_pinterest.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── header_podcasts.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_500px.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_airbnb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_appstore.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_camera.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_dropbox.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_facebook.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_fancy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_foursquare.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_icloud.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_instagram.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_itunes_connect.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_kickstarter.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_path.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_photos.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_pinterest.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_podcasts.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_remote.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_safari.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_skype.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_slack.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_tumblr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_twitter.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_vesper.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_videos.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_vine.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_whatsapp.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── icon_wwdc.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── loading_imgBlue_78x78.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_500px.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_airbnb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_dropbox.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_facebook.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_fancy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_foursquare.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_instagram.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_kickstarter.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_path.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_pinterest.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_skype.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_slack.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_tumblr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_twitter.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_vesper.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── logo_vine.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_500px.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_airbnb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_appstore.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_dropbox.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_facebook.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_fancy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_foursquare.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_instagram.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_itunes_connect.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_kickstarter.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_path.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_remote.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_skype.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_slack.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_tumblr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_vesper.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_videos.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── placeholder_vine.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── placeholder_whatsapp.imageset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── MainViewController.h │ │ │ │ │ ├── MainViewController.m │ │ │ │ │ ├── Storyboard.storyboard │ │ │ │ │ ├── System.xcassets/ │ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── LaunchImage.launchimage/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── UIColor+Hexadecimal.h │ │ │ │ │ ├── UIColor+Hexadecimal.m │ │ │ │ │ ├── applications.json │ │ │ │ │ ├── en.lproj/ │ │ │ │ │ │ └── InfoPlist.strings │ │ │ │ │ └── main.m │ │ │ │ ├── Applications.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── Applications.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── Podfile │ │ │ │ └── Pods/ │ │ │ │ ├── Local Podspecs/ │ │ │ │ │ └── DZNEmptyDataSet.podspec.json │ │ │ │ ├── Pods.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── xcshareddata/ │ │ │ │ │ └── xcschemes/ │ │ │ │ │ └── DZNEmptyDataSet.xcscheme │ │ │ │ └── Target Support Files/ │ │ │ │ ├── DZNEmptyDataSet/ │ │ │ │ │ ├── DZNEmptyDataSet-Private.xcconfig │ │ │ │ │ ├── DZNEmptyDataSet-dummy.m │ │ │ │ │ ├── DZNEmptyDataSet-prefix.pch │ │ │ │ │ └── DZNEmptyDataSet.xcconfig │ │ │ │ └── Pods/ │ │ │ │ ├── Pods-acknowledgements.markdown │ │ │ │ ├── Pods-acknowledgements.plist │ │ │ │ ├── Pods-dummy.m │ │ │ │ ├── Pods-resources.sh │ │ │ │ ├── Pods.debug.xcconfig │ │ │ │ └── Pods.release.xcconfig │ │ │ ├── Colors/ │ │ │ │ ├── Colors/ │ │ │ │ │ ├── AppDelegate.h │ │ │ │ │ ├── AppDelegate.m │ │ │ │ │ ├── CollectionViewController.h │ │ │ │ │ ├── CollectionViewController.m │ │ │ │ │ ├── Colors-Info.plist │ │ │ │ │ ├── Colors-Prefix.pch │ │ │ │ │ ├── DataSource/ │ │ │ │ │ │ ├── Color.h │ │ │ │ │ │ ├── Color.m │ │ │ │ │ │ ├── Palette.h │ │ │ │ │ │ ├── Palette.m │ │ │ │ │ │ ├── UIColor+Hex.h │ │ │ │ │ │ ├── UIColor+Hex.m │ │ │ │ │ │ └── colors.json │ │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ │ ├── empty_placeholder.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── search_icon.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tab_collection.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tab_search.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── tab_table.imageset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── SearchViewController.h │ │ │ │ │ ├── SearchViewController.m │ │ │ │ │ ├── Storyboard.storyboard │ │ │ │ │ ├── System.xcassets/ │ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── LaunchImage.launchimage/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── TableViewController.h │ │ │ │ │ ├── TableViewController.m │ │ │ │ │ ├── en.lproj/ │ │ │ │ │ │ └── InfoPlist.strings │ │ │ │ │ └── main.m │ │ │ │ ├── Colors.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── Colors.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── Podfile │ │ │ │ └── Pods/ │ │ │ │ ├── Local Podspecs/ │ │ │ │ │ └── DZNEmptyDataSet.podspec.json │ │ │ │ ├── Pods.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── xcshareddata/ │ │ │ │ │ └── xcschemes/ │ │ │ │ │ └── DZNEmptyDataSet.xcscheme │ │ │ │ └── Target Support Files/ │ │ │ │ ├── DZNEmptyDataSet/ │ │ │ │ │ ├── DZNEmptyDataSet-Private.xcconfig │ │ │ │ │ ├── DZNEmptyDataSet-dummy.m │ │ │ │ │ ├── DZNEmptyDataSet-prefix.pch │ │ │ │ │ └── DZNEmptyDataSet.xcconfig │ │ │ │ └── Pods/ │ │ │ │ ├── Pods-acknowledgements.markdown │ │ │ │ ├── Pods-acknowledgements.plist │ │ │ │ ├── Pods-dummy.m │ │ │ │ ├── Pods-resources.sh │ │ │ │ ├── Pods.debug.xcconfig │ │ │ │ └── Pods.release.xcconfig │ │ │ ├── Countries/ │ │ │ │ ├── Countries/ │ │ │ │ │ ├── AppDelegate.h │ │ │ │ │ ├── AppDelegate.m │ │ │ │ │ ├── Country.h │ │ │ │ │ ├── Country.m │ │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ │ ├── ad.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ae.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── af.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ag.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── al.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── am.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ar.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── at.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── au.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── az.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ba.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bd.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── be.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bf.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bh.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bi.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bj.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bo.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── br.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bs.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bt.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── by.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── bz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ca.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cd.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cf.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ch.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ci.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cl.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── co.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cu.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cv.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── cz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── de.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── dj.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── dk.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── dm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── do.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── dz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ec.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ee.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── eg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── er.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── es.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── et.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── fi.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── fj.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── fm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── fr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ga.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gd.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ge.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gh.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gq.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gt.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── gy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── hn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── hr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ht.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── hu.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── id.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ie.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── il.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── in.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── iq.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ir.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── is.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── it.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── jm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── jo.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── jp.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ke.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kh.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ki.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── km.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kp.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kv.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── kz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── la.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lc.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── li.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lk.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ls.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lt.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lu.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── lv.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ly.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ma.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mc.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── md.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── me.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mh.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mk.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ml.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mt.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mu.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mv.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mx.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── my.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── mz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── na.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ne.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ng.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ni.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── nl.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── no.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── np.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── nr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── nz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── om.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pa.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pe.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ph.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pk.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pl.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pt.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── pw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── py.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── qa.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ro.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── rs.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ru.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── rw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sa.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sb.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sc.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sd.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── se.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── search_icon.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── si.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sk.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sl.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── so.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ss.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── st.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sv.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── sz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── td.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tg.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── th.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tj.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tl.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── to.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tr.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tt.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tv.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tw.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── tz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ua.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ug.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── unknown.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── us.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── uy.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── uz.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── va.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── vc.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ve.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── vn.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── vu.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ws.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── ye.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── za.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── zm.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── zw.imageset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── MainViewController.h │ │ │ │ │ ├── MainViewController.m │ │ │ │ │ ├── Model.xcdatamodeld/ │ │ │ │ │ │ └── Model.xcdatamodel/ │ │ │ │ │ │ └── contents │ │ │ │ │ ├── Supporting Files/ │ │ │ │ │ │ ├── Countries-Info.plist │ │ │ │ │ │ ├── Countries-Prefix.pch │ │ │ │ │ │ └── main.m │ │ │ │ │ ├── System.xcassets/ │ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── LaunchImage.launchimage/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── countries.json │ │ │ │ │ └── en.lproj/ │ │ │ │ │ └── InfoPlist.strings │ │ │ │ ├── Countries.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── Countries.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── Podfile │ │ │ │ └── Pods/ │ │ │ │ ├── Local Podspecs/ │ │ │ │ │ └── DZNEmptyDataSet.podspec.json │ │ │ │ ├── NSManagedObjectContext-Hydrate/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ └── Source/ │ │ │ │ │ ├── NSManagedObjectContext+Hydrate.h │ │ │ │ │ └── NSManagedObjectContext+Hydrate.m │ │ │ │ ├── Pods.xcodeproj/ │ │ │ │ │ └── project.pbxproj │ │ │ │ └── Target Support Files/ │ │ │ │ ├── DZNEmptyDataSet/ │ │ │ │ │ ├── DZNEmptyDataSet-Private.xcconfig │ │ │ │ │ ├── DZNEmptyDataSet-dummy.m │ │ │ │ │ ├── DZNEmptyDataSet-prefix.pch │ │ │ │ │ └── DZNEmptyDataSet.xcconfig │ │ │ │ ├── NSManagedObjectContext-Hydrate/ │ │ │ │ │ ├── NSManagedObjectContext-Hydrate-Private.xcconfig │ │ │ │ │ ├── NSManagedObjectContext-Hydrate-dummy.m │ │ │ │ │ ├── NSManagedObjectContext-Hydrate-prefix.pch │ │ │ │ │ └── NSManagedObjectContext-Hydrate.xcconfig │ │ │ │ └── Pods/ │ │ │ │ ├── Pods-acknowledgements.markdown │ │ │ │ ├── Pods-acknowledgements.plist │ │ │ │ ├── Pods-dummy.m │ │ │ │ ├── Pods-resources.sh │ │ │ │ ├── Pods.debug.xcconfig │ │ │ │ └── Pods.release.xcconfig │ │ │ └── WebBrowser/ │ │ │ ├── Podfile │ │ │ ├── Pods/ │ │ │ │ ├── DZNWebViewController/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ └── Source/ │ │ │ │ │ ├── Classes/ │ │ │ │ │ │ ├── DZNPolyActivity.h │ │ │ │ │ │ ├── DZNPolyActivity.m │ │ │ │ │ │ ├── DZNWebViewController.h │ │ │ │ │ │ └── DZNWebViewController.m │ │ │ │ │ └── Scripts/ │ │ │ │ │ └── inpector-script.js │ │ │ │ ├── Local Podspecs/ │ │ │ │ │ └── DZNEmptyDataSet.podspec.json │ │ │ │ ├── NJKWebViewProgress/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── NJKWebViewProgress/ │ │ │ │ │ │ ├── NJKWebViewProgress.h │ │ │ │ │ │ ├── NJKWebViewProgress.m │ │ │ │ │ │ ├── NJKWebViewProgressView.h │ │ │ │ │ │ └── NJKWebViewProgressView.m │ │ │ │ │ └── README.md │ │ │ │ ├── Pods.xcodeproj/ │ │ │ │ │ └── project.pbxproj │ │ │ │ └── Target Support Files/ │ │ │ │ ├── DZNEmptyDataSet/ │ │ │ │ │ ├── DZNEmptyDataSet-Private.xcconfig │ │ │ │ │ ├── DZNEmptyDataSet-dummy.m │ │ │ │ │ ├── DZNEmptyDataSet-prefix.pch │ │ │ │ │ └── DZNEmptyDataSet.xcconfig │ │ │ │ ├── DZNWebViewController/ │ │ │ │ │ ├── DZNWebViewController-Private.xcconfig │ │ │ │ │ ├── DZNWebViewController-dummy.m │ │ │ │ │ ├── DZNWebViewController-prefix.pch │ │ │ │ │ └── DZNWebViewController.xcconfig │ │ │ │ ├── NJKWebViewProgress/ │ │ │ │ │ ├── NJKWebViewProgress-Private.xcconfig │ │ │ │ │ ├── NJKWebViewProgress-dummy.m │ │ │ │ │ ├── NJKWebViewProgress-prefix.pch │ │ │ │ │ └── NJKWebViewProgress.xcconfig │ │ │ │ └── Pods/ │ │ │ │ ├── Pods-acknowledgements.markdown │ │ │ │ ├── Pods-acknowledgements.plist │ │ │ │ ├── Pods-dummy.m │ │ │ │ ├── Pods-resources.sh │ │ │ │ ├── Pods.debug.xcconfig │ │ │ │ └── Pods.release.xcconfig │ │ │ ├── WebBrowser/ │ │ │ │ ├── AppDelegate.h │ │ │ │ ├── AppDelegate.m │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Info.plist │ │ │ │ ├── Launch Screen.xib │ │ │ │ ├── ViewController.h │ │ │ │ ├── ViewController.m │ │ │ │ ├── WebViewController.h │ │ │ │ ├── WebViewController.m │ │ │ │ └── main.m │ │ │ ├── WebBrowser.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ └── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── WebBrowser.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── Framework/ │ │ │ ├── DZNEmptyDataSet/ │ │ │ │ ├── DZNEmptyDataSet.h │ │ │ │ └── Info.plist │ │ │ └── DZNEmptyDataSet.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── DZNEmptyDataSet.xcscheme │ │ ├── LICENSE │ │ ├── README.md │ │ └── Source/ │ │ ├── UIScrollView+EmptyDataSet.h │ │ └── UIScrollView+EmptyDataSet.m │ ├── Nimble/ │ │ ├── .gitignore │ │ ├── .ruby-version │ │ ├── .swift-version │ │ ├── .travis.yml │ │ ├── CONTRIBUTING.md │ │ ├── Gemfile │ │ ├── LICENSE.md │ │ ├── Nimble.podspec │ │ ├── Nimble.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── Nimble-OSX.xcscheme │ │ │ ├── Nimble-iOS.xcscheme │ │ │ └── Nimble-tvOS.xcscheme │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources/ │ │ │ └── Nimble/ │ │ │ ├── Adapters/ │ │ │ │ ├── AdapterProtocols.swift │ │ │ │ ├── AssertionDispatcher.swift │ │ │ │ ├── AssertionRecorder.swift │ │ │ │ ├── NimbleEnvironment.swift │ │ │ │ ├── NimbleXCTestHandler.swift │ │ │ │ ├── NonObjectiveC/ │ │ │ │ │ └── ExceptionCapture.swift │ │ │ │ └── ObjectiveC/ │ │ │ │ ├── CurrentTestCaseTracker.h │ │ │ │ ├── DSL.h │ │ │ │ ├── DSL.m │ │ │ │ ├── NMBExceptionCapture.h │ │ │ │ ├── NMBExceptionCapture.m │ │ │ │ ├── NMBExpectation.swift │ │ │ │ ├── NMBObjCMatcher.swift │ │ │ │ ├── NMBStringify.h │ │ │ │ ├── NMBStringify.m │ │ │ │ └── XCTestObservationCenter+Register.m │ │ │ ├── DSL+Wait.swift │ │ │ ├── DSL.swift │ │ │ ├── Expectation.swift │ │ │ ├── Expression.swift │ │ │ ├── FailureMessage.swift │ │ │ ├── Info.plist │ │ │ ├── Matchers/ │ │ │ │ ├── AllPass.swift │ │ │ │ ├── AsyncMatcherWrapper.swift │ │ │ │ ├── BeAKindOf.swift │ │ │ │ ├── BeAnInstanceOf.swift │ │ │ │ ├── BeCloseTo.swift │ │ │ │ ├── BeEmpty.swift │ │ │ │ ├── BeGreaterThan.swift │ │ │ │ ├── BeGreaterThanOrEqualTo.swift │ │ │ │ ├── BeIdenticalTo.swift │ │ │ │ ├── BeLessThan.swift │ │ │ │ ├── BeLessThanOrEqual.swift │ │ │ │ ├── BeLogical.swift │ │ │ │ ├── BeNil.swift │ │ │ │ ├── BeVoid.swift │ │ │ │ ├── BeginWith.swift │ │ │ │ ├── Contain.swift │ │ │ │ ├── EndWith.swift │ │ │ │ ├── Equal.swift │ │ │ │ ├── HaveCount.swift │ │ │ │ ├── Match.swift │ │ │ │ ├── MatchError.swift │ │ │ │ ├── MatcherFunc.swift │ │ │ │ ├── MatcherProtocols.swift │ │ │ │ ├── PostNotification.swift │ │ │ │ ├── RaisesException.swift │ │ │ │ ├── SatisfyAnyOf.swift │ │ │ │ └── ThrowError.swift │ │ │ ├── Nimble.h │ │ │ └── Utils/ │ │ │ ├── Async.swift │ │ │ ├── Errors.swift │ │ │ ├── Functional.swift │ │ │ ├── SourceLocation.swift │ │ │ └── Stringers.swift │ │ ├── Tests/ │ │ │ ├── LinuxMain.swift │ │ │ └── Nimble/ │ │ │ ├── AsynchronousTest.swift │ │ │ ├── Helpers/ │ │ │ │ ├── ObjectWithLazyProperty.swift │ │ │ │ ├── XCTestCaseProvider.swift │ │ │ │ └── utils.swift │ │ │ ├── Info.plist │ │ │ ├── Matchers/ │ │ │ │ ├── AllPassTest.swift │ │ │ │ ├── BeAKindOfTest.swift │ │ │ │ ├── BeAnInstanceOfTest.swift │ │ │ │ ├── BeCloseToTest.swift │ │ │ │ ├── BeEmptyTest.swift │ │ │ │ ├── BeGreaterThanOrEqualToTest.swift │ │ │ │ ├── BeGreaterThanTest.swift │ │ │ │ ├── BeIdenticalToObjectTest.swift │ │ │ │ ├── BeIdenticalToTest.swift │ │ │ │ ├── BeLessThanOrEqualToTest.swift │ │ │ │ ├── BeLessThanTest.swift │ │ │ │ ├── BeLogicalTest.swift │ │ │ │ ├── BeNilTest.swift │ │ │ │ ├── BeVoidTest.swift │ │ │ │ ├── BeginWithTest.swift │ │ │ │ ├── ContainTest.swift │ │ │ │ ├── EndWithTest.swift │ │ │ │ ├── EqualTest.swift │ │ │ │ ├── HaveCountTest.swift │ │ │ │ ├── MatchErrorTest.swift │ │ │ │ ├── MatchTest.swift │ │ │ │ ├── PostNotificationTest.swift │ │ │ │ ├── RaisesExceptionTest.swift │ │ │ │ ├── SatisfyAnyOfTest.swift │ │ │ │ └── ThrowErrorTest.swift │ │ │ ├── SynchronousTests.swift │ │ │ ├── UserDescriptionTest.swift │ │ │ └── objc/ │ │ │ ├── NimbleSpecHelper.h │ │ │ ├── ObjCAllPassTest.m │ │ │ ├── ObjCAsyncTest.m │ │ │ ├── ObjCBeAnInstanceOfTest.m │ │ │ ├── ObjCBeCloseToTest.m │ │ │ ├── ObjCBeEmptyTest.m │ │ │ ├── ObjCBeFalseTest.m │ │ │ ├── ObjCBeFalsyTest.m │ │ │ ├── ObjCBeGreaterThanOrEqualToTest.m │ │ │ ├── ObjCBeGreaterThanTest.m │ │ │ ├── ObjCBeIdenticalToTest.m │ │ │ ├── ObjCBeKindOfTest.m │ │ │ ├── ObjCBeLessThanOrEqualToTest.m │ │ │ ├── ObjCBeLessThanTest.m │ │ │ ├── ObjCBeNilTest.m │ │ │ ├── ObjCBeTrueTest.m │ │ │ ├── ObjCBeTruthyTest.m │ │ │ ├── ObjCBeginWithTest.m │ │ │ ├── ObjCContainTest.m │ │ │ ├── ObjCEndWithTest.m │ │ │ ├── ObjCEqualTest.m │ │ │ ├── ObjCHaveCount.m │ │ │ ├── ObjCMatchTest.m │ │ │ ├── ObjCRaiseExceptionTest.m │ │ │ ├── ObjCSatisfyAnyOfTest.m │ │ │ ├── ObjCSyncTest.m │ │ │ ├── ObjCUserDescriptionTest.m │ │ │ └── ObjcStringersTest.m │ │ ├── circle.yml │ │ ├── script/ │ │ │ └── release │ │ └── test │ ├── Quick/ │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── .ruby-version │ │ ├── .swift-version │ │ ├── .travis.yml │ │ ├── CONTRIBUTING.md │ │ ├── Documentation/ │ │ │ ├── en-us/ │ │ │ │ ├── ArrangeActAssert.md │ │ │ │ ├── BehavioralTesting.md │ │ │ │ ├── ConfiguringQuick.md │ │ │ │ ├── InstallingFileTemplates.md │ │ │ │ ├── InstallingQuick.md │ │ │ │ ├── MoreResources.md │ │ │ │ ├── NimbleAssertions.md │ │ │ │ ├── QuickExamplesAndGroups.md │ │ │ │ ├── QuickInObjectiveC.md │ │ │ │ ├── README.md │ │ │ │ ├── SettingUpYourXcodeProject.md │ │ │ │ ├── SharedExamples.md │ │ │ │ └── TestingApps.md │ │ │ ├── ja/ │ │ │ │ ├── ArrangeActAssert.md │ │ │ │ ├── BehavioralTesting.md │ │ │ │ ├── ConfiguringQuick.md │ │ │ │ ├── InstallingFileTemplates.md │ │ │ │ ├── InstallingQuick.md │ │ │ │ ├── MoreResources.md │ │ │ │ ├── NimbleAssertions.md │ │ │ │ ├── QuickExamplesAndGroups.md │ │ │ │ ├── QuickInObjectiveC.md │ │ │ │ ├── README.md │ │ │ │ ├── SettingUpYourXcodeProject.md │ │ │ │ ├── SharedExamples.md │ │ │ │ └── TestingApps.md │ │ │ └── zh-cn/ │ │ │ └── SettingUpYourXcodeProject.md │ │ ├── Externals/ │ │ │ └── Nimble/ │ │ │ ├── .gitignore │ │ │ ├── .ruby-version │ │ │ ├── .swift-version │ │ │ ├── .travis.yml │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Gemfile │ │ │ ├── LICENSE.md │ │ │ ├── Nimble.podspec │ │ │ ├── Nimble.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ ├── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ ├── Nimble-OSX.xcscheme │ │ │ │ ├── Nimble-iOS.xcscheme │ │ │ │ └── Nimble-tvOS.xcscheme │ │ │ ├── Package.swift │ │ │ ├── README.md │ │ │ ├── Sources/ │ │ │ │ └── Nimble/ │ │ │ │ ├── Adapters/ │ │ │ │ │ ├── AdapterProtocols.swift │ │ │ │ │ ├── AssertionDispatcher.swift │ │ │ │ │ ├── AssertionRecorder.swift │ │ │ │ │ ├── NimbleEnvironment.swift │ │ │ │ │ ├── NimbleXCTestHandler.swift │ │ │ │ │ ├── NonObjectiveC/ │ │ │ │ │ │ └── ExceptionCapture.swift │ │ │ │ │ └── ObjectiveC/ │ │ │ │ │ ├── CurrentTestCaseTracker.h │ │ │ │ │ ├── DSL.h │ │ │ │ │ ├── DSL.m │ │ │ │ │ ├── NMBExceptionCapture.h │ │ │ │ │ ├── NMBExceptionCapture.m │ │ │ │ │ ├── NMBExpectation.swift │ │ │ │ │ ├── NMBObjCMatcher.swift │ │ │ │ │ ├── NMBStringify.h │ │ │ │ │ ├── NMBStringify.m │ │ │ │ │ └── XCTestObservationCenter+Register.m │ │ │ │ ├── DSL+Wait.swift │ │ │ │ ├── DSL.swift │ │ │ │ ├── Expectation.swift │ │ │ │ ├── Expression.swift │ │ │ │ ├── FailureMessage.swift │ │ │ │ ├── Info.plist │ │ │ │ ├── Matchers/ │ │ │ │ │ ├── AllPass.swift │ │ │ │ │ ├── AsyncMatcherWrapper.swift │ │ │ │ │ ├── BeAKindOf.swift │ │ │ │ │ ├── BeAnInstanceOf.swift │ │ │ │ │ ├── BeCloseTo.swift │ │ │ │ │ ├── BeEmpty.swift │ │ │ │ │ ├── BeGreaterThan.swift │ │ │ │ │ ├── BeGreaterThanOrEqualTo.swift │ │ │ │ │ ├── BeIdenticalTo.swift │ │ │ │ │ ├── BeLessThan.swift │ │ │ │ │ ├── BeLessThanOrEqual.swift │ │ │ │ │ ├── BeLogical.swift │ │ │ │ │ ├── BeNil.swift │ │ │ │ │ ├── BeVoid.swift │ │ │ │ │ ├── BeginWith.swift │ │ │ │ │ ├── Contain.swift │ │ │ │ │ ├── EndWith.swift │ │ │ │ │ ├── Equal.swift │ │ │ │ │ ├── HaveCount.swift │ │ │ │ │ ├── Match.swift │ │ │ │ │ ├── MatchError.swift │ │ │ │ │ ├── MatcherFunc.swift │ │ │ │ │ ├── MatcherProtocols.swift │ │ │ │ │ ├── PostNotification.swift │ │ │ │ │ ├── RaisesException.swift │ │ │ │ │ ├── SatisfyAnyOf.swift │ │ │ │ │ └── ThrowError.swift │ │ │ │ ├── Nimble.h │ │ │ │ └── Utils/ │ │ │ │ ├── Async.swift │ │ │ │ ├── Errors.swift │ │ │ │ ├── Functional.swift │ │ │ │ ├── SourceLocation.swift │ │ │ │ └── Stringers.swift │ │ │ ├── Tests/ │ │ │ │ ├── LinuxMain.swift │ │ │ │ └── Nimble/ │ │ │ │ ├── AsynchronousTest.swift │ │ │ │ ├── Helpers/ │ │ │ │ │ ├── ObjectWithLazyProperty.swift │ │ │ │ │ ├── XCTestCaseProvider.swift │ │ │ │ │ └── utils.swift │ │ │ │ ├── Info.plist │ │ │ │ ├── Matchers/ │ │ │ │ │ ├── AllPassTest.swift │ │ │ │ │ ├── BeAKindOfTest.swift │ │ │ │ │ ├── BeAnInstanceOfTest.swift │ │ │ │ │ ├── BeCloseToTest.swift │ │ │ │ │ ├── BeEmptyTest.swift │ │ │ │ │ ├── BeGreaterThanOrEqualToTest.swift │ │ │ │ │ ├── BeGreaterThanTest.swift │ │ │ │ │ ├── BeIdenticalToObjectTest.swift │ │ │ │ │ ├── BeIdenticalToTest.swift │ │ │ │ │ ├── BeLessThanOrEqualToTest.swift │ │ │ │ │ ├── BeLessThanTest.swift │ │ │ │ │ ├── BeLogicalTest.swift │ │ │ │ │ ├── BeNilTest.swift │ │ │ │ │ ├── BeVoidTest.swift │ │ │ │ │ ├── BeginWithTest.swift │ │ │ │ │ ├── ContainTest.swift │ │ │ │ │ ├── EndWithTest.swift │ │ │ │ │ ├── EqualTest.swift │ │ │ │ │ ├── HaveCountTest.swift │ │ │ │ │ ├── MatchErrorTest.swift │ │ │ │ │ ├── MatchTest.swift │ │ │ │ │ ├── PostNotificationTest.swift │ │ │ │ │ ├── RaisesExceptionTest.swift │ │ │ │ │ ├── SatisfyAnyOfTest.swift │ │ │ │ │ └── ThrowErrorTest.swift │ │ │ │ ├── SynchronousTests.swift │ │ │ │ ├── UserDescriptionTest.swift │ │ │ │ └── objc/ │ │ │ │ ├── NimbleSpecHelper.h │ │ │ │ ├── ObjCAllPassTest.m │ │ │ │ ├── ObjCAsyncTest.m │ │ │ │ ├── ObjCBeAnInstanceOfTest.m │ │ │ │ ├── ObjCBeCloseToTest.m │ │ │ │ ├── ObjCBeEmptyTest.m │ │ │ │ ├── ObjCBeFalseTest.m │ │ │ │ ├── ObjCBeFalsyTest.m │ │ │ │ ├── ObjCBeGreaterThanOrEqualToTest.m │ │ │ │ ├── ObjCBeGreaterThanTest.m │ │ │ │ ├── ObjCBeIdenticalToTest.m │ │ │ │ ├── ObjCBeKindOfTest.m │ │ │ │ ├── ObjCBeLessThanOrEqualToTest.m │ │ │ │ ├── ObjCBeLessThanTest.m │ │ │ │ ├── ObjCBeNilTest.m │ │ │ │ ├── ObjCBeTrueTest.m │ │ │ │ ├── ObjCBeTruthyTest.m │ │ │ │ ├── ObjCBeginWithTest.m │ │ │ │ ├── ObjCContainTest.m │ │ │ │ ├── ObjCEndWithTest.m │ │ │ │ ├── ObjCEqualTest.m │ │ │ │ ├── ObjCHaveCount.m │ │ │ │ ├── ObjCMatchTest.m │ │ │ │ ├── ObjCRaiseExceptionTest.m │ │ │ │ ├── ObjCSatisfyAnyOfTest.m │ │ │ │ ├── ObjCSyncTest.m │ │ │ │ ├── ObjCUserDescriptionTest.m │ │ │ │ └── ObjcStringersTest.m │ │ │ ├── circle.yml │ │ │ ├── script/ │ │ │ │ └── release │ │ │ └── test │ │ ├── Gemfile │ │ ├── LICENSE │ │ ├── Package.swift │ │ ├── Quick Templates/ │ │ │ ├── Quick Configuration Class.xctemplate/ │ │ │ │ ├── Objective-C/ │ │ │ │ │ ├── ___FILEBASENAME___.h │ │ │ │ │ └── ___FILEBASENAME___.m │ │ │ │ ├── Swift/ │ │ │ │ │ └── ___FILEBASENAME___.swift │ │ │ │ ├── TemplateIcon.icns │ │ │ │ └── TemplateInfo.plist │ │ │ └── Quick Spec Class.xctemplate/ │ │ │ ├── Objective-C/ │ │ │ │ └── ___FILEBASENAME___.m │ │ │ ├── Swift/ │ │ │ │ └── ___FILEBASENAME___.swift │ │ │ ├── TemplateIcon.icns │ │ │ └── TemplateInfo.plist │ │ ├── Quick.podspec │ │ ├── Quick.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── Quick-OSX.xcscheme │ │ │ ├── Quick-iOS.xcscheme │ │ │ └── Quick-tvOS.xcscheme │ │ ├── Quick.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── README.md │ │ ├── Rakefile │ │ ├── Sources/ │ │ │ ├── Quick/ │ │ │ │ ├── Callsite.swift │ │ │ │ ├── Configuration/ │ │ │ │ │ ├── Configuration.swift │ │ │ │ │ ├── QuickConfiguration.h │ │ │ │ │ ├── QuickConfiguration.m │ │ │ │ │ └── QuickConfiguration.swift │ │ │ │ ├── DSL/ │ │ │ │ │ ├── DSL.swift │ │ │ │ │ ├── QCKDSL.h │ │ │ │ │ ├── QCKDSL.m │ │ │ │ │ ├── World+DSL.h │ │ │ │ │ └── World+DSL.swift │ │ │ │ ├── ErrorUtility.swift │ │ │ │ ├── Example.swift │ │ │ │ ├── ExampleGroup.swift │ │ │ │ ├── ExampleMetadata.swift │ │ │ │ ├── Filter.swift │ │ │ │ ├── Hooks/ │ │ │ │ │ ├── Closures.swift │ │ │ │ │ ├── ExampleHooks.swift │ │ │ │ │ ├── HooksPhase.swift │ │ │ │ │ └── SuiteHooks.swift │ │ │ │ ├── Info.plist │ │ │ │ ├── NSBundle+CurrentTestBundle.swift │ │ │ │ ├── NSString+QCKSelectorName.h │ │ │ │ ├── NSString+QCKSelectorName.m │ │ │ │ ├── Quick.h │ │ │ │ ├── QuickMain.swift │ │ │ │ ├── QuickSelectedTestSuiteBuilder.swift │ │ │ │ ├── QuickSpec.h │ │ │ │ ├── QuickSpec.m │ │ │ │ ├── QuickSpec.swift │ │ │ │ ├── QuickTestSuite.swift │ │ │ │ ├── String+FileName.swift │ │ │ │ ├── World.h │ │ │ │ ├── World.swift │ │ │ │ └── XCTestSuite+QuickTestSuiteBuilder.m │ │ │ ├── QuickFocusedTests/ │ │ │ │ ├── FocusedTests+ObjC.m │ │ │ │ ├── FocusedTests.swift │ │ │ │ ├── Info.plist │ │ │ │ └── main.swift │ │ │ ├── QuickTestHelpers/ │ │ │ │ ├── SpecRunner.swift │ │ │ │ └── TestRun.swift │ │ │ └── QuickTests/ │ │ │ ├── Fixtures/ │ │ │ │ └── FunctionalTests_SharedExamplesTests_SharedExamples.swift │ │ │ ├── FunctionalTests/ │ │ │ │ ├── AfterEachTests+ObjC.m │ │ │ │ ├── AfterEachTests.swift │ │ │ │ ├── AfterSuiteTests+ObjC.m │ │ │ │ ├── AfterSuiteTests.swift │ │ │ │ ├── BeforeEachTests+ObjC.m │ │ │ │ ├── BeforeEachTests.swift │ │ │ │ ├── BeforeSuiteTests+ObjC.m │ │ │ │ ├── BeforeSuiteTests.swift │ │ │ │ ├── Configuration/ │ │ │ │ │ ├── AfterEach/ │ │ │ │ │ │ ├── Configuration+AfterEach.swift │ │ │ │ │ │ └── Configuration+AfterEachTests.swift │ │ │ │ │ └── BeforeEach/ │ │ │ │ │ ├── Configuration+BeforeEach.swift │ │ │ │ │ └── Configuration+BeforeEachTests.swift │ │ │ │ ├── ContextTests.swift │ │ │ │ ├── CrossReferencingSpecs.swift │ │ │ │ ├── DescribeTests.swift │ │ │ │ ├── FailureTests+ObjC.m │ │ │ │ ├── FailureUsingXCTAssertTests+ObjC.m │ │ │ │ ├── ItTests+ObjC.m │ │ │ │ ├── ItTests.swift │ │ │ │ ├── PendingTests+ObjC.m │ │ │ │ ├── PendingTests.swift │ │ │ │ ├── SharedExamples+BeforeEachTests+ObjC.m │ │ │ │ ├── SharedExamples+BeforeEachTests.swift │ │ │ │ ├── SharedExamplesTests+ObjC.m │ │ │ │ └── SharedExamplesTests.swift │ │ │ ├── Helpers/ │ │ │ │ ├── QCKSpecRunner.h │ │ │ │ ├── QCKSpecRunner.m │ │ │ │ ├── QuickSpec+QuickSpec_MethodList.h │ │ │ │ ├── QuickSpec+QuickSpec_MethodList.m │ │ │ │ ├── QuickTestsBridgingHeader.h │ │ │ │ ├── XCTestCaseProvider.swift │ │ │ │ ├── XCTestObservationCenter+QCKSuspendObservation.h │ │ │ │ └── XCTestObservationCenter+QCKSuspendObservation.m │ │ │ ├── Info.plist │ │ │ ├── QuickConfigurationTests.m │ │ │ └── main.swift │ │ ├── circle.yml │ │ └── script/ │ │ ├── release │ │ ├── travis-install-linux │ │ ├── travis-install-osx │ │ ├── travis-script-linux │ │ └── travis-script-osx │ ├── ReactiveCocoa/ │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── .travis.yml │ │ ├── CHANGELOG.md │ │ ├── CONTRIBUTING.md │ │ ├── Cartfile │ │ ├── Cartfile.private │ │ ├── Cartfile.resolved │ │ ├── Carthage/ │ │ │ └── Checkouts/ │ │ │ ├── Nimble/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .ruby-version │ │ │ │ ├── .swift-version │ │ │ │ ├── .travis.yml │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ ├── Gemfile │ │ │ │ ├── LICENSE.md │ │ │ │ ├── Nimble.podspec │ │ │ │ ├── Nimble.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── xcshareddata/ │ │ │ │ │ └── xcschemes/ │ │ │ │ │ ├── Nimble-OSX.xcscheme │ │ │ │ │ ├── Nimble-iOS.xcscheme │ │ │ │ │ └── Nimble-tvOS.xcscheme │ │ │ │ ├── Package.swift │ │ │ │ ├── README.md │ │ │ │ ├── Sources/ │ │ │ │ │ └── Nimble/ │ │ │ │ │ ├── Adapters/ │ │ │ │ │ │ ├── AdapterProtocols.swift │ │ │ │ │ │ ├── AssertionDispatcher.swift │ │ │ │ │ │ ├── AssertionRecorder.swift │ │ │ │ │ │ ├── NimbleEnvironment.swift │ │ │ │ │ │ ├── NimbleXCTestHandler.swift │ │ │ │ │ │ ├── NonObjectiveC/ │ │ │ │ │ │ │ └── ExceptionCapture.swift │ │ │ │ │ │ └── ObjectiveC/ │ │ │ │ │ │ ├── CurrentTestCaseTracker.h │ │ │ │ │ │ ├── DSL.h │ │ │ │ │ │ ├── DSL.m │ │ │ │ │ │ ├── NMBExceptionCapture.h │ │ │ │ │ │ ├── NMBExceptionCapture.m │ │ │ │ │ │ ├── NMBExpectation.swift │ │ │ │ │ │ ├── NMBObjCMatcher.swift │ │ │ │ │ │ ├── NMBStringify.h │ │ │ │ │ │ ├── NMBStringify.m │ │ │ │ │ │ └── XCTestObservationCenter+Register.m │ │ │ │ │ ├── DSL+Wait.swift │ │ │ │ │ ├── DSL.swift │ │ │ │ │ ├── Expectation.swift │ │ │ │ │ ├── Expression.swift │ │ │ │ │ ├── FailureMessage.swift │ │ │ │ │ ├── Info.plist │ │ │ │ │ ├── Matchers/ │ │ │ │ │ │ ├── AllPass.swift │ │ │ │ │ │ ├── AsyncMatcherWrapper.swift │ │ │ │ │ │ ├── BeAKindOf.swift │ │ │ │ │ │ ├── BeAnInstanceOf.swift │ │ │ │ │ │ ├── BeCloseTo.swift │ │ │ │ │ │ ├── BeEmpty.swift │ │ │ │ │ │ ├── BeGreaterThan.swift │ │ │ │ │ │ ├── BeGreaterThanOrEqualTo.swift │ │ │ │ │ │ ├── BeIdenticalTo.swift │ │ │ │ │ │ ├── BeLessThan.swift │ │ │ │ │ │ ├── BeLessThanOrEqual.swift │ │ │ │ │ │ ├── BeLogical.swift │ │ │ │ │ │ ├── BeNil.swift │ │ │ │ │ │ ├── BeVoid.swift │ │ │ │ │ │ ├── BeginWith.swift │ │ │ │ │ │ ├── Contain.swift │ │ │ │ │ │ ├── EndWith.swift │ │ │ │ │ │ ├── Equal.swift │ │ │ │ │ │ ├── HaveCount.swift │ │ │ │ │ │ ├── Match.swift │ │ │ │ │ │ ├── MatchError.swift │ │ │ │ │ │ ├── MatcherFunc.swift │ │ │ │ │ │ ├── MatcherProtocols.swift │ │ │ │ │ │ ├── PostNotification.swift │ │ │ │ │ │ ├── RaisesException.swift │ │ │ │ │ │ ├── SatisfyAnyOf.swift │ │ │ │ │ │ └── ThrowError.swift │ │ │ │ │ ├── Nimble.h │ │ │ │ │ └── Utils/ │ │ │ │ │ ├── Async.swift │ │ │ │ │ ├── Errors.swift │ │ │ │ │ ├── Functional.swift │ │ │ │ │ ├── SourceLocation.swift │ │ │ │ │ └── Stringers.swift │ │ │ │ ├── Tests/ │ │ │ │ │ ├── LinuxMain.swift │ │ │ │ │ └── Nimble/ │ │ │ │ │ ├── AsynchronousTest.swift │ │ │ │ │ ├── Helpers/ │ │ │ │ │ │ ├── ObjectWithLazyProperty.swift │ │ │ │ │ │ ├── XCTestCaseProvider.swift │ │ │ │ │ │ └── utils.swift │ │ │ │ │ ├── Info.plist │ │ │ │ │ ├── Matchers/ │ │ │ │ │ │ ├── AllPassTest.swift │ │ │ │ │ │ ├── BeAKindOfTest.swift │ │ │ │ │ │ ├── BeAnInstanceOfTest.swift │ │ │ │ │ │ ├── BeCloseToTest.swift │ │ │ │ │ │ ├── BeEmptyTest.swift │ │ │ │ │ │ ├── BeGreaterThanOrEqualToTest.swift │ │ │ │ │ │ ├── BeGreaterThanTest.swift │ │ │ │ │ │ ├── BeIdenticalToObjectTest.swift │ │ │ │ │ │ ├── BeIdenticalToTest.swift │ │ │ │ │ │ ├── BeLessThanOrEqualToTest.swift │ │ │ │ │ │ ├── BeLessThanTest.swift │ │ │ │ │ │ ├── BeLogicalTest.swift │ │ │ │ │ │ ├── BeNilTest.swift │ │ │ │ │ │ ├── BeVoidTest.swift │ │ │ │ │ │ ├── BeginWithTest.swift │ │ │ │ │ │ ├── ContainTest.swift │ │ │ │ │ │ ├── EndWithTest.swift │ │ │ │ │ │ ├── EqualTest.swift │ │ │ │ │ │ ├── HaveCountTest.swift │ │ │ │ │ │ ├── MatchErrorTest.swift │ │ │ │ │ │ ├── MatchTest.swift │ │ │ │ │ │ ├── PostNotificationTest.swift │ │ │ │ │ │ ├── RaisesExceptionTest.swift │ │ │ │ │ │ ├── SatisfyAnyOfTest.swift │ │ │ │ │ │ └── ThrowErrorTest.swift │ │ │ │ │ ├── SynchronousTests.swift │ │ │ │ │ ├── UserDescriptionTest.swift │ │ │ │ │ └── objc/ │ │ │ │ │ ├── NimbleSpecHelper.h │ │ │ │ │ ├── ObjCAllPassTest.m │ │ │ │ │ ├── ObjCAsyncTest.m │ │ │ │ │ ├── ObjCBeAnInstanceOfTest.m │ │ │ │ │ ├── ObjCBeCloseToTest.m │ │ │ │ │ ├── ObjCBeEmptyTest.m │ │ │ │ │ ├── ObjCBeFalseTest.m │ │ │ │ │ ├── ObjCBeFalsyTest.m │ │ │ │ │ ├── ObjCBeGreaterThanOrEqualToTest.m │ │ │ │ │ ├── ObjCBeGreaterThanTest.m │ │ │ │ │ ├── ObjCBeIdenticalToTest.m │ │ │ │ │ ├── ObjCBeKindOfTest.m │ │ │ │ │ ├── ObjCBeLessThanOrEqualToTest.m │ │ │ │ │ ├── ObjCBeLessThanTest.m │ │ │ │ │ ├── ObjCBeNilTest.m │ │ │ │ │ ├── ObjCBeTrueTest.m │ │ │ │ │ ├── ObjCBeTruthyTest.m │ │ │ │ │ ├── ObjCBeginWithTest.m │ │ │ │ │ ├── ObjCContainTest.m │ │ │ │ │ ├── ObjCEndWithTest.m │ │ │ │ │ ├── ObjCEqualTest.m │ │ │ │ │ ├── ObjCHaveCount.m │ │ │ │ │ ├── ObjCMatchTest.m │ │ │ │ │ ├── ObjCRaiseExceptionTest.m │ │ │ │ │ ├── ObjCSatisfyAnyOfTest.m │ │ │ │ │ ├── ObjCSyncTest.m │ │ │ │ │ ├── ObjCUserDescriptionTest.m │ │ │ │ │ └── ObjcStringersTest.m │ │ │ │ ├── circle.yml │ │ │ │ ├── script/ │ │ │ │ │ └── release │ │ │ │ └── test │ │ │ ├── Quick/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .gitmodules │ │ │ │ ├── .ruby-version │ │ │ │ ├── .swift-version │ │ │ │ ├── .travis.yml │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ ├── Documentation/ │ │ │ │ │ ├── en-us/ │ │ │ │ │ │ ├── ArrangeActAssert.md │ │ │ │ │ │ ├── BehavioralTesting.md │ │ │ │ │ │ ├── ConfiguringQuick.md │ │ │ │ │ │ ├── InstallingFileTemplates.md │ │ │ │ │ │ ├── InstallingQuick.md │ │ │ │ │ │ ├── MoreResources.md │ │ │ │ │ │ ├── NimbleAssertions.md │ │ │ │ │ │ ├── QuickExamplesAndGroups.md │ │ │ │ │ │ ├── QuickInObjectiveC.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── SettingUpYourXcodeProject.md │ │ │ │ │ │ ├── SharedExamples.md │ │ │ │ │ │ └── TestingApps.md │ │ │ │ │ ├── ja/ │ │ │ │ │ │ ├── ArrangeActAssert.md │ │ │ │ │ │ ├── BehavioralTesting.md │ │ │ │ │ │ ├── ConfiguringQuick.md │ │ │ │ │ │ ├── InstallingFileTemplates.md │ │ │ │ │ │ ├── InstallingQuick.md │ │ │ │ │ │ ├── MoreResources.md │ │ │ │ │ │ ├── NimbleAssertions.md │ │ │ │ │ │ ├── QuickExamplesAndGroups.md │ │ │ │ │ │ ├── QuickInObjectiveC.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── SettingUpYourXcodeProject.md │ │ │ │ │ │ ├── SharedExamples.md │ │ │ │ │ │ └── TestingApps.md │ │ │ │ │ └── zh-cn/ │ │ │ │ │ └── SettingUpYourXcodeProject.md │ │ │ │ ├── Externals/ │ │ │ │ │ └── Nimble/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── .ruby-version │ │ │ │ │ ├── .swift-version │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ │ ├── Gemfile │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── Nimble.podspec │ │ │ │ │ ├── Nimble.xcodeproj/ │ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ │ └── xcshareddata/ │ │ │ │ │ │ └── xcschemes/ │ │ │ │ │ │ ├── Nimble-OSX.xcscheme │ │ │ │ │ │ ├── Nimble-iOS.xcscheme │ │ │ │ │ │ └── Nimble-tvOS.xcscheme │ │ │ │ │ ├── Package.swift │ │ │ │ │ ├── README.md │ │ │ │ │ ├── Sources/ │ │ │ │ │ │ └── Nimble/ │ │ │ │ │ │ ├── Adapters/ │ │ │ │ │ │ │ ├── AdapterProtocols.swift │ │ │ │ │ │ │ ├── AssertionDispatcher.swift │ │ │ │ │ │ │ ├── AssertionRecorder.swift │ │ │ │ │ │ │ ├── NimbleEnvironment.swift │ │ │ │ │ │ │ ├── NimbleXCTestHandler.swift │ │ │ │ │ │ │ ├── NonObjectiveC/ │ │ │ │ │ │ │ │ └── ExceptionCapture.swift │ │ │ │ │ │ │ └── ObjectiveC/ │ │ │ │ │ │ │ ├── CurrentTestCaseTracker.h │ │ │ │ │ │ │ ├── DSL.h │ │ │ │ │ │ │ ├── DSL.m │ │ │ │ │ │ │ ├── NMBExceptionCapture.h │ │ │ │ │ │ │ ├── NMBExceptionCapture.m │ │ │ │ │ │ │ ├── NMBExpectation.swift │ │ │ │ │ │ │ ├── NMBObjCMatcher.swift │ │ │ │ │ │ │ ├── NMBStringify.h │ │ │ │ │ │ │ ├── NMBStringify.m │ │ │ │ │ │ │ └── XCTestObservationCenter+Register.m │ │ │ │ │ │ ├── DSL+Wait.swift │ │ │ │ │ │ ├── DSL.swift │ │ │ │ │ │ ├── Expectation.swift │ │ │ │ │ │ ├── Expression.swift │ │ │ │ │ │ ├── FailureMessage.swift │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── Matchers/ │ │ │ │ │ │ │ ├── AllPass.swift │ │ │ │ │ │ │ ├── AsyncMatcherWrapper.swift │ │ │ │ │ │ │ ├── BeAKindOf.swift │ │ │ │ │ │ │ ├── BeAnInstanceOf.swift │ │ │ │ │ │ │ ├── BeCloseTo.swift │ │ │ │ │ │ │ ├── BeEmpty.swift │ │ │ │ │ │ │ ├── BeGreaterThan.swift │ │ │ │ │ │ │ ├── BeGreaterThanOrEqualTo.swift │ │ │ │ │ │ │ ├── BeIdenticalTo.swift │ │ │ │ │ │ │ ├── BeLessThan.swift │ │ │ │ │ │ │ ├── BeLessThanOrEqual.swift │ │ │ │ │ │ │ ├── BeLogical.swift │ │ │ │ │ │ │ ├── BeNil.swift │ │ │ │ │ │ │ ├── BeVoid.swift │ │ │ │ │ │ │ ├── BeginWith.swift │ │ │ │ │ │ │ ├── Contain.swift │ │ │ │ │ │ │ ├── EndWith.swift │ │ │ │ │ │ │ ├── Equal.swift │ │ │ │ │ │ │ ├── HaveCount.swift │ │ │ │ │ │ │ ├── Match.swift │ │ │ │ │ │ │ ├── MatchError.swift │ │ │ │ │ │ │ ├── MatcherFunc.swift │ │ │ │ │ │ │ ├── MatcherProtocols.swift │ │ │ │ │ │ │ ├── PostNotification.swift │ │ │ │ │ │ │ ├── RaisesException.swift │ │ │ │ │ │ │ ├── SatisfyAnyOf.swift │ │ │ │ │ │ │ └── ThrowError.swift │ │ │ │ │ │ ├── Nimble.h │ │ │ │ │ │ └── Utils/ │ │ │ │ │ │ ├── Async.swift │ │ │ │ │ │ ├── Errors.swift │ │ │ │ │ │ ├── Functional.swift │ │ │ │ │ │ ├── SourceLocation.swift │ │ │ │ │ │ └── Stringers.swift │ │ │ │ │ ├── Tests/ │ │ │ │ │ │ ├── LinuxMain.swift │ │ │ │ │ │ └── Nimble/ │ │ │ │ │ │ ├── AsynchronousTest.swift │ │ │ │ │ │ ├── Helpers/ │ │ │ │ │ │ │ ├── ObjectWithLazyProperty.swift │ │ │ │ │ │ │ ├── XCTestCaseProvider.swift │ │ │ │ │ │ │ └── utils.swift │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── Matchers/ │ │ │ │ │ │ │ ├── AllPassTest.swift │ │ │ │ │ │ │ ├── BeAKindOfTest.swift │ │ │ │ │ │ │ ├── BeAnInstanceOfTest.swift │ │ │ │ │ │ │ ├── BeCloseToTest.swift │ │ │ │ │ │ │ ├── BeEmptyTest.swift │ │ │ │ │ │ │ ├── BeGreaterThanOrEqualToTest.swift │ │ │ │ │ │ │ ├── BeGreaterThanTest.swift │ │ │ │ │ │ │ ├── BeIdenticalToObjectTest.swift │ │ │ │ │ │ │ ├── BeIdenticalToTest.swift │ │ │ │ │ │ │ ├── BeLessThanOrEqualToTest.swift │ │ │ │ │ │ │ ├── BeLessThanTest.swift │ │ │ │ │ │ │ ├── BeLogicalTest.swift │ │ │ │ │ │ │ ├── BeNilTest.swift │ │ │ │ │ │ │ ├── BeVoidTest.swift │ │ │ │ │ │ │ ├── BeginWithTest.swift │ │ │ │ │ │ │ ├── ContainTest.swift │ │ │ │ │ │ │ ├── EndWithTest.swift │ │ │ │ │ │ │ ├── EqualTest.swift │ │ │ │ │ │ │ ├── HaveCountTest.swift │ │ │ │ │ │ │ ├── MatchErrorTest.swift │ │ │ │ │ │ │ ├── MatchTest.swift │ │ │ │ │ │ │ ├── PostNotificationTest.swift │ │ │ │ │ │ │ ├── RaisesExceptionTest.swift │ │ │ │ │ │ │ ├── SatisfyAnyOfTest.swift │ │ │ │ │ │ │ └── ThrowErrorTest.swift │ │ │ │ │ │ ├── SynchronousTests.swift │ │ │ │ │ │ ├── UserDescriptionTest.swift │ │ │ │ │ │ └── objc/ │ │ │ │ │ │ ├── NimbleSpecHelper.h │ │ │ │ │ │ ├── ObjCAllPassTest.m │ │ │ │ │ │ ├── ObjCAsyncTest.m │ │ │ │ │ │ ├── ObjCBeAnInstanceOfTest.m │ │ │ │ │ │ ├── ObjCBeCloseToTest.m │ │ │ │ │ │ ├── ObjCBeEmptyTest.m │ │ │ │ │ │ ├── ObjCBeFalseTest.m │ │ │ │ │ │ ├── ObjCBeFalsyTest.m │ │ │ │ │ │ ├── ObjCBeGreaterThanOrEqualToTest.m │ │ │ │ │ │ ├── ObjCBeGreaterThanTest.m │ │ │ │ │ │ ├── ObjCBeIdenticalToTest.m │ │ │ │ │ │ ├── ObjCBeKindOfTest.m │ │ │ │ │ │ ├── ObjCBeLessThanOrEqualToTest.m │ │ │ │ │ │ ├── ObjCBeLessThanTest.m │ │ │ │ │ │ ├── ObjCBeNilTest.m │ │ │ │ │ │ ├── ObjCBeTrueTest.m │ │ │ │ │ │ ├── ObjCBeTruthyTest.m │ │ │ │ │ │ ├── ObjCBeginWithTest.m │ │ │ │ │ │ ├── ObjCContainTest.m │ │ │ │ │ │ ├── ObjCEndWithTest.m │ │ │ │ │ │ ├── ObjCEqualTest.m │ │ │ │ │ │ ├── ObjCHaveCount.m │ │ │ │ │ │ ├── ObjCMatchTest.m │ │ │ │ │ │ ├── ObjCRaiseExceptionTest.m │ │ │ │ │ │ ├── ObjCSatisfyAnyOfTest.m │ │ │ │ │ │ ├── ObjCSyncTest.m │ │ │ │ │ │ ├── ObjCUserDescriptionTest.m │ │ │ │ │ │ └── ObjcStringersTest.m │ │ │ │ │ ├── circle.yml │ │ │ │ │ ├── script/ │ │ │ │ │ │ └── release │ │ │ │ │ └── test │ │ │ │ ├── Gemfile │ │ │ │ ├── LICENSE │ │ │ │ ├── Package.swift │ │ │ │ ├── Quick Templates/ │ │ │ │ │ ├── Quick Configuration Class.xctemplate/ │ │ │ │ │ │ ├── Objective-C/ │ │ │ │ │ │ │ ├── ___FILEBASENAME___.h │ │ │ │ │ │ │ └── ___FILEBASENAME___.m │ │ │ │ │ │ ├── Swift/ │ │ │ │ │ │ │ └── ___FILEBASENAME___.swift │ │ │ │ │ │ ├── TemplateIcon.icns │ │ │ │ │ │ └── TemplateInfo.plist │ │ │ │ │ └── Quick Spec Class.xctemplate/ │ │ │ │ │ ├── Objective-C/ │ │ │ │ │ │ └── ___FILEBASENAME___.m │ │ │ │ │ ├── Swift/ │ │ │ │ │ │ └── ___FILEBASENAME___.swift │ │ │ │ │ ├── TemplateIcon.icns │ │ │ │ │ └── TemplateInfo.plist │ │ │ │ ├── Quick.podspec │ │ │ │ ├── Quick.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── xcshareddata/ │ │ │ │ │ └── xcschemes/ │ │ │ │ │ ├── Quick-OSX.xcscheme │ │ │ │ │ ├── Quick-iOS.xcscheme │ │ │ │ │ └── Quick-tvOS.xcscheme │ │ │ │ ├── README.md │ │ │ │ ├── Rakefile │ │ │ │ ├── Sources/ │ │ │ │ │ ├── Quick/ │ │ │ │ │ │ ├── Callsite.swift │ │ │ │ │ │ ├── Configuration/ │ │ │ │ │ │ │ ├── Configuration.swift │ │ │ │ │ │ │ ├── QuickConfiguration.h │ │ │ │ │ │ │ ├── QuickConfiguration.m │ │ │ │ │ │ │ └── QuickConfiguration.swift │ │ │ │ │ │ ├── DSL/ │ │ │ │ │ │ │ ├── DSL.swift │ │ │ │ │ │ │ ├── QCKDSL.h │ │ │ │ │ │ │ ├── QCKDSL.m │ │ │ │ │ │ │ ├── World+DSL.h │ │ │ │ │ │ │ └── World+DSL.swift │ │ │ │ │ │ ├── ErrorUtility.swift │ │ │ │ │ │ ├── Example.swift │ │ │ │ │ │ ├── ExampleGroup.swift │ │ │ │ │ │ ├── ExampleMetadata.swift │ │ │ │ │ │ ├── Filter.swift │ │ │ │ │ │ ├── Hooks/ │ │ │ │ │ │ │ ├── Closures.swift │ │ │ │ │ │ │ ├── ExampleHooks.swift │ │ │ │ │ │ │ ├── HooksPhase.swift │ │ │ │ │ │ │ └── SuiteHooks.swift │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── NSBundle+CurrentTestBundle.swift │ │ │ │ │ │ ├── NSString+QCKSelectorName.h │ │ │ │ │ │ ├── NSString+QCKSelectorName.m │ │ │ │ │ │ ├── Quick.h │ │ │ │ │ │ ├── QuickMain.swift │ │ │ │ │ │ ├── QuickSelectedTestSuiteBuilder.swift │ │ │ │ │ │ ├── QuickSpec.h │ │ │ │ │ │ ├── QuickSpec.m │ │ │ │ │ │ ├── QuickSpec.swift │ │ │ │ │ │ ├── QuickTestSuite.swift │ │ │ │ │ │ ├── String+FileName.swift │ │ │ │ │ │ ├── World.h │ │ │ │ │ │ ├── World.swift │ │ │ │ │ │ └── XCTestSuite+QuickTestSuiteBuilder.m │ │ │ │ │ ├── QuickFocusedTests/ │ │ │ │ │ │ ├── FocusedTests+ObjC.m │ │ │ │ │ │ ├── FocusedTests.swift │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ └── main.swift │ │ │ │ │ ├── QuickTestHelpers/ │ │ │ │ │ │ ├── SpecRunner.swift │ │ │ │ │ │ └── TestRun.swift │ │ │ │ │ └── QuickTests/ │ │ │ │ │ ├── Fixtures/ │ │ │ │ │ │ └── FunctionalTests_SharedExamplesTests_SharedExamples.swift │ │ │ │ │ ├── FunctionalTests/ │ │ │ │ │ │ ├── AfterEachTests+ObjC.m │ │ │ │ │ │ ├── AfterEachTests.swift │ │ │ │ │ │ ├── AfterSuiteTests+ObjC.m │ │ │ │ │ │ ├── AfterSuiteTests.swift │ │ │ │ │ │ ├── BeforeEachTests+ObjC.m │ │ │ │ │ │ ├── BeforeEachTests.swift │ │ │ │ │ │ ├── BeforeSuiteTests+ObjC.m │ │ │ │ │ │ ├── BeforeSuiteTests.swift │ │ │ │ │ │ ├── Configuration/ │ │ │ │ │ │ │ ├── AfterEach/ │ │ │ │ │ │ │ │ ├── Configuration+AfterEach.swift │ │ │ │ │ │ │ │ └── Configuration+AfterEachTests.swift │ │ │ │ │ │ │ └── BeforeEach/ │ │ │ │ │ │ │ ├── Configuration+BeforeEach.swift │ │ │ │ │ │ │ └── Configuration+BeforeEachTests.swift │ │ │ │ │ │ ├── ContextTests.swift │ │ │ │ │ │ ├── CrossReferencingSpecs.swift │ │ │ │ │ │ ├── DescribeTests.swift │ │ │ │ │ │ ├── FailureTests+ObjC.m │ │ │ │ │ │ ├── FailureUsingXCTAssertTests+ObjC.m │ │ │ │ │ │ ├── ItTests+ObjC.m │ │ │ │ │ │ ├── ItTests.swift │ │ │ │ │ │ ├── PendingTests+ObjC.m │ │ │ │ │ │ ├── PendingTests.swift │ │ │ │ │ │ ├── SharedExamples+BeforeEachTests+ObjC.m │ │ │ │ │ │ ├── SharedExamples+BeforeEachTests.swift │ │ │ │ │ │ ├── SharedExamplesTests+ObjC.m │ │ │ │ │ │ └── SharedExamplesTests.swift │ │ │ │ │ ├── Helpers/ │ │ │ │ │ │ ├── QCKSpecRunner.h │ │ │ │ │ │ ├── QCKSpecRunner.m │ │ │ │ │ │ ├── QuickSpec+QuickSpec_MethodList.h │ │ │ │ │ │ ├── QuickSpec+QuickSpec_MethodList.m │ │ │ │ │ │ ├── QuickTestsBridgingHeader.h │ │ │ │ │ │ ├── XCTestCaseProvider.swift │ │ │ │ │ │ ├── XCTestObservationCenter+QCKSuspendObservation.h │ │ │ │ │ │ └── XCTestObservationCenter+QCKSuspendObservation.m │ │ │ │ │ ├── Info.plist │ │ │ │ │ ├── QuickConfigurationTests.m │ │ │ │ │ └── main.swift │ │ │ │ ├── circle.yml │ │ │ │ └── script/ │ │ │ │ ├── release │ │ │ │ ├── travis-install-linux │ │ │ │ ├── travis-install-osx │ │ │ │ ├── travis-script-linux │ │ │ │ └── travis-script-osx │ │ │ ├── Result/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .swift-version │ │ │ │ ├── .travis.yml │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ ├── LICENSE │ │ │ │ ├── Package.swift │ │ │ │ ├── README.md │ │ │ │ ├── Result/ │ │ │ │ │ ├── Info.plist │ │ │ │ │ ├── Result.h │ │ │ │ │ ├── Result.swift │ │ │ │ │ └── ResultType.swift │ │ │ │ ├── Result.podspec │ │ │ │ ├── Result.xcodeproj/ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ └── xcshareddata/ │ │ │ │ │ └── xcschemes/ │ │ │ │ │ ├── Result-Mac.xcscheme │ │ │ │ │ ├── Result-iOS.xcscheme │ │ │ │ │ ├── Result-tvOS.xcscheme │ │ │ │ │ └── Result-watchOS.xcscheme │ │ │ │ └── Tests/ │ │ │ │ ├── LinuxMain.swift │ │ │ │ └── Result/ │ │ │ │ ├── Info.plist │ │ │ │ └── ResultTests.swift │ │ │ └── xcconfigs/ │ │ │ ├── .gitignore │ │ │ ├── Base/ │ │ │ │ ├── Common.xcconfig │ │ │ │ ├── Configurations/ │ │ │ │ │ ├── Debug.xcconfig │ │ │ │ │ ├── Profile.xcconfig │ │ │ │ │ ├── Release.xcconfig │ │ │ │ │ └── Test.xcconfig │ │ │ │ └── Targets/ │ │ │ │ ├── Application.xcconfig │ │ │ │ ├── Framework.xcconfig │ │ │ │ └── StaticLibrary.xcconfig │ │ │ ├── Mac OS X/ │ │ │ │ ├── Mac-Application.xcconfig │ │ │ │ ├── Mac-Base.xcconfig │ │ │ │ ├── Mac-DynamicLibrary.xcconfig │ │ │ │ ├── Mac-Framework.xcconfig │ │ │ │ └── Mac-StaticLibrary.xcconfig │ │ │ ├── README.md │ │ │ ├── iOS/ │ │ │ │ ├── iOS-Application.xcconfig │ │ │ │ ├── iOS-Base.xcconfig │ │ │ │ ├── iOS-Framework.xcconfig │ │ │ │ └── iOS-StaticLibrary.xcconfig │ │ │ ├── tvOS/ │ │ │ │ ├── tvOS-Application.xcconfig │ │ │ │ ├── tvOS-Base.xcconfig │ │ │ │ ├── tvOS-Framework.xcconfig │ │ │ │ └── tvOS-StaticLibrary.xcconfig │ │ │ └── watchOS/ │ │ │ ├── watchOS-Application.xcconfig │ │ │ ├── watchOS-Base.xcconfig │ │ │ ├── watchOS-Framework.xcconfig │ │ │ └── watchOS-StaticLibrary.xcconfig │ │ ├── Documentation/ │ │ │ ├── BasicOperators.md │ │ │ ├── DebuggingTechniques.md │ │ │ ├── DesignGuidelines.md │ │ │ ├── DocumentingCode.md │ │ │ ├── FrameworkOverview.md │ │ │ ├── Legacy/ │ │ │ │ ├── BasicOperators.md │ │ │ │ ├── DesignGuidelines.md │ │ │ │ ├── FrameworkOverview.md │ │ │ │ ├── MemoryManagement.md │ │ │ │ └── README.md │ │ │ ├── ObjectiveCBridging.md │ │ │ └── README.md │ │ ├── Instruments/ │ │ │ ├── Disposable Growth.tracetemplate │ │ │ ├── README.md │ │ │ └── Signal Events.tracetemplate │ │ ├── LICENSE.md │ │ ├── Logo/ │ │ │ └── README.md │ │ ├── README.md │ │ ├── ReactiveCocoa/ │ │ │ ├── Info.plist │ │ │ ├── Objective-C/ │ │ │ │ ├── MKAnnotationView+RACSignalSupport.h │ │ │ │ ├── MKAnnotationView+RACSignalSupport.m │ │ │ │ ├── NSArray+RACSequenceAdditions.h │ │ │ │ ├── NSArray+RACSequenceAdditions.m │ │ │ │ ├── NSControl+RACCommandSupport.h │ │ │ │ ├── NSControl+RACCommandSupport.m │ │ │ │ ├── NSControl+RACTextSignalSupport.h │ │ │ │ ├── NSControl+RACTextSignalSupport.m │ │ │ │ ├── NSData+RACSupport.h │ │ │ │ ├── NSData+RACSupport.m │ │ │ │ ├── NSDictionary+RACSequenceAdditions.h │ │ │ │ ├── NSDictionary+RACSequenceAdditions.m │ │ │ │ ├── NSEnumerator+RACSequenceAdditions.h │ │ │ │ ├── NSEnumerator+RACSequenceAdditions.m │ │ │ │ ├── NSFileHandle+RACSupport.h │ │ │ │ ├── NSFileHandle+RACSupport.m │ │ │ │ ├── NSIndexSet+RACSequenceAdditions.h │ │ │ │ ├── NSIndexSet+RACSequenceAdditions.m │ │ │ │ ├── NSInvocation+RACTypeParsing.h │ │ │ │ ├── NSInvocation+RACTypeParsing.m │ │ │ │ ├── NSNotificationCenter+RACSupport.h │ │ │ │ ├── NSNotificationCenter+RACSupport.m │ │ │ │ ├── NSObject+RACAppKitBindings.h │ │ │ │ ├── NSObject+RACAppKitBindings.m │ │ │ │ ├── NSObject+RACDeallocating.h │ │ │ │ ├── NSObject+RACDeallocating.m │ │ │ │ ├── NSObject+RACDescription.h │ │ │ │ ├── NSObject+RACDescription.m │ │ │ │ ├── NSObject+RACKVOWrapper.h │ │ │ │ ├── NSObject+RACKVOWrapper.m │ │ │ │ ├── NSObject+RACLifting.h │ │ │ │ ├── NSObject+RACLifting.m │ │ │ │ ├── NSObject+RACPropertySubscribing.h │ │ │ │ ├── NSObject+RACPropertySubscribing.m │ │ │ │ ├── NSObject+RACSelectorSignal.h │ │ │ │ ├── NSObject+RACSelectorSignal.m │ │ │ │ ├── NSOrderedSet+RACSequenceAdditions.h │ │ │ │ ├── NSOrderedSet+RACSequenceAdditions.m │ │ │ │ ├── NSSet+RACSequenceAdditions.h │ │ │ │ ├── NSSet+RACSequenceAdditions.m │ │ │ │ ├── NSString+RACKeyPathUtilities.h │ │ │ │ ├── NSString+RACKeyPathUtilities.m │ │ │ │ ├── NSString+RACSequenceAdditions.h │ │ │ │ ├── NSString+RACSequenceAdditions.m │ │ │ │ ├── NSString+RACSupport.h │ │ │ │ ├── NSString+RACSupport.m │ │ │ │ ├── NSText+RACSignalSupport.h │ │ │ │ ├── NSText+RACSignalSupport.m │ │ │ │ ├── NSURLConnection+RACSupport.h │ │ │ │ ├── NSURLConnection+RACSupport.m │ │ │ │ ├── NSUserDefaults+RACSupport.h │ │ │ │ ├── NSUserDefaults+RACSupport.m │ │ │ │ ├── RACArraySequence.h │ │ │ │ ├── RACArraySequence.m │ │ │ │ ├── RACBehaviorSubject.h │ │ │ │ ├── RACBehaviorSubject.m │ │ │ │ ├── RACBlockTrampoline.h │ │ │ │ ├── RACBlockTrampoline.m │ │ │ │ ├── RACChannel.h │ │ │ │ ├── RACChannel.m │ │ │ │ ├── RACCommand.h │ │ │ │ ├── RACCommand.m │ │ │ │ ├── RACCompoundDisposable.h │ │ │ │ ├── RACCompoundDisposable.m │ │ │ │ ├── RACCompoundDisposableProvider.d │ │ │ │ ├── RACDelegateProxy.h │ │ │ │ ├── RACDelegateProxy.m │ │ │ │ ├── RACDisposable.h │ │ │ │ ├── RACDisposable.m │ │ │ │ ├── RACDynamicPropertySuperclass.h │ │ │ │ ├── RACDynamicPropertySuperclass.m │ │ │ │ ├── RACDynamicSequence.h │ │ │ │ ├── RACDynamicSequence.m │ │ │ │ ├── RACDynamicSignal.h │ │ │ │ ├── RACDynamicSignal.m │ │ │ │ ├── RACEagerSequence.h │ │ │ │ ├── RACEagerSequence.m │ │ │ │ ├── RACEmptySequence.h │ │ │ │ ├── RACEmptySequence.m │ │ │ │ ├── RACEmptySignal.h │ │ │ │ ├── RACEmptySignal.m │ │ │ │ ├── RACErrorSignal.h │ │ │ │ ├── RACErrorSignal.m │ │ │ │ ├── RACEvent.h │ │ │ │ ├── RACEvent.m │ │ │ │ ├── RACGroupedSignal.h │ │ │ │ ├── RACGroupedSignal.m │ │ │ │ ├── RACImmediateScheduler.h │ │ │ │ ├── RACImmediateScheduler.m │ │ │ │ ├── RACIndexSetSequence.h │ │ │ │ ├── RACIndexSetSequence.m │ │ │ │ ├── RACKVOChannel.h │ │ │ │ ├── RACKVOChannel.m │ │ │ │ ├── RACKVOProxy.h │ │ │ │ ├── RACKVOProxy.m │ │ │ │ ├── RACKVOTrampoline.h │ │ │ │ ├── RACKVOTrampoline.m │ │ │ │ ├── RACMulticastConnection+Private.h │ │ │ │ ├── RACMulticastConnection.h │ │ │ │ ├── RACMulticastConnection.m │ │ │ │ ├── RACPassthroughSubscriber.h │ │ │ │ ├── RACPassthroughSubscriber.m │ │ │ │ ├── RACQueueScheduler+Subclass.h │ │ │ │ ├── RACQueueScheduler.h │ │ │ │ ├── RACQueueScheduler.m │ │ │ │ ├── RACReplaySubject.h │ │ │ │ ├── RACReplaySubject.m │ │ │ │ ├── RACReturnSignal.h │ │ │ │ ├── RACReturnSignal.m │ │ │ │ ├── RACScheduler+Private.h │ │ │ │ ├── RACScheduler+Subclass.h │ │ │ │ ├── RACScheduler.h │ │ │ │ ├── RACScheduler.m │ │ │ │ ├── RACScopedDisposable.h │ │ │ │ ├── RACScopedDisposable.m │ │ │ │ ├── RACSequence.h │ │ │ │ ├── RACSequence.m │ │ │ │ ├── RACSerialDisposable.h │ │ │ │ ├── RACSerialDisposable.m │ │ │ │ ├── RACSignal+Operations.h │ │ │ │ ├── RACSignal+Operations.m │ │ │ │ ├── RACSignal.h │ │ │ │ ├── RACSignal.m │ │ │ │ ├── RACSignalProvider.d │ │ │ │ ├── RACSignalSequence.h │ │ │ │ ├── RACSignalSequence.m │ │ │ │ ├── RACStream+Private.h │ │ │ │ ├── RACStream.h │ │ │ │ ├── RACStream.m │ │ │ │ ├── RACStringSequence.h │ │ │ │ ├── RACStringSequence.m │ │ │ │ ├── RACSubject.h │ │ │ │ ├── RACSubject.m │ │ │ │ ├── RACSubscriber+Private.h │ │ │ │ ├── RACSubscriber.h │ │ │ │ ├── RACSubscriber.m │ │ │ │ ├── RACSubscriptingAssignmentTrampoline.h │ │ │ │ ├── RACSubscriptingAssignmentTrampoline.m │ │ │ │ ├── RACSubscriptionScheduler.h │ │ │ │ ├── RACSubscriptionScheduler.m │ │ │ │ ├── RACTargetQueueScheduler.h │ │ │ │ ├── RACTargetQueueScheduler.m │ │ │ │ ├── RACTestScheduler.h │ │ │ │ ├── RACTestScheduler.m │ │ │ │ ├── RACTuple.h │ │ │ │ ├── RACTuple.m │ │ │ │ ├── RACTupleSequence.h │ │ │ │ ├── RACTupleSequence.m │ │ │ │ ├── RACUnarySequence.h │ │ │ │ ├── RACUnarySequence.m │ │ │ │ ├── RACUnit.h │ │ │ │ ├── RACUnit.m │ │ │ │ ├── RACValueTransformer.h │ │ │ │ ├── RACValueTransformer.m │ │ │ │ ├── ReactiveCocoa-Bridging-Header.h │ │ │ │ ├── UIActionSheet+RACSignalSupport.h │ │ │ │ ├── UIActionSheet+RACSignalSupport.m │ │ │ │ ├── UIAlertView+RACSignalSupport.h │ │ │ │ ├── UIAlertView+RACSignalSupport.m │ │ │ │ ├── UIBarButtonItem+RACCommandSupport.h │ │ │ │ ├── UIBarButtonItem+RACCommandSupport.m │ │ │ │ ├── UIButton+RACCommandSupport.h │ │ │ │ ├── UIButton+RACCommandSupport.m │ │ │ │ ├── UICollectionReusableView+RACSignalSupport.h │ │ │ │ ├── UICollectionReusableView+RACSignalSupport.m │ │ │ │ ├── UIControl+RACSignalSupport.h │ │ │ │ ├── UIControl+RACSignalSupport.m │ │ │ │ ├── UIControl+RACSignalSupportPrivate.h │ │ │ │ ├── UIControl+RACSignalSupportPrivate.m │ │ │ │ ├── UIDatePicker+RACSignalSupport.h │ │ │ │ ├── UIDatePicker+RACSignalSupport.m │ │ │ │ ├── UIGestureRecognizer+RACSignalSupport.h │ │ │ │ ├── UIGestureRecognizer+RACSignalSupport.m │ │ │ │ ├── UIImagePickerController+RACSignalSupport.h │ │ │ │ ├── UIImagePickerController+RACSignalSupport.m │ │ │ │ ├── UIRefreshControl+RACCommandSupport.h │ │ │ │ ├── UIRefreshControl+RACCommandSupport.m │ │ │ │ ├── UISegmentedControl+RACSignalSupport.h │ │ │ │ ├── UISegmentedControl+RACSignalSupport.m │ │ │ │ ├── UISlider+RACSignalSupport.h │ │ │ │ ├── UISlider+RACSignalSupport.m │ │ │ │ ├── UIStepper+RACSignalSupport.h │ │ │ │ ├── UIStepper+RACSignalSupport.m │ │ │ │ ├── UISwitch+RACSignalSupport.h │ │ │ │ ├── UISwitch+RACSignalSupport.m │ │ │ │ ├── UITableViewCell+RACSignalSupport.h │ │ │ │ ├── UITableViewCell+RACSignalSupport.m │ │ │ │ ├── UITableViewHeaderFooterView+RACSignalSupport.h │ │ │ │ ├── UITableViewHeaderFooterView+RACSignalSupport.m │ │ │ │ ├── UITextField+RACSignalSupport.h │ │ │ │ ├── UITextField+RACSignalSupport.m │ │ │ │ ├── UITextView+RACSignalSupport.h │ │ │ │ ├── UITextView+RACSignalSupport.m │ │ │ │ └── extobjc/ │ │ │ │ ├── EXTKeyPathCoding.h │ │ │ │ ├── EXTRuntimeExtensions.h │ │ │ │ ├── EXTRuntimeExtensions.m │ │ │ │ ├── EXTScope.h │ │ │ │ └── metamacros.h │ │ │ ├── ReactiveCocoa.h │ │ │ └── Swift/ │ │ │ ├── Action.swift │ │ │ ├── Atomic.swift │ │ │ ├── Bag.swift │ │ │ ├── CocoaAction.swift │ │ │ ├── Disposable.swift │ │ │ ├── DynamicProperty.swift │ │ │ ├── Errors.swift │ │ │ ├── Event.swift │ │ │ ├── EventLogger.swift │ │ │ ├── Flatten.swift │ │ │ ├── FoundationExtensions.swift │ │ │ ├── ObjectiveCBridging.swift │ │ │ ├── Observer.swift │ │ │ ├── Optional.swift │ │ │ ├── Property.swift │ │ │ ├── Scheduler.swift │ │ │ ├── Signal.swift │ │ │ ├── SignalProducer.swift │ │ │ └── TupleExtensions.swift │ │ ├── ReactiveCocoa.playground/ │ │ │ ├── Pages/ │ │ │ │ ├── Sandbox.xcplaygroundpage/ │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Signal.xcplaygroundpage/ │ │ │ │ │ └── Contents.swift │ │ │ │ └── SignalProducer.xcplaygroundpage/ │ │ │ │ └── Contents.swift │ │ │ ├── Sources/ │ │ │ │ └── PlaygroundUtility.swift │ │ │ └── contents.xcplayground │ │ ├── ReactiveCocoa.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── ReactiveCocoa-Mac.xcscheme │ │ │ ├── ReactiveCocoa-iOS.xcscheme │ │ │ ├── ReactiveCocoa-tvOS.xcscheme │ │ │ └── ReactiveCocoa-watchOS.xcscheme │ │ ├── ReactiveCocoaTests/ │ │ │ ├── Info.plist │ │ │ ├── Objective-C/ │ │ │ │ ├── NSControllerRACSupportSpec.m │ │ │ │ ├── NSEnumeratorRACSequenceAdditionsSpec.m │ │ │ │ ├── NSNotificationCenterRACSupportSpec.m │ │ │ │ ├── NSObjectRACAppKitBindingsSpec.m │ │ │ │ ├── NSObjectRACDeallocatingSpec.m │ │ │ │ ├── NSObjectRACLiftingSpec.m │ │ │ │ ├── NSObjectRACPropertySubscribingExamples.h │ │ │ │ ├── NSObjectRACPropertySubscribingExamples.m │ │ │ │ ├── NSObjectRACPropertySubscribingSpec.m │ │ │ │ ├── NSObjectRACSelectorSignalSpec.m │ │ │ │ ├── NSStringRACKeyPathUtilitiesSpec.m │ │ │ │ ├── NSURLConnectionRACSupportSpec.m │ │ │ │ ├── NSUserDefaultsRACSupportSpec.m │ │ │ │ ├── RACBlockTrampolineSpec.m │ │ │ │ ├── RACChannelExamples.h │ │ │ │ ├── RACChannelExamples.m │ │ │ │ ├── RACChannelSpec.m │ │ │ │ ├── RACCommandSpec.m │ │ │ │ ├── RACCompoundDisposableSpec.m │ │ │ │ ├── RACControlCommandExamples.h │ │ │ │ ├── RACControlCommandExamples.m │ │ │ │ ├── RACDelegateProxySpec.m │ │ │ │ ├── RACDisposableSpec.m │ │ │ │ ├── RACEventSpec.m │ │ │ │ ├── RACKVOChannelSpec.m │ │ │ │ ├── RACKVOProxySpec.m │ │ │ │ ├── RACKVOWrapperSpec.m │ │ │ │ ├── RACMulticastConnectionSpec.m │ │ │ │ ├── RACPropertySignalExamples.h │ │ │ │ ├── RACPropertySignalExamples.m │ │ │ │ ├── RACSchedulerSpec.m │ │ │ │ ├── RACSequenceAdditionsSpec.m │ │ │ │ ├── RACSequenceExamples.h │ │ │ │ ├── RACSequenceExamples.m │ │ │ │ ├── RACSequenceSpec.m │ │ │ │ ├── RACSerialDisposableSpec.m │ │ │ │ ├── RACSignalSpec.m │ │ │ │ ├── RACStreamExamples.h │ │ │ │ ├── RACStreamExamples.m │ │ │ │ ├── RACSubclassObject.h │ │ │ │ ├── RACSubclassObject.m │ │ │ │ ├── RACSubjectSpec.m │ │ │ │ ├── RACSubscriberExamples.h │ │ │ │ ├── RACSubscriberExamples.m │ │ │ │ ├── RACSubscriberSpec.m │ │ │ │ ├── RACSubscriptingAssignmentTrampolineSpec.m │ │ │ │ ├── RACTargetQueueSchedulerSpec.m │ │ │ │ ├── RACTestExampleScheduler.h │ │ │ │ ├── RACTestExampleScheduler.m │ │ │ │ ├── RACTestObject.h │ │ │ │ ├── RACTestObject.m │ │ │ │ ├── RACTestSchedulerSpec.m │ │ │ │ ├── RACTestUIButton.h │ │ │ │ ├── RACTestUIButton.m │ │ │ │ ├── RACTupleSpec.m │ │ │ │ ├── UIActionSheetRACSupportSpec.m │ │ │ │ ├── UIAlertViewRACSupportSpec.m │ │ │ │ ├── UIBarButtonItemRACSupportSpec.m │ │ │ │ ├── UIButtonRACSupportSpec.m │ │ │ │ └── UIImagePickerControllerRACSupportSpec.m │ │ │ ├── Swift/ │ │ │ │ ├── ActionSpec.swift │ │ │ │ ├── AtomicSpec.swift │ │ │ │ ├── BagSpec.swift │ │ │ │ ├── CocoaActionSpec.swift │ │ │ │ ├── DisposableSpec.swift │ │ │ │ ├── FlattenSpec.swift │ │ │ │ ├── FoundationExtensionsSpec.swift │ │ │ │ ├── ObjectiveCBridgingSpec.swift │ │ │ │ ├── PropertySpec.swift │ │ │ │ ├── SchedulerSpec.swift │ │ │ │ ├── SignalLifetimeSpec.swift │ │ │ │ ├── SignalProducerLiftingSpec.swift │ │ │ │ ├── SignalProducerNimbleMatchers.swift │ │ │ │ ├── SignalProducerSpec.swift │ │ │ │ ├── SignalSpec.swift │ │ │ │ ├── TestError.swift │ │ │ │ └── TestLogger.swift │ │ │ └── test-data.json │ │ └── script/ │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── bootstrap │ │ ├── build │ │ ├── cibuild │ │ ├── schemes.awk │ │ ├── targets.awk │ │ ├── validate-playground.sh │ │ ├── xcodebuild.awk │ │ └── xctool.awk │ ├── Result/ │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── .swift-version │ │ ├── .travis.yml │ │ ├── CONTRIBUTING.md │ │ ├── Cartfile │ │ ├── Cartfile.resolved │ │ ├── Carthage/ │ │ │ └── Checkouts/ │ │ │ └── Box/ │ │ │ ├── .gitignore │ │ │ ├── Box/ │ │ │ │ ├── Box.h │ │ │ │ ├── Box.swift │ │ │ │ ├── BoxType.swift │ │ │ │ ├── Info.plist │ │ │ │ └── MutableBox.swift │ │ │ ├── Box.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ ├── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ ├── Box-Mac.xcscheme │ │ │ │ └── Box-iOS.xcscheme │ │ │ ├── BoxTests/ │ │ │ │ ├── BoxTests.swift │ │ │ │ ├── BoxTypeTests.swift │ │ │ │ ├── Info.plist │ │ │ │ └── MutableBoxTests.swift │ │ │ ├── LICENSE │ │ │ └── README.md │ │ ├── LICENSE │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Result/ │ │ │ ├── Info.plist │ │ │ ├── Result.h │ │ │ ├── Result.swift │ │ │ └── ResultType.swift │ │ ├── Result.podspec │ │ ├── Result.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── Result-Mac.xcscheme │ │ │ ├── Result-iOS.xcscheme │ │ │ ├── Result-tvOS.xcscheme │ │ │ └── Result-watchOS.xcscheme │ │ ├── Result.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── ResultTests/ │ │ │ ├── Info.plist │ │ │ └── ResultTests.swift │ │ └── Tests/ │ │ ├── LinuxMain.swift │ │ └── Result/ │ │ ├── Info.plist │ │ └── ResultTests.swift │ └── SnapKit/ │ ├── .gitignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── CodeSnippets/ │ │ ├── SnapKit Constraint Make.codesnippet │ │ └── SnapKit Constraint Remake.codesnippet │ ├── Example-iOS/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ └── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Base.lproj/ │ │ │ └── LaunchScreen.storyboard │ │ ├── Info.plist │ │ ├── ListViewController.swift │ │ └── demos/ │ │ ├── BasicUIScrollViewController.swift │ │ └── SimpleLayoutViewController.swift │ ├── ISSUE_TEMPLATE.md │ ├── LICENSE │ ├── Package.swift │ ├── README.md │ ├── SnapKit.podspec │ ├── SnapKit.xcodeproj/ │ │ ├── project.pbxproj │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ ├── SnapKit OSX.xcscheme │ │ ├── SnapKit iOS.xcscheme │ │ └── SnapKit tvOS.xcscheme │ ├── SnapKit.xcworkspace/ │ │ └── contents.xcworkspacedata │ ├── Source/ │ │ ├── Constraint.swift │ │ ├── ConstraintAttributes.swift │ │ ├── ConstraintDescription.swift │ │ ├── ConstraintItem.swift │ │ ├── ConstraintMaker.swift │ │ ├── ConstraintRelation.swift │ │ ├── Debugging.swift │ │ ├── EdgeInsets.swift │ │ ├── Info.plist │ │ ├── LayoutConstraint.swift │ │ ├── SnapKit.h │ │ ├── SnapKit.swift │ │ ├── View+SnapKit.swift │ │ └── ViewController+SnapKit.swift │ └── Tests/ │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── README.md ├── SwiftGoal/ │ ├── AppDelegate.swift │ ├── Base.lproj/ │ │ └── LaunchScreen.xib │ ├── Helpers/ │ │ ├── Color.swift │ │ ├── Extensions.swift │ │ └── RankingEngine.swift │ ├── Images.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Crown.imageset/ │ │ │ └── Contents.json │ │ ├── CrownFilled.imageset/ │ │ │ └── Contents.json │ │ └── FootballFilled.imageset/ │ │ └── Contents.json │ ├── Info.plist │ ├── Models/ │ │ ├── Changeset.swift │ │ ├── Encodable.swift │ │ ├── Match.swift │ │ ├── Player.swift │ │ └── Ranking.swift │ ├── Settings.bundle/ │ │ └── Root.plist │ ├── Stores/ │ │ ├── LocalStore.swift │ │ ├── RemoteStore.swift │ │ └── StoreType.swift │ ├── ViewModels/ │ │ ├── EditMatchViewModel.swift │ │ ├── ManagePlayersViewModel.swift │ │ ├── MatchesViewModel.swift │ │ └── RankingsViewModel.swift │ └── Views/ │ ├── EditMatchViewController.swift │ ├── ManagePlayersViewController.swift │ ├── MatchCell.swift │ ├── MatchesViewController.swift │ ├── PlayerCell.swift │ ├── RankingCell.swift │ └── RankingsViewController.swift ├── SwiftGoal.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ └── contents.xcworkspacedata │ └── xcshareddata/ │ └── xcschemes/ │ └── SwiftGoal.xcscheme └── SwiftGoalTests/ ├── Helpers/ │ └── RankingEngineSpec.swift ├── Info.plist ├── MockStore.swift ├── Models/ │ ├── ChangesetSpec.swift │ ├── MatchSpec.swift │ ├── PlayerSpec.swift │ └── RankingSpec.swift └── ViewModels/ ├── EditMatchViewModelSpec.swift ├── ManagePlayersViewModelSpec.swift ├── MatchesViewModelSpec.swift └── RankingsViewModelSpec.swift ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # # Pods/ # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build ================================================ FILE: Cartfile ================================================ github "dzenbot/DZNEmptyDataSet" == 1.8.1 github "ReactiveCocoa/ReactiveCocoa" == 4.2.2 github "SnapKit/SnapKit" == 0.21.1 github "thoughtbot/Argo" == 3.1 github "thoughtbot/Curry" == 2.3.3 ================================================ FILE: Cartfile.private ================================================ github "Quick/Quick" == 0.9.3 github "Quick/Nimble" == 4.1.0 ================================================ FILE: Cartfile.resolved ================================================ github "thoughtbot/Argo" "v3.1.0" github "thoughtbot/Curry" "v2.3.3" github "dzenbot/DZNEmptyDataSet" "v1.8.1" github "Quick/Nimble" "v4.1.0" github "Quick/Quick" "v0.9.3" github "antitypical/Result" "2.1.3" github "SnapKit/SnapKit" "0.21.1" github "ReactiveCocoa/ReactiveCocoa" "v4.2.2" ================================================ FILE: Carthage/Checkouts/Argo/.gitattributes ================================================ *.pbxproj merge=union ================================================ FILE: Carthage/Checkouts/Argo/.gitignore ================================================ # OS X Finder .DS_Store # Xcode per-user config *.mode1 *.mode1v3 *.mode2v3 *.perspective *.perspectivev3 *.pbxuser xcuserdata *.xccheckout # Build products build/ *.o *.LinkFileList *.hmap # Automatic backup files *~.nib/ *.swp *~ *.dat *.dep # Cocoapods Pods # Carthage Carthage/Build # AppCode specific files .idea/ *.iml Argo.framework.zip *.xcscmblueprint ================================================ FILE: Carthage/Checkouts/Argo/.gitmodules ================================================ [submodule "Carthage/Checkouts/Runes"] path = Carthage/Checkouts/Runes url = https://github.com/thoughtbot/Runes.git [submodule "Carthage/Checkouts/Curry"] path = Carthage/Checkouts/Curry url = https://github.com/thoughtbot/Curry.git ================================================ FILE: Carthage/Checkouts/Argo/.hound.yml ================================================ swift: enabled: true ================================================ FILE: Carthage/Checkouts/Argo/Argo/Extensions/Dictionary.swift ================================================ // pure merge for Dictionaries func + (lhs: [T: U], rhs: [T: U]) -> [T: U] { var merged = lhs for (key, val) in rhs { merged[key] = val } return merged } extension Dictionary { func map(@noescape f: Value -> T) -> [Key: T] { var accum = Dictionary(minimumCapacity: self.count) for (key, value) in self { accum[key] = f(value) } return accum } } func <^> (@noescape f: T -> U, x: [V: T]) -> [V: U] { return x.map(f) } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Extensions/NSNumber.swift ================================================ import Foundation extension NSNumber { var isBool: Bool { return CFBooleanGetTypeID() == CFGetTypeID(self) } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Extensions/RawRepresentable.swift ================================================ /** Default implementation of `Decodable` for `RawRepresentable` types using `String` as the raw value. */ public extension Decodable where Self.DecodedType == Self, Self: RawRepresentable, Self.RawValue == String { static func decode(json: JSON) -> Decoded { switch json { case let .String(s): return self.init(rawValue: s).map(pure) ?? .typeMismatch("rawValue for \(self)", actual: json) default: return .typeMismatch("String", actual: json) } } } /** Default implementation of `Decodable` for `RawRepresentable` types using `Int` as the raw value. */ public extension Decodable where Self.DecodedType == Self, Self: RawRepresentable, Self.RawValue == Int { static func decode(json: JSON) -> Decoded { switch json { case let .Number(n): return self.init(rawValue: n as Int).map(pure) ?? .typeMismatch("rawValue for \(self)", actual: json) default: return .typeMismatch("Int", actual: json) } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Functions/catDecoded.swift ================================================ /** Create a new array of unwrapped `.Success` values, filtering out `.Failure`s. This will iterate through the array of `Decoded` elements and safely unwrap the values. If the element is `.Success(T)`, it will unwrap the value and add it into the array. If the element is `.Failure`, it will not be added to the new array. - parameter xs: An array of `Decoded` values - returns: An array of unwrapped values of type `T` */ public func catDecoded(xs: [Decoded]) -> [T] { var accum: [T] = [] accum.reserveCapacity(xs.count) for x in xs { switch x { case let .Success(value): accum.append(value) case .Failure: continue } } return accum } /** Create a new dictionary of unwrapped `.Success` values, filtering out `.Failure`s. This will iterate through the dictionary of `Decoded` elements and safely unwrap the values. If the element is `.Success(T)`, it will unwrap the value and assign it to the existing key in the new dictionary. If the element is `.Failure`, it will not be added to the new dictionary. - parameter xs: A dictionary of `Decoded` values assigned to `String` keys - returns: A dictionary of unwrapped values of type `T` assigned to `String` keys */ public func catDecoded(xs: [String: Decoded]) -> [String: T] { var accum = Dictionary(minimumCapacity: xs.count) for (key, x) in xs { switch x { case let .Success(value): accum[key] = value case .Failure: continue } } return accum } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Functions/curry.swift ================================================ func curry(f : (T, U) -> V) -> T -> U -> V { return { x in { y in f(x, y) } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Functions/decode.swift ================================================ /** Attempt to transform `AnyObject` into a `Decodable` value. This function takes `AnyObject` (usually the output from `NSJSONSerialization`) and attempts to transform it into a `Decodable` value. This works based on the type you ask for. For example, the following code attempts to decode to `Decoded`, because that's what we have explicitly stated is the return type: ``` do { let object = try NSJSONSerialization.JSONObjectWithData(data, options: nil) let str: Decoded = decode(object) } catch { // handle error } ``` - parameter object: The `AnyObject` instance to attempt to decode - returns: A `Decoded` value where `T` is `Decodable` */ public func decode(object: AnyObject) -> Decoded { return T.decode(JSON(object)) } /** Attempt to transform `AnyObject` into an `Array` of `Decodable` values. This function takes `AnyObject` (usually the output from `NSJSONSerialization`) and attempts to transform it into an `Array` of `Decodable` values. This works based on the type you ask for. For example, the following code attempts to decode to `Decoded<[String]>`, because that's what we have explicitly stated is the return type: ``` do { let object = try NSJSONSerialization.JSONObjectWithData(data, options: nil) let str: Decoded<[String]> = decode(object) } catch { // handle error } ``` - parameter object: The `AnyObject` instance to attempt to decode - returns: A `Decoded<[T]>` value where `T` is `Decodable` */ public func decode(object: AnyObject) -> Decoded<[T]> { return Array.decode(JSON(object)) } /** Attempt to transform `AnyObject` into a `Decodable` value and return an `Optional`. This function takes `AnyObject` (usually the output from `NSJSONSerialization`) and attempts to transform it into a `Decodable` value, returning an `Optional`. This works based on the type you ask for. For example, the following code attempts to decode to `Optional`, because that's what we have explicitly stated is the return type: ``` do { let object = try NSJSONSerialization.JSONObjectWithData(data, options: nil) let str: String? = decode(object) } catch { // handle error } ``` - parameter object: The `AnyObject` instance to attempt to decode - returns: An `Optional` value where `T` is `Decodable` */ public func decode(object: AnyObject) -> T? { return decode(object).value } /** Attempt to transform `AnyObject` into an `Array` of `Decodable` values and return an `Optional`. This function takes `AnyObject` (usually the output from `NSJSONSerialization`) and attempts to transform it into an `Array` of `Decodable` values, returning an `Optional`. This works based on the type you ask for. For example, the following code attempts to decode to `Optional<[String]>`, because that's what we have explicitly stated is the return type: ``` do { let object = try NSJSONSerialization.JSONObjectWithData(data, options: nil) let str: [String]? = decode(object) } catch { // handle error } ``` - parameter object: The `AnyObject` instance to attempt to decode - returns: An `Optional<[T]>` value where `T` is `Decodable` */ public func decode(object: AnyObject) -> [T]? { return decode(object).value } /** Attempt to transform `AnyObject` into a `Decodable` value using a specified root key. This function attempts to extract the embedded `JSON` object from the dictionary at the specified key and transform it into a `Decodable` value. This works based on the type you ask for. For example, the following code attempts to decode to `Decoded`, because that's what we have explicitly stated is the return type: ``` do { let dict = try NSJSONSerialization.JSONObjectWithData(data, options: nil) as? [String: AnyObject] ?? [:] let str: Decoded = decode(dict, rootKey: "value") } catch { // handle error } ``` - parameter dict: The dictionary containing the `AnyObject` instance to attempt to decode - parameter rootKey: The root key that contains the object to decode - returns: A `Decoded` value where `T` is `Decodable` */ public func decode(dict: [String: AnyObject], rootKey: String) -> Decoded { return JSON(dict) <| rootKey } /** Attempt to transform `AnyObject` into an `Array` of `Decodable` value using a specified root key. This function attempts to extract the embedded `JSON` object from the dictionary at the specified key and transform it into an `Array` of `Decodable` values. This works based on the type you ask for. For example, the following code attempts to decode to `Decoded<[String]>`, because that's what we have explicitly stated is the return type: ``` do { let dict = try NSJSONSerialization.JSONObjectWithData(data, options: nil) as? [String: AnyObject] ?? [:] let str: Decoded<[String]> = decode(dict, rootKey: "value") } catch { // handle error } ``` - parameter dict: The dictionary containing the `AnyObject` instance to attempt to decode - parameter rootKey: The root key that contains the object to decode - returns: A `Decoded<[T]>` value where `T` is `Decodable` */ public func decode(dict: [String: AnyObject], rootKey: String) -> Decoded<[T]> { return JSON(dict) <|| rootKey } /** Attempt to transform `AnyObject` into a `Decodable` value using a specified root key and return an `Optional`. This function attempts to extract the embedded `JSON` object from the dictionary at the specified key and transform it into a `Decodable` value, returning an `Optional`. This works based on the type you ask for. For example, the following code attempts to decode to `Optional`, because that's what we have explicitly stated is the return type: ``` do { let dict = try NSJSONSerialization.JSONObjectWithData(data, options: nil) as? [String: AnyObject] ?? [:] let str: String? = decode(dict, rootKey: "value") } catch { // handle error } ``` - parameter dict: The dictionary containing the `AnyObject` instance to attempt to decode - parameter rootKey: The root key that contains the object to decode - returns: A `Decoded` value where `T` is `Decodable` */ public func decode(dict: [String: AnyObject], rootKey: String) -> T? { return decode(dict, rootKey: rootKey).value } /** Attempt to transform `AnyObject` into an `Array` of `Decodable` value using a specified root key and return an `Optional` This function attempts to extract the embedded `JSON` object from the dictionary at the specified key and transform it into an `Array` of `Decodable` values, returning an `Optional`. This works based on the type you ask for. For example, the following code attempts to decode to `Optional<[String]>`, because that's what we have explicitly stated is the return type: ``` do { let dict = try NSJSONSerialization.JSONObjectWithData(data, options: nil) as? [String: AnyObject] ?? [:] let str: [String]? = decode(dict, rootKey: "value") } catch { // handle error } ``` - parameter dict: The dictionary containing the `AnyObject` instance to attempt to decode - parameter rootKey: The root key that contains the object to decode - returns: A `Decoded<[T]>` value where `T` is `Decodable` */ public func decode(dict: [String: AnyObject], rootKey: String) -> [T]? { return decode(dict, rootKey: rootKey).value } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Functions/flatReduce.swift ================================================ /** Reduce a sequence with a combinator that returns a `Decoded` type, flattening the result. This function is a helper function to make it easier to deal with combinators that return `Decoded` types without ending up with multiple levels of nested `Decoded` values. For example, it can be used to traverse a JSON structure with an array of keys. See the implementations of `<|` and `<||` that take an array of keys for a real-world example of this use case. - parameter sequence: Any `SequenceType` of values - parameter initial: The initial value for the accumulator - parameter combine: The combinator, which returns a `Decoded` type - returns: The result of iterating the combinator over every element of the sequence and flattening the result */ public func flatReduce(sequence: S, initial: U, @noescape combine: (U, S.Generator.Element) -> Decoded) -> Decoded { return sequence.reduce(pure(initial)) { accum, x in accum >>- { combine($0, x) } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Functions/sequence.swift ================================================ /** Convert an `Array` of `Decoded` values to a `Decoded` `Array` of unwrapped `T` values. This performs an all-or-nothing transformation on the array. If every element is `.Success`, then this function will return `.Success` along with the array of unwrapped `T` values. However, if _any_ of the elements are `.Failure`, this function will also return `.Failure`, and no array will be returned. - parameter xs: An `Array` of `Decoded` values - returns: A `Decoded` `Array` of unwrapped `T` values */ public func sequence(xs: [Decoded]) -> Decoded<[T]> { var accum: [T] = [] accum.reserveCapacity(xs.count) for x in xs { switch x { case let .Success(value): accum.append(value) case let .Failure(error): return .Failure(error) } } return pure(accum) } /** Convert a `Dictionary` with `Decoded` values to a `Decoded` `Dictionary` with unwrapped `T` values. This performs an all-or-nothing transformation on the dictionary. If every key is associated with a `.Success` value, then this function will return `.Success` along with the dictionary of unwrapped `T` values associated with their original keys. However, if _any_ of the keys are associated with a `.Failure` value, this function will also return `.Failure`, and no dictionary will be returned. - parameter xs: A `Dictionary` of arbitrary keys and `Decoded` values - returns: A `Decoded` `Dictionary` of unwrapped `T` values assigned to their original keys */ public func sequence(xs: [Key: Decoded]) -> Decoded<[Key: Value]> { var accum = Dictionary(minimumCapacity: xs.count) for (key, x) in xs { switch x { case let .Success(value): accum[key] = value case let .Failure(error): return .Failure(error) } } return pure(accum) } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Operators/Argo.swift ================================================ infix operator <| { associativity left precedence 150 } infix operator <|? { associativity left precedence 150 } infix operator <|| { associativity left precedence 150 } infix operator <||? { associativity left precedence 150 } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Operators/Decode.swift ================================================ /** Attempt to decode a value at the specified key into the requested type. This operator is used to decode a mandatory value from the `JSON`. If the decoding fails for any reason, this will result in a `.Failure` being returned. - parameter json: The `JSON` object containing the key - parameter key: The key for the object to decode - returns: A `Decoded` value representing the success or failure of the decode operation */ public func <| (json: JSON, key: String) -> Decoded { return json <| [key] } /** Attempt to decode an optional value at the specified key into the requested type. This operator is used to decode an optional value from the `JSON`. If the key isn't present in the `JSON`, this will still return `.Success`. However, if the key exists but the object assigned to that key is unable to be decoded into the requested type, this will return `.Failure`. - parameter json: The `JSON` object containing the key - parameter key: The key for the object to decode - returns: A `Decoded` optional value representing the success or failure of the decode operation */ public func <|? (json: JSON, key: String) -> Decoded { return .optional(json <| [key]) } /** Attempt to decode a value at the specified key path into the requested type. This operator is used to decode a mandatory value from the `JSON`. If the decoding fails for any reason, this will result in a `.Failure` being returned. - parameter json: The `JSON` object containing the key - parameter keys: The key path for the object to decode, represented by an array of strings - returns: A `Decoded` value representing the success or failure of the decode operation */ public func <| (json: JSON, keys: [String]) -> Decoded { return flatReduce(keys, initial: json, combine: decodedJSON) >>- A.decode } /** Attempt to decode an optional value at the specified key path into the requested type. This operator is used to decode an optional value from the `JSON`. If any of the keys in the key path aren't present in the `JSON`, this will still return `.Success`. However, if the key path exists but the object assigned to the final key is unable to be decoded into the requested type, this will return `.Failure`. - parameter json: The `JSON` object containing the key - parameter keys: The key path for the object to decode, represented by an array of strings - returns: A `Decoded` optional value representing the success or failure of the decode operation */ public func <|? (json: JSON, keys: [String]) -> Decoded { return .optional(json <| keys) } /** Attempt to decode an array of values at the specified key into the requested type. This operator is used to decode a mandatory array of values from the `JSON`. If the decoding of any of the objects fail for any reason, this will result in a `.Failure` being returned. - parameter json: The `JSON` object containing the key - parameter key: The key for the array of objects to decode - returns: A `Decoded` array of values representing the success or failure of the decode operation */ public func <|| (json: JSON, key: String) -> Decoded<[A]> { return json <|| [key] } /** Attempt to decode an optional array of values at the specified key into the requested type. This operator is used to decode an optional array of values from the `JSON`. If the key isn't present in the `JSON`, this will still return `.Success`. However, if the key exists but the objects assigned to that key are unable to be decoded into the requested type, this will return `.Failure`. - parameter json: The `JSON` object containing the key - parameter key: The key for the object to decode - returns: A `Decoded` optional array of values representing the success or failure of the decode operation */ public func <||? (json: JSON, key: String) -> Decoded<[A]?> { return .optional(json <|| [key]) } /** Attempt to decode an array of values at the specified key path into the requested type. This operator is used to decode a mandatory array of values from the `JSON`. If the decoding fails for any reason, this will result in a `.Failure` being returned. - parameter json: The `JSON` object containing the key - parameter keys: The key path for the object to decode, represented by an array of strings - returns: A `Decoded` array of values representing the success or failure of the decode operation */ public func <|| (json: JSON, keys: [String]) -> Decoded<[A]> { return flatReduce(keys, initial: json, combine: decodedJSON) >>- Array.decode } /** Attempt to decode an optional array of values at the specified key path into the requested type. This operator is used to decode an optional array of values from the `JSON`. If any of the keys in the key path aren't present in the `JSON`, this will still return `.Success`. However, if the key path exists but the objects assigned to the final key are unable to be decoded into the requested type, this will return `.Failure`. - parameter json: The `JSON` object containing the key - parameter keys: The key path for the object to decode, represented by an array of strings - returns: A `Decoded` optional array of values representing the success or failure of the decode operation */ public func <||? (json: JSON, keys: [String]) -> Decoded<[A]?> { return .optional(json <|| keys) } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Resources/Argo.h ================================================ #import //! Project version number for Argo. FOUNDATION_EXPORT double ArgoVersionNumber; //! Project version string for Argo. FOUNDATION_EXPORT const unsigned char ArgoVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import ================================================ FILE: Carthage/Checkouts/Argo/Argo/Resources/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 3.1.0 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decodable.swift ================================================ public protocol Decodable { /** The type of object that will be decoded. In order to work with the rest of Argo, this needs to be the same as `Self`. You will only need to worry about this if the object conforming to `Decodable` is a reference type (i.e. a `class`), and one of the following is true: - Your type is not marked as `final` - Your `decode` function is not marked as either `final` or `static` In that case, you will need to explicitly set `DecodedType` to the type you are returning in order for the compiler to be able to guarantee that this protocol is being fully conformed to. We expect the need for this typealias to be removed in a later version of Swift. */ associatedtype DecodedType = Self /** Decode an object from JSON. This is the main entry point for Argo. This function declares how the conforming type should be decoded from JSON. Since this is a failable operation, we need to return a `Decoded` type from this function. - parameter json: The `JSON` representation of this object - returns: A decoded instance of the `DecodedType` */ static func decode(json: JSON) -> Decoded } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/DecodeError.swift ================================================ /// Possible decoding failure reasons. public enum DecodeError: ErrorType { /// The type existing at the key didn't match the type being requested. case TypeMismatch(expected: String, actual: String) /// The key did not exist in the JSON. case MissingKey(String) /// A custom error case for adding explicit failure info. case Custom(String) } extension DecodeError: CustomStringConvertible { public var description: String { switch self { case let .TypeMismatch(expected, actual): return "TypeMismatch(Expected \(expected), got \(actual))" case let .MissingKey(s): return "MissingKey(\(s))" case let .Custom(s): return "Custom(\(s))" } } } extension DecodeError: Hashable { public var hashValue: Int { switch self { case let .TypeMismatch(expected: expected, actual: actual): return expected.hashValue ^ actual.hashValue case let .MissingKey(string): return string.hashValue case let .Custom(string): return string.hashValue } } } public func == (lhs: DecodeError, rhs: DecodeError) -> Bool { switch (lhs, rhs) { case let (.TypeMismatch(expected: expected1, actual: actual1), .TypeMismatch(expected: expected2, actual: actual2)): return expected1 == expected2 && actual1 == actual2 case let (.MissingKey(string1), .MissingKey(string2)): return string1 == string2 case let (.Custom(string1), .Custom(string2)): return string1 == string2 default: return false } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decoded/Alternative.swift ================================================ infix operator <|> { associativity left precedence 140 } /** Return the left `Decoded` value if it is `.Success`, otherwise return the default value on the right. - If the left hand side is `.Success`, this will return the argument on the left hand side. - If the left hand side is `.Failure`, this will return the argument on the right hand side. - parameter lhs: A value of type `Decoded` - parameter rhs: A value of type `Decoded` - returns: A value of type `Decoded` */ public func <|> (lhs: Decoded, @autoclosure rhs: () -> Decoded) -> Decoded { return lhs.or(rhs) } public extension Decoded { /** Return `self` if it is `.Success`, otherwise return the provided default value. - If `self` is `.Success`, this will return `self`. - If `self` is `.Failure`, this will return the default. - parameter other: A value of type `Decoded` - returns: A value of type `Decoded` */ func or(@autoclosure other: () -> Decoded) -> Decoded { switch self { case .Success: return self case .Failure: return other() } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decoded/Applicative.swift ================================================ /** Conditionally apply a `Decoded` function to a `Decoded` value. - If either the function or value arguments are `.Failure`, this will return `.Failure`. The function's `.Failure` takes precedence here, and will be returned first. If the function is `.Success` and the value is `.Failure`, then the value's `.Failure` will be returned. - If both the function and value arguments are `.Success`, this will return the result of the function applied to the unwrapped value. - parameter f: A `Decoded` transformation function from type `T` to type `U` - parameter x: A value of type `Decoded` - returns: A value of type `Decoded` */ public func <*> (f: Decoded U>, x: Decoded) -> Decoded { return x.apply(f) } /** Wrap a value in the minimal context of `.Success`. - parameter x: Any value - returns: The provided value wrapped in `.Success` */ public func pure(x: T) -> Decoded { return .Success(x) } public extension Decoded { /** Conditionally apply a `Decoded` function to `self`. - If either the function or `self` are `.Failure`, this will return `.Failure`. The function's `.Failure` takes precedence here, and will be returned first. If the function is `.Success` and `self` is `.Failure`, then `self`'s `.Failure` will be returned. - If both the function and `self` are `.Success`, this will return the result of the function applied to the unwrapped value. - parameter f: A `Decoded` transformation function from type `T` to type `U` - returns: A value of type `Decoded` */ func apply(f: Decoded U>) -> Decoded { switch f { case let .Success(function): return self.map(function) case let .Failure(error): return .Failure(error) } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decoded/Decoded.swift ================================================ /// The result of a failable decoding operation. public enum Decoded { case Success(T) case Failure(DecodeError) } public extension Decoded { /** Get the unwrapped value as an `Optional`. - returns: The unwrapped value if it exists, otherwise `.None` */ var value: T? { switch self { case let .Success(value): return value case .Failure: return .None } } /** Get the error value as an `Optional`. - returns: The unwrapped error if it exists, otherwise `.None` */ var error: DecodeError? { switch self { case .Success: return .None case let .Failure(error): return error } } } public extension Decoded { /** Convert a `Decoded` type into a `Decoded` `Optional` type. This is useful for when a decode operation should be allowed to fail, such as when decoding an optional property. It only returns a `.Failure` case if the error is `.TypeMismatch` or `.Custom`. If the error was `.MissingKey`, it converts the failure into `.Success(.None)`. - parameter x: A `Decoded` type - returns: The `Decoded` type with a `.TypeMismatch` failure converted to `.Success(.None)` */ static func optional(x: Decoded) -> Decoded { switch x { case let .Success(value): return .Success(.Some(value)) case .Failure(.MissingKey): return .Success(.None) case let .Failure(.TypeMismatch(expected, actual)): return .Failure(.TypeMismatch(expected: expected, actual: actual)) case let .Failure(.Custom(x)): return .Failure(.Custom(x)) } } /** Convert an `Optional` into a `Decoded` value. If the provided optional is `.Some`, this method extracts the value and wraps it in `.Success`. Otherwise, it returns a `.TypeMismatch` error. - returns: The provided `Optional` value transformed into a `Decoded` value */ static func fromOptional(x: T?) -> Decoded { switch x { case let .Some(value): return .Success(value) case .None: return .typeMismatch(".Some(\(T.self))", actual: ".None") } } } public extension Decoded { /** Convenience function for creating `.TypeMismatch` errors. - parameter expected: A string describing the expected type - parameter actual: A string describing the actual type - returns: A `Decoded.Failure` with a `.TypeMismatch` error constructed from the provided `expected` and `actual` values */ static func typeMismatch(expected: String, actual: U) -> Decoded { return .Failure(.TypeMismatch(expected: expected, actual: String(actual))) } /** Convenience function for creating `.MissingKey` errors. - parameter name: The name of the missing key - returns: A `Decoded.Failure` with a `.MissingKey` error constructed from the provided `name` value */ static func missingKey(name: String) -> Decoded { return .Failure(.MissingKey(name)) } /** Convenience function for creating `.Custom` errors - parameter message: The custom error message - returns: A `Decoded.Failure` with a `.Custom` error constructed from the provided `message` value */ static func customError(message: String) -> Decoded { return .Failure(.Custom(message)) } } extension Decoded: CustomStringConvertible { public var description: String { switch self { case let .Success(value): return "Success(\(value))" case let .Failure(error): return "Failure(\(error))" } } } public extension Decoded { /** Extract the `.Success` value or throw an error. This can be used to move from `Decoded` types into the world of `throws`. If the value exists, this will return it. Otherwise, it will throw the error information. - throws: `DecodeError` if `self` is `.Failure` - returns: The unwrapped value */ func dematerialize() throws -> T { switch self { case let .Success(value): return value case let .Failure(error): throw error } } } /** Construct a `Decoded` type from a throwing function. This can be used to move from the world of `throws` into a `Decoded` type. If the function succeeds, it will wrap the returned value in a minimal context of `.Success`. Otherwise, it will return a custom error with the thrown error from the function. - parameter f: A function from `Void` to `T` that can `throw` an error - returns: A `Decoded` type representing the success or failure of the function */ public func materialize(f: () throws -> T) -> Decoded { do { return .Success(try f()) } catch { return .customError("\(error)") } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decoded/FailureCoalescing.swift ================================================ /** Return the unwrapped value of the `Decoded` value on the left if it is `.Success`, otherwise return the default on the right. - If the left hand side is `.Success`, this will return the unwrapped value from the left hand side argument. - If the left hand side is `.Failure`, this will return the default value on the right hand side. - parameter lhs: A value of type `Decoded` - parameter rhs: An autoclosure returning a value of type `T` - returns: A value of type `T` */ public func ?? (lhs: Decoded, @autoclosure rhs: () -> T) -> T { switch lhs { case let .Success(x): return x case .Failure: return rhs() } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decoded/Functor.swift ================================================ /** Conditionally map a function over a `Decoded` value. - If the value is `.Failure`, the function will not be evaluated and this will return `.Failure`. - If the value is `.Success`, the function will be applied to the unwrapped value. - parameter f: A transformation function from type `T` to type `U` - parameter x: A value of type `Decoded` - returns: A value of type `Decoded` */ public func <^> (@noescape f: T -> U, x: Decoded) -> Decoded { return x.map(f) } public extension Decoded { /** Conditionally map a function over `self`. - If `self` is `.Failure`, the function will not be evaluated and this will return `.Failure`. - If `self` is `.Success`, the function will be applied to the unwrapped value. - parameter f: A transformation function from type `T` to type `U` - returns: A value of type `Decoded` */ func map(@noescape f: T -> U) -> Decoded { switch self { case let .Success(value): return .Success(f(value)) case let .Failure(error): return .Failure(error) } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/Decoded/Monad.swift ================================================ /** Conditionally map a function over a `Decoded` value, flattening the result. - If the value is `.Failure`, the function will not be evaluated and this will return `.Failure`. - If the value is `.Success`, the function will be applied to the unwrapped value. - parameter x: A value of type `Decoded` - parameter f: A transformation function from type `T` to type `Decoded` - returns: A value of type `Decoded` */ public func >>- (x: Decoded, @noescape f: T -> Decoded) -> Decoded { return x.flatMap(f) } /** Conditionally map a function over a `Decoded` value, flattening the result. - If the value is `.Failure`, the function will not be evaluated and this will return `.Failure`. - If the value is `.Success`, the function will be applied to the unwrapped value. - parameter f: A transformation function from type `T` to type `Decoded` - parameter x: A value of type `Decoded` - returns: A value of type `Decoded` */ public func -<< (@noescape f: T -> Decoded, x: Decoded) -> Decoded { return x.flatMap(f) } public extension Decoded { /** Conditionally map a function over `self`, flattening the result. - If `self` is `.Failure`, the function will not be evaluated and this will return `.Failure`. - If `self` is `.Success`, the function will be applied to the unwrapped value. - parameter f: A transformation function from type `T` to type `Decoded` - returns: A value of type `Decoded` */ func flatMap(@noescape f: T -> Decoded) -> Decoded { switch self { case let .Success(value): return f(value) case let .Failure(error): return .Failure(error) } } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/JSON.swift ================================================ import Foundation /// A type safe representation of JSON. public enum JSON { case Object([Swift.String: JSON]) case Array([JSON]) case String(Swift.String) case Number(NSNumber) case Bool(Swift.Bool) case Null } public extension JSON { /** Transform an `AnyObject` instance into `JSON`. This is used to move from a loosely typed object (like those returned from `NSJSONSerialization`) to the strongly typed `JSON` tree structure. - parameter json: A loosely typed object */ init(_ json: AnyObject) { switch json { case let v as [AnyObject]: self = .Array(v.map(JSON.init)) case let v as [Swift.String: AnyObject]: self = .Object(v.map(JSON.init)) case let v as Swift.String: self = .String(v) case let v as NSNumber: if v.isBool { self = .Bool(v as Swift.Bool) } else { self = .Number(v) } default: self = .Null } } } extension JSON: Decodable { /** Decode `JSON` into `Decoded`. This simply wraps the provided `JSON` in `.Success`. This is useful because it means we can use `JSON` values with the `<|` family of operators to pull out sub-keys. - parameter j: The `JSON` value to decode - returns: The provided `JSON` wrapped in `.Success` */ public static func decode(j: JSON) -> Decoded { return pure(j) } } extension JSON: CustomStringConvertible { public var description: Swift.String { switch self { case let .String(v): return "String(\(v))" case let .Number(v): return "Number(\(v))" case let .Bool(v): return "Bool(\(v))" case let .Array(a): return "Array(\(a.description))" case let .Object(o): return "Object(\(o.description))" case .Null: return "Null" } } } extension JSON: Equatable { } public func == (lhs: JSON, rhs: JSON) -> Bool { switch (lhs, rhs) { case let (.String(l), .String(r)): return l == r case let (.Number(l), .Number(r)): return l == r case let (.Bool(l), .Bool(r)): return l == r case let (.Array(l), .Array(r)): return l == r case let (.Object(l), .Object(r)): return l == r case (.Null, .Null): return true default: return false } } /// MARK: Deprecations extension JSON { @available(*, deprecated=3.0, renamed="init") static func parse(json: AnyObject) -> JSON { return JSON(json) } } ================================================ FILE: Carthage/Checkouts/Argo/Argo/Types/StandardTypes.swift ================================================ import Foundation extension String: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a string, otherwise it returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded `String` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .String(s): return pure(s) default: return .typeMismatch("String", actual: j) } } } extension Int: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a number that can be converted to an `Int`, otherwise it returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded `Int` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Number(n): return pure(n as Int) default: return .typeMismatch("Int", actual: j) } } } extension UInt: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a number that can be converted to a `UInt`, otherwise it returns a type mismatch. - parameter json: The `JSON` value to decode - returns: A decoded `UInt` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Number(n): return pure(n as UInt) default: return .typeMismatch("UInt", actual: j) } } } extension Int64: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a number that can be converted to an `Int64` or a string that represents a large number, otherwise it returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded `Int64` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Number(n): return pure(n.longLongValue) case let .String(s): guard let i = Int64(s) else { fallthrough } return pure(i) default: return .typeMismatch("Int64", actual: j) } } } extension UInt64: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a number that can be converted to an `UInt64` or a string that represents a large number, otherwise it returns a type mismatch. - parameter json: The `JSON` value to decode - returns: A decoded `UInt` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Number(n): return pure(n.unsignedLongLongValue) case let .String(s): guard let i = UInt64(s) else { fallthrough } return pure(i) default: return .typeMismatch("UInt64", actual: j) } } } extension Double: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a number that can be converted to a `Double`, otherwise it returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded `Double` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Number(n): return pure(n as Double) default: return .typeMismatch("Double", actual: j) } } } extension Float: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a number that can be converted to a `Float`, otherwise it returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded `Float` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Number(n): return pure(n as Float) default: return .typeMismatch("Float", actual: j) } } } extension Bool: Decodable { /** Decode `JSON` into `Decoded`. Succeeds if the value is a boolean or if the value is a number that is able to be converted to a boolean, otherwise it returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded `Bool` value */ public static func decode(j: JSON) -> Decoded { switch j { case let .Bool(n): return pure(n) case let .Number(n): return pure(n as Bool) default: return .typeMismatch("Bool", actual: j) } } } public extension Optional where Wrapped: Decodable, Wrapped == Wrapped.DecodedType { /** Decode `JSON` into an `Optional` value where `Wrapped` is `Decodable`. Returns a decoded optional value from the result of performing `decode` on the internal wrapped type. - parameter j: The `JSON` value to decode - returns: A decoded optional `Wrapped` value */ static func decode(j: JSON) -> Decoded { return .optional(Wrapped.decode(j)) } } public extension CollectionType where Generator.Element: Decodable, Generator.Element == Generator.Element.DecodedType { /** Decode `JSON` into an array of values where the elements of the array are `Decodable`. If the `JSON` is an array of `JSON` objects, this returns a decoded array of values by mapping the element's `decode` function over the `JSON` and then applying `sequence` to the result. This makes this `decode` function an all-or-nothing operation (See the documentation for `sequence` for more info). If the `JSON` is not an array, this returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded array of values */ static func decode(j: JSON) -> Decoded<[Generator.Element]> { switch j { case let .Array(a): return sequence(a.map(Generator.Element.decode)) default: return .typeMismatch("Array", actual: j) } } } /** Decode `JSON` into an array of values where the elements of the array are `Decodable`. If the `JSON` is an array of `JSON` objects, this returns a decoded array of values by mapping the element's `decode` function over the `JSON` and then applying `sequence` to the result. This makes `decodeArray` an all-or-nothing operation (See the documentation for `sequence` for more info). If the `JSON` is not an array, this returns a type mismatch. This is a convenience function that is the same as `[T].decode(j)` (where `T` is `Decodable`) and only exists to ease some pain around needing to use the full type of the array when calling `decode`. We expect this function to be removed in a future version. - parameter j: The `JSON` value to decode - returns: A decoded array of values */ public func decodeArray(j: JSON) -> Decoded<[T]> { return [T].decode(j) } public extension DictionaryLiteralConvertible where Value: Decodable, Value == Value.DecodedType { /** Decode `JSON` into a dictionary of keys and values where the keys are `String`s and the values are `Decodable`. If the `JSON` is a dictionary of `String`/`JSON` pairs, this returns a decoded dictionary of key/value pairs by mapping the value's `decode` function over the `JSON` and then applying `sequence` to the result. This makes this `decode` function an all-or-nothing operation (See the documentation for `sequence` for more info). If the `JSON` is not a dictionary, this returns a type mismatch. - parameter j: The `JSON` value to decode - returns: A decoded dictionary of key/value pairs */ static func decode(j: JSON) -> Decoded<[String: Value]> { switch j { case let .Object(o): return sequence(Value.decode <^> o) default: return .typeMismatch("Object", actual: j) } } } /** Decode `JSON` into a dictionary of keys and values where the keys are `String`s and the values are `Decodable`. If the `JSON` is a dictionary of `String`/`JSON` pairs, this returns a decoded dictionary of key/value pairs by mapping the value's `decode` function over the `JSON` and then applying `sequence` to the result. This makes `decodeObject` an all-or-nothing operation (See the documentation for `sequence` for more info). If the `JSON` is not a dictionary, this returns a type mismatch. This is a convenience function that is the same as `[String: T].decode(j)` (where `T` is `Decodable`) and only exists to ease some pain around needing to use the full type of the dictionary when calling `decode`. We expect this function to be removed in a future version. - parameter j: The `JSON` value to decode - returns: A decoded dictionary of key/value pairs */ public func decodeObject(j: JSON) -> Decoded<[String: T]> { return [String: T].decode(j) } /** Pull an embedded `JSON` value from a specified key. If the `JSON` value is an object, it will attempt to return the embedded `JSON` value at the specified key, failing if the key doesn't exist. If the `JSON` value is not an object, this will return a type mismatch. This is similar to adding a subscript to `JSON`, except that it returns a `Decoded` type. - parameter json: The `JSON` value that contains the key - parameter key: The key containing the embedded `JSON` object - returns: A decoded `JSON` value representing the success or failure of extracting the value from the object */ public func decodedJSON(json: JSON, forKey key: String) -> Decoded { switch json { case let .Object(o): return guardNull(key, j: o[key] ?? .Null) default: return .typeMismatch("Object", actual: json) } } private func guardNull(key: String, j: JSON) -> Decoded { switch j { case .Null: return .missingKey(key) default: return pure(j) } } ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/Pages/Basics.xcplaygroundpage/Contents.swift ================================================ /*: **Note:** For **Argo** to be imported into the Playground, ensure that the **Argo-Mac** *scheme* is selected from the list of schemes. * * * */ import Foundation import Argo import Curry /*: **Helper function** – load JSON from a file */ func JSONFromFile(file: String) -> AnyObject? { return NSBundle.mainBundle().pathForResource(file, ofType: "json") .flatMap { NSData(contentsOfFile: $0) } .flatMap(JSONObjectWithData) } func JSONObjectWithData(data: NSData) -> AnyObject? { do { return try NSJSONSerialization.JSONObjectWithData(data, options: []) } catch { return .None } } /*: ## Decoding JSON into a simple **User** struct The **User** struct has three properties, one of which is an Optional value. (The example JSON file can be found in the **Resources** folder.) */ struct User { let id: Int let name: String let email: String? } extension User: CustomStringConvertible { var description: String { return "name: \(name), id: \(id), email: \(email)" } } extension User: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "id" <*> j <| "name" <*> j <|? "email" } } /*: * * * */ let user: User? = JSONFromFile("user_with_email").flatMap(decode) print(user!) ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/Pages/Basics.xcplaygroundpage/Resources/user_with_email.json ================================================ { "id": 1, "name": "Cool User", "email": "u.cool@example.com" } ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/Pages/Basics.xcplaygroundpage/timeline.xctimeline ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/Pages/iTunes Example.xcplaygroundpage/Contents.swift ================================================ /*: **Note:** For **Argo** to be imported into the Playground, ensure that the **Argo-Mac** *scheme* is selected from the list of schemes. * * * */ import Foundation import Argo import Curry /*: **Helper function** – load JSON from a file */ func JSONFromFile(file: String) -> AnyObject? { return NSBundle.mainBundle().pathForResource(file, ofType: "json") .flatMap { NSData(contentsOfFile: $0) } .flatMap(JSONObjectWithData) } func JSONObjectWithData(data: NSData) -> AnyObject? { do { return try NSJSONSerialization.JSONObjectWithData(data, options: []) } catch { return .None } } /*: During JSON decoding, a **String** representation of a date needs to be converted to a **NSDate**. To achieve this, a **NSDateFormatter** and a helper function will be used. */ let jsonDateFormatter: NSDateFormatter = { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssz" return dateFormatter }() let toNSDate: String -> Decoded = { .fromOptional(jsonDateFormatter.dateFromString($0)) } /*: ## Decoding selected entries from the iTunes store JSON format An example JSON file (**tropos.json**) can be found in the **resources** folder. */ struct App { let name: String let formattedPrice: String let averageUserRating: Float? let releaseDate: NSDate } extension App: CustomStringConvertible { var description: String { return "name: \(name)\nprice: \(formattedPrice), rating: \(averageUserRating), released: \(releaseDate)" } } extension App: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "trackName" <*> j <| "formattedPrice" <*> j <|? "averageUserRating" <*> (j <| "releaseDate" >>- toNSDate) } } /*: * * * */ let app: App? = (JSONFromFile("tropos")?["results"].flatMap(decode))?.first print(app!) ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/Pages/iTunes Example.xcplaygroundpage/Resources/tropos.json ================================================ { "resultCount":1, "results":[ { "isGameCenterEnabled":false, "screenshotUrls":[ "http://a5.mzstatic.com/us/r30/Purple5/v4/8b/3e/bd/8b3ebd2c-9dfe-1ce5-cdf5-8c89d854e375/screen322x572.jpeg", "http://a1.mzstatic.com/us/r30/Purple5/v4/e6/4f/36/e64f369d-d453-f007-dd15-361d21641116/screen322x572.jpeg", "http://a1.mzstatic.com/us/r30/Purple1/v4/74/77/cd/7477cd91-a094-3c22-fff1-cf75e7474dad/screen322x572.jpeg" ], "ipadScreenshotUrls":[ ], "artworkUrl60":"http://is2.mzstatic.com/image/pf/us/r30/Purple3/v4/1b/b7/31/1bb731e3-a35a-9eaa-b13e-c536e639851c/AppIcon60x60_U00402x.png", "artworkUrl512":"http://is4.mzstatic.com/image/pf/us/r30/Purple3/v4/e2/c5/42/e2c542e5-664e-36df-2285-490b7c16941e/mzl.ivsinquu.png", "artistViewUrl":"https://itunes.apple.com/us/artist/thoughtbot-inc./id337354066?uo=4", "kind":"software", "features":[ ], "supportedDevices":[ "iPhone4S", "iPadThirdGen4G", "iPodTouchFifthGen", "iPhone6", "iPadMini4G", "iPhone6Plus", "iPadThirdGen", "iPadFourthGen", "iPad23G", "iPad2Wifi", "iPadFourthGen4G", "iPadMini", "iPhone5c", "iPhone5", "iPhone5s" ], "advisories":[ ], "averageUserRatingForCurrentVersion":5.0, "artworkUrl100":"http://is4.mzstatic.com/image/pf/us/r30/Purple3/v4/e2/c5/42/e2c542e5-664e-36df-2285-490b7c16941e/mzl.ivsinquu.png", "trackCensoredName":"Tropos – Weather and forecasts for humans", "languageCodesISO2A":[ "EN" ], "fileSizeBytes":"2945254", "sellerUrl":"http://troposweather.com", "contentAdvisoryRating":"4+", "userRatingCountForCurrentVersion":1, "trackViewUrl":"https://itunes.apple.com/us/app/tropos-weather-forecasts-for/id955209376?mt=8&uo=4", "trackContentRating":"4+", "currency":"USD", "wrapperType":"software", "version":"1.0.1", "artistId":337354066, "artistName":"thoughtbot, inc.", "genres":[ "Weather" ], "price":0.99, "description":"Weather and forecasts for humans. Information you can act on.\n\nMost weather apps throw a lot of information at you but that doesn't answer the question of \"What does it feel like outside?\". Tropos answers this by relating the current conditions to conditions the same time yesterday.\n\nFeatures:\n• Current conditions presented in plain language. For example, “It is warmer tonight than last night.”\n• Intelligent use of color to convey how it feels in your area compared to yesterday.\n• Simple, 3-day forecast that allows you to see how the next few days are trending.\n\nthoughtbot is dedicated to building the best possible application. Your feedback is invaluable to us. Get in touch at help@troposweather.com.", "bundleId":"com.thoughtbot.carlweathers", "genreIds":[ "6001" ], "releaseDate":"2015-03-25T18:34:40Z", "sellerName":"thoughtbot, inc.", "trackId":955209376, "trackName":"Tropos – Weather and forecasts for humans", "primaryGenreName":"Weather", "primaryGenreId":6001, "releaseNotes":"- Fixed an issue where the app could crash if you're going buck-wild messing around with the pull to refresh control.\n- Improved the relative weather description in cases where it's crazy hot or ridiculously cold outside. Tropos will no longer tell you that it's hotter today when it's 10°F outside. (Sorry, Boston)\n- Fixed an issue where the high and low temperatures could be lower or higher than the current temperature, respectively. That's just silly.\n\nFinally, we want to thank everyone for supporting Tropos!", "minimumOsVersion":"8.0", "formattedPrice":"$0.99", "averageUserRating":4.5, "userRatingCount":10 } ] } ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/Pages/iTunes Example.xcplaygroundpage/timeline.xctimeline ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/contents.xcplayground ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo Playground.playground/playground.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo.podspec ================================================ Pod::Spec.new do |spec| spec.name = 'Argo' spec.version = '3.1.0' spec.summary = 'Functional JSON parsing library for Swift.' spec.homepage = 'https://github.com/thoughtbot/Argo' spec.license = { :type => 'MIT', :file => 'LICENSE' } spec.author = { 'Gordon Fontenot' => 'gordon@thoughtbot.com', 'Tony DiPasquale' => 'tony@thoughtbot.com', 'thoughtbot' => nil, } spec.social_media_url = 'http://twitter.com/thoughtbot' spec.source = { :git => 'https://github.com/thoughtbot/Argo.git', :tag => "v#{spec.version}", :submodules => true } spec.source_files = 'Argo/**/*.{h,swift}', 'Carthage/Checkouts/Runes/Source/Runes.swift' spec.requires_arc = true spec.compiler_flags = '-whole-module-optimization' spec.ios.deployment_target = '8.0' spec.osx.deployment_target = '10.9' spec.watchos.deployment_target = '2.0' spec.tvos.deployment_target = '9.0' end ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 4D5F6DD91B3832C200D79B25 /* user_with_nested_name.json in Resources */ = {isa = PBXBuildFile; fileRef = 4D5F6DD81B3832C200D79B25 /* user_with_nested_name.json */; }; 4D5F6DDA1B3832C200D79B25 /* user_with_nested_name.json in Resources */ = {isa = PBXBuildFile; fileRef = 4D5F6DD81B3832C200D79B25 /* user_with_nested_name.json */; }; 809586051BB84CEE004F9319 /* Curry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 809586041BB84CE7004F9319 /* Curry.framework */; }; 809754CB1BADF34200C409E6 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 809754C11BADF34100C409E6 /* Argo.framework */; }; 809754D81BADF36D00C409E6 /* Decoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69E1ABC5F1300E3B0AB /* Decoded.swift */; }; 809754D91BADF36D00C409E6 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69F1ABC5F1300E3B0AB /* JSON.swift */; }; 809754DA1BADF36D00C409E6 /* Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A01ABC5F1300E3B0AB /* Decodable.swift */; }; 809754DB1BADF36D00C409E6 /* StandardTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A11ABC5F1300E3B0AB /* StandardTypes.swift */; }; 809754DC1BADF36D00C409E6 /* DecodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84318A71B9A2D7A00165216 /* DecodeError.swift */; }; 809754DD1BADF36D00C409E6 /* Runes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F876F1D61B56FBB300B38589 /* Runes.swift */; }; 809754DE1BADF36D00C409E6 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAF519D0F7900031E006 /* Decode.swift */; }; 809754DF1BADF36D00C409E6 /* (null) in Sources */ = {isa = PBXBuildFile; }; 809754E11BADF36D00C409E6 /* curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6991ABC5F1300E3B0AB /* curry.swift */; }; 809754E21BADF36D00C409E6 /* decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69A1ABC5F1300E3B0AB /* decode.swift */; }; 809754E31BADF36D00C409E6 /* flatReduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69B1ABC5F1300E3B0AB /* flatReduce.swift */; }; 809754E41BADF36D00C409E6 /* sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69C1ABC5F1300E3B0AB /* sequence.swift */; }; 809754E51BADF36D00C409E6 /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CBE6661A64521000316FBC /* Dictionary.swift */; }; 809754E61BADF36D00C409E6 /* RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF92789C1B9365900038A7E1 /* RawRepresentable.swift */; }; 809754E71BADF37200C409E6 /* Argo.h in Headers */ = {isa = PBXBuildFile; fileRef = F893356D1A4CE8FC00B88685 /* Argo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 809754E81BADF3E400C409E6 /* PListDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF6931A9CD4FC00B6CC83 /* PListDecodingTests.swift */; }; 809754E91BADF3E400C409E6 /* SwiftDictionaryDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF6891A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift */; }; 809754EA1BADF3E400C409E6 /* OptionalPropertyDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0D19D215570031E006 /* OptionalPropertyDecodingTests.swift */; }; 809754EB1BADF3E400C409E6 /* EmbeddedJSONDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB1119D30E660031E006 /* EmbeddedJSONDecodingTests.swift */; }; 809754EC1BADF3E400C409E6 /* TypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA08313019D5EEAF003B90D7 /* TypeTests.swift */; }; 809754ED1BADF3E400C409E6 /* ExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA395DC61A52F93B00EB607E /* ExampleTests.swift */; }; 809754EE1BADF3E400C409E6 /* EquatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADADCB11A5DB6F600B180EC /* EquatableTests.swift */; }; 809754EF1BADF3E400C409E6 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6DD69B1AB383FB00CA3A5B /* PerformanceTests.swift */; }; 809754F01BADF3E400C409E6 /* DecodedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA47BB521AFC5B76002D2CCD /* DecodedTests.swift */; }; 809754F11BADF3E400C409E6 /* RawRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1200CA1BAB5CBA006DDBD8 /* RawRepresentableTests.swift */; }; 809754F21BADF3E400C409E6 /* JSONFileReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0F19D21AF50031E006 /* JSONFileReader.swift */; }; 809754F31BADF3E400C409E6 /* PListFileReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF68D1A9CD4EA00B6CC83 /* PListFileReader.swift */; }; 809754F41BADF3E400C409E6 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAFD19D2113C0031E006 /* User.swift */; }; 809754F51BADF3E400C409E6 /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAFF19D211630031E006 /* Comment.swift */; }; 809754F61BADF3E400C409E6 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0119D211C10031E006 /* Post.swift */; }; 809754F71BADF3E400C409E6 /* TestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB1719D49A3E0031E006 /* TestModel.swift */; }; 809754F81BADF3E400C409E6 /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F802D4C21A5EE061005E236C /* NSURL.swift */; }; 809754F91BADF3ED00C409E6 /* user_with_email.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0419D2143A0031E006 /* user_with_email.json */; }; 809754FA1BADF3ED00C409E6 /* user_without_email.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0819D214AA0031E006 /* user_without_email.json */; }; 809754FB1BADF3ED00C409E6 /* user_with_nested_name.json in Resources */ = {isa = PBXBuildFile; fileRef = 4D5F6DD81B3832C200D79B25 /* user_with_nested_name.json */; }; 809754FC1BADF3ED00C409E6 /* url.json in Resources */ = {isa = PBXBuildFile; fileRef = F802D4C51A5EE2D5005E236C /* url.json */; }; 809754FD1BADF3ED00C409E6 /* root_array.json in Resources */ = {isa = PBXBuildFile; fileRef = F874B7E91A66BF52004CCE5E /* root_array.json */; }; 809754FE1BADF3ED00C409E6 /* TemplateIcon2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0919D214AA0031E006 /* TemplateIcon2x.png */; }; 809754FF1BADF3ED00C409E6 /* comment.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB1319D30ED00031E006 /* comment.json */; }; 809755001BADF3ED00C409E6 /* post_no_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB1519D30F8D0031E006 /* post_no_comments.json */; }; 809755011BADF3ED00C409E6 /* post_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = EA08313219D5EEF2003B90D7 /* post_comments.json */; }; 809755021BADF3ED00C409E6 /* post_bad_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = F8E33FA41A51E0C20025A6E5 /* post_bad_comments.json */; }; 809755031BADF3ED00C409E6 /* types.json in Resources */ = {isa = PBXBuildFile; fileRef = EA08313419D5EFC0003B90D7 /* types.json */; }; 809755041BADF3ED00C409E6 /* types_fail_embedded.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4EAF7219DD96330036AE0D /* types_fail_embedded.json */; }; 809755051BADF3ED00C409E6 /* array_root.json in Resources */ = {isa = PBXBuildFile; fileRef = EA395DC31A52F8EB00EB607E /* array_root.json */; }; 809755061BADF3ED00C409E6 /* root_object.json in Resources */ = {isa = PBXBuildFile; fileRef = EA395DC91A52FC1400EB607E /* root_object.json */; }; 809755071BADF3ED00C409E6 /* big_data.json in Resources */ = {isa = PBXBuildFile; fileRef = EA6DD69E1AB384C700CA3A5B /* big_data.json */; }; 809755081BADF3ED00C409E6 /* user_with_bad_type.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47BB551AFC5DAC002D2CCD /* user_with_bad_type.json */; }; 809755091BADF3ED00C409E6 /* user_without_key.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47BB581AFC5E65002D2CCD /* user_without_key.json */; }; 8097550A1BADF3F200C409E6 /* types.plist in Resources */ = {isa = PBXBuildFile; fileRef = EABDF68E1A9CD4EA00B6CC83 /* types.plist */; }; BF92789D1B9365900038A7E1 /* RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF92789C1B9365900038A7E1 /* RawRepresentable.swift */; }; D0592EBE1B77DD8E00EFEF39 /* Decoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69E1ABC5F1300E3B0AB /* Decoded.swift */; }; D0592EBF1B77DD8E00EFEF39 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69F1ABC5F1300E3B0AB /* JSON.swift */; }; D0592EC01B77DD8E00EFEF39 /* Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A01ABC5F1300E3B0AB /* Decodable.swift */; }; D0592EC11B77DD8E00EFEF39 /* StandardTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A11ABC5F1300E3B0AB /* StandardTypes.swift */; }; D0592EC21B77DD9300EFEF39 /* Runes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F876F1D61B56FBB300B38589 /* Runes.swift */; }; D0592EC31B77DD9300EFEF39 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAF519D0F7900031E006 /* Decode.swift */; }; D0592EC41B77DD9A00EFEF39 /* curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6991ABC5F1300E3B0AB /* curry.swift */; }; D0592EC51B77DD9A00EFEF39 /* decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69A1ABC5F1300E3B0AB /* decode.swift */; }; D0592EC61B77DD9A00EFEF39 /* flatReduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69B1ABC5F1300E3B0AB /* flatReduce.swift */; }; D0592EC71B77DD9A00EFEF39 /* sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69C1ABC5F1300E3B0AB /* sequence.swift */; }; D0592EC81B77DD9A00EFEF39 /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CBE6661A64521000316FBC /* Dictionary.swift */; }; EA04D5911BBF1F40001DE23B /* Monad.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5901BBF1F40001DE23B /* Monad.swift */; }; EA04D5921BBF1F40001DE23B /* Monad.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5901BBF1F40001DE23B /* Monad.swift */; }; EA04D5931BBF1F40001DE23B /* Monad.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5901BBF1F40001DE23B /* Monad.swift */; }; EA04D5951BBF1F80001DE23B /* Functor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5941BBF1F80001DE23B /* Functor.swift */; }; EA04D5961BBF1F80001DE23B /* Functor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5941BBF1F80001DE23B /* Functor.swift */; }; EA04D5971BBF1F80001DE23B /* Functor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5941BBF1F80001DE23B /* Functor.swift */; }; EA04D5991BBF1FA4001DE23B /* Applicative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5981BBF1FA4001DE23B /* Applicative.swift */; }; EA04D59A1BBF1FA4001DE23B /* Applicative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5981BBF1FA4001DE23B /* Applicative.swift */; }; EA04D59B1BBF1FA4001DE23B /* Applicative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5981BBF1FA4001DE23B /* Applicative.swift */; }; EA04D59D1BBF1FB9001DE23B /* Alternative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D59C1BBF1FB9001DE23B /* Alternative.swift */; }; EA04D59E1BBF1FB9001DE23B /* Alternative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D59C1BBF1FB9001DE23B /* Alternative.swift */; }; EA04D59F1BBF1FB9001DE23B /* Alternative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D59C1BBF1FB9001DE23B /* Alternative.swift */; }; EA04D5A11BBF2021001DE23B /* FailureCoalescing.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A01BBF2021001DE23B /* FailureCoalescing.swift */; }; EA04D5A21BBF2021001DE23B /* FailureCoalescing.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A01BBF2021001DE23B /* FailureCoalescing.swift */; }; EA04D5A31BBF2021001DE23B /* FailureCoalescing.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A01BBF2021001DE23B /* FailureCoalescing.swift */; }; EA04D5A51BBF2047001DE23B /* Argo.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A41BBF2047001DE23B /* Argo.swift */; }; EA04D5A61BBF2047001DE23B /* Argo.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A41BBF2047001DE23B /* Argo.swift */; }; EA04D5A71BBF2047001DE23B /* Argo.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A41BBF2047001DE23B /* Argo.swift */; }; EA08313119D5EEAF003B90D7 /* TypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA08313019D5EEAF003B90D7 /* TypeTests.swift */; }; EA08313319D5EEF2003B90D7 /* post_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = EA08313219D5EEF2003B90D7 /* post_comments.json */; }; EA08313519D5EFC0003B90D7 /* types.json in Resources */ = {isa = PBXBuildFile; fileRef = EA08313419D5EFC0003B90D7 /* types.json */; }; EA1200CB1BAB5CBA006DDBD8 /* RawRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1200CA1BAB5CBA006DDBD8 /* RawRepresentableTests.swift */; }; EA1200CC1BAB5CBA006DDBD8 /* RawRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1200CA1BAB5CBA006DDBD8 /* RawRepresentableTests.swift */; }; EA1200CD1BAB621C006DDBD8 /* RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF92789C1B9365900038A7E1 /* RawRepresentable.swift */; }; EA1200CE1BAB621C006DDBD8 /* RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF92789C1B9365900038A7E1 /* RawRepresentable.swift */; }; EA395DC21A5209C000EB607E /* post_bad_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = F8E33FA41A51E0C20025A6E5 /* post_bad_comments.json */; }; EA395DC41A52F8EB00EB607E /* array_root.json in Resources */ = {isa = PBXBuildFile; fileRef = EA395DC31A52F8EB00EB607E /* array_root.json */; }; EA395DC51A52F8EE00EB607E /* array_root.json in Resources */ = {isa = PBXBuildFile; fileRef = EA395DC31A52F8EB00EB607E /* array_root.json */; }; EA395DC71A52F93B00EB607E /* ExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA395DC61A52F93B00EB607E /* ExampleTests.swift */; }; EA395DC81A52FA5300EB607E /* ExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA395DC61A52F93B00EB607E /* ExampleTests.swift */; }; EA395DCA1A52FC1400EB607E /* root_object.json in Resources */ = {isa = PBXBuildFile; fileRef = EA395DC91A52FC1400EB607E /* root_object.json */; }; EA395DCB1A52FC1400EB607E /* root_object.json in Resources */ = {isa = PBXBuildFile; fileRef = EA395DC91A52FC1400EB607E /* root_object.json */; }; EA47BB531AFC5B76002D2CCD /* DecodedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA47BB521AFC5B76002D2CCD /* DecodedTests.swift */; }; EA47BB541AFC5B76002D2CCD /* DecodedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA47BB521AFC5B76002D2CCD /* DecodedTests.swift */; }; EA47BB561AFC5DAC002D2CCD /* user_with_bad_type.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47BB551AFC5DAC002D2CCD /* user_with_bad_type.json */; }; EA47BB571AFC5DAC002D2CCD /* user_with_bad_type.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47BB551AFC5DAC002D2CCD /* user_with_bad_type.json */; }; EA47BB591AFC5E65002D2CCD /* user_without_key.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47BB581AFC5E65002D2CCD /* user_without_key.json */; }; EA47BB5A1AFC5E65002D2CCD /* user_without_key.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47BB581AFC5E65002D2CCD /* user_without_key.json */; }; EA4EAF7319DD96330036AE0D /* types_fail_embedded.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4EAF7219DD96330036AE0D /* types_fail_embedded.json */; }; EA6DD69C1AB383FB00CA3A5B /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6DD69B1AB383FB00CA3A5B /* PerformanceTests.swift */; }; EA6DD69D1AB383FB00CA3A5B /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6DD69B1AB383FB00CA3A5B /* PerformanceTests.swift */; }; EA6DD69F1AB384C700CA3A5B /* big_data.json in Resources */ = {isa = PBXBuildFile; fileRef = EA6DD69E1AB384C700CA3A5B /* big_data.json */; }; EA6DD6A01AB384C700CA3A5B /* big_data.json in Resources */ = {isa = PBXBuildFile; fileRef = EA6DD69E1AB384C700CA3A5B /* big_data.json */; }; EA9159F61BDE74BC00D85292 /* Argo.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A41BBF2047001DE23B /* Argo.swift */; }; EA9159F71BDE74C700D85292 /* catDecoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8EF432E1BBC728A001886BA /* catDecoded.swift */; }; EA9159F81BDE74E400D85292 /* Monad.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5901BBF1F40001DE23B /* Monad.swift */; }; EA9159F91BDE74EB00D85292 /* Functor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5941BBF1F80001DE23B /* Functor.swift */; }; EA9159FA1BDE74F300D85292 /* Applicative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5981BBF1FA4001DE23B /* Applicative.swift */; }; EA9159FB1BDE74F800D85292 /* Alternative.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D59C1BBF1FB9001DE23B /* Alternative.swift */; }; EA9159FC1BDE74FC00D85292 /* FailureCoalescing.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA04D5A01BBF2021001DE23B /* FailureCoalescing.swift */; }; EABDF68A1A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF6891A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift */; }; EABDF68B1A9CD46400B6CC83 /* SwiftDictionaryDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF6891A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift */; }; EABDF68F1A9CD4EA00B6CC83 /* PListFileReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF68D1A9CD4EA00B6CC83 /* PListFileReader.swift */; }; EABDF6901A9CD4EA00B6CC83 /* PListFileReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF68D1A9CD4EA00B6CC83 /* PListFileReader.swift */; }; EABDF6911A9CD4EA00B6CC83 /* types.plist in Resources */ = {isa = PBXBuildFile; fileRef = EABDF68E1A9CD4EA00B6CC83 /* types.plist */; }; EABDF6921A9CD4EA00B6CC83 /* types.plist in Resources */ = {isa = PBXBuildFile; fileRef = EABDF68E1A9CD4EA00B6CC83 /* types.plist */; }; EABDF6941A9CD4FC00B6CC83 /* PListDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF6931A9CD4FC00B6CC83 /* PListDecodingTests.swift */; }; EABDF6951A9CD4FC00B6CC83 /* PListDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABDF6931A9CD4FC00B6CC83 /* PListDecodingTests.swift */; }; EAD9FAF619D0F7900031E006 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAF519D0F7900031E006 /* Decode.swift */; }; EAD9FAFE19D2113C0031E006 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAFD19D2113C0031E006 /* User.swift */; }; EAD9FB0019D211630031E006 /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAFF19D211630031E006 /* Comment.swift */; }; EAD9FB0219D211C10031E006 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0119D211C10031E006 /* Post.swift */; }; EAD9FB0619D2143A0031E006 /* user_with_email.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0419D2143A0031E006 /* user_with_email.json */; }; EAD9FB0A19D214AA0031E006 /* user_without_email.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0819D214AA0031E006 /* user_without_email.json */; }; EAD9FB0B19D214AA0031E006 /* TemplateIcon2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0919D214AA0031E006 /* TemplateIcon2x.png */; }; EAD9FB0E19D215570031E006 /* OptionalPropertyDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0D19D215570031E006 /* OptionalPropertyDecodingTests.swift */; }; EAD9FB1019D21AF50031E006 /* JSONFileReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0F19D21AF50031E006 /* JSONFileReader.swift */; }; EAD9FB1219D30E660031E006 /* EmbeddedJSONDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB1119D30E660031E006 /* EmbeddedJSONDecodingTests.swift */; }; EAD9FB1419D30ED00031E006 /* comment.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB1319D30ED00031E006 /* comment.json */; }; EAD9FB1619D30F8D0031E006 /* post_no_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB1519D30F8D0031E006 /* post_no_comments.json */; }; EAD9FB1819D49A3E0031E006 /* TestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB1719D49A3E0031E006 /* TestModel.swift */; }; EADADCB21A5DB6F600B180EC /* EquatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADADCB11A5DB6F600B180EC /* EquatableTests.swift */; }; EADADCB41A5DB7F800B180EC /* EquatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADADCB11A5DB6F600B180EC /* EquatableTests.swift */; }; F802D4C31A5EE061005E236C /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F802D4C21A5EE061005E236C /* NSURL.swift */; }; F802D4C41A5EE172005E236C /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F802D4C21A5EE061005E236C /* NSURL.swift */; }; F802D4C61A5EE2D5005E236C /* url.json in Resources */ = {isa = PBXBuildFile; fileRef = F802D4C51A5EE2D5005E236C /* url.json */; }; F802D4C71A5EE2D5005E236C /* url.json in Resources */ = {isa = PBXBuildFile; fileRef = F802D4C51A5EE2D5005E236C /* url.json */; }; F82D15F31C3C82730079FFB5 /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82D15F21C3C82730079FFB5 /* NSNumber.swift */; }; F84290291B57EFAE008F57B4 /* Curry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F84290281B57EFAE008F57B4 /* Curry.framework */; }; F842902B1B57EFB5008F57B4 /* Curry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F842902A1B57EFB5008F57B4 /* Curry.framework */; }; F84318A81B9A2D7A00165216 /* DecodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84318A71B9A2D7A00165216 /* DecodeError.swift */; }; F84318A91B9A2D7A00165216 /* DecodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84318A71B9A2D7A00165216 /* DecodeError.swift */; }; F84318AA1B9A2D7A00165216 /* DecodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84318A71B9A2D7A00165216 /* DecodeError.swift */; }; F862E0AB1A519D470093B028 /* TypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA08313019D5EEAF003B90D7 /* TypeTests.swift */; }; F862E0AC1A519D520093B028 /* post_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = EA08313219D5EEF2003B90D7 /* post_comments.json */; }; F862E0AD1A519D560093B028 /* types.json in Resources */ = {isa = PBXBuildFile; fileRef = EA08313419D5EFC0003B90D7 /* types.json */; }; F862E0AE1A519D5C0093B028 /* types_fail_embedded.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4EAF7219DD96330036AE0D /* types_fail_embedded.json */; }; F874B7EA1A66BF52004CCE5E /* root_array.json in Resources */ = {isa = PBXBuildFile; fileRef = F874B7E91A66BF52004CCE5E /* root_array.json */; }; F874B7EB1A66C221004CCE5E /* root_array.json in Resources */ = {isa = PBXBuildFile; fileRef = F874B7E91A66BF52004CCE5E /* root_array.json */; }; F876F1D71B56FBB300B38589 /* Runes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F876F1D61B56FBB300B38589 /* Runes.swift */; }; F876F1D81B56FBB300B38589 /* Runes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F876F1D61B56FBB300B38589 /* Runes.swift */; }; F87897EF1A927864009316A5 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD9FACF19D0EAB50031E006 /* Argo.framework */; }; F87EB6A21ABC5F1300E3B0AB /* curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6991ABC5F1300E3B0AB /* curry.swift */; }; F87EB6A31ABC5F1300E3B0AB /* curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6991ABC5F1300E3B0AB /* curry.swift */; }; F87EB6A41ABC5F1300E3B0AB /* decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69A1ABC5F1300E3B0AB /* decode.swift */; }; F87EB6A51ABC5F1300E3B0AB /* decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69A1ABC5F1300E3B0AB /* decode.swift */; }; F87EB6A61ABC5F1300E3B0AB /* flatReduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69B1ABC5F1300E3B0AB /* flatReduce.swift */; }; F87EB6A71ABC5F1300E3B0AB /* flatReduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69B1ABC5F1300E3B0AB /* flatReduce.swift */; }; F87EB6A81ABC5F1300E3B0AB /* sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69C1ABC5F1300E3B0AB /* sequence.swift */; }; F87EB6A91ABC5F1300E3B0AB /* sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69C1ABC5F1300E3B0AB /* sequence.swift */; }; F87EB6AA1ABC5F1300E3B0AB /* Decoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69E1ABC5F1300E3B0AB /* Decoded.swift */; }; F87EB6AB1ABC5F1300E3B0AB /* Decoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69E1ABC5F1300E3B0AB /* Decoded.swift */; }; F87EB6AC1ABC5F1300E3B0AB /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69F1ABC5F1300E3B0AB /* JSON.swift */; }; F87EB6AD1ABC5F1300E3B0AB /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB69F1ABC5F1300E3B0AB /* JSON.swift */; }; F87EB6AE1ABC5F1300E3B0AB /* Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A01ABC5F1300E3B0AB /* Decodable.swift */; }; F87EB6AF1ABC5F1300E3B0AB /* Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A01ABC5F1300E3B0AB /* Decodable.swift */; }; F87EB6B01ABC5F1300E3B0AB /* StandardTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A11ABC5F1300E3B0AB /* StandardTypes.swift */; }; F87EB6B11ABC5F1300E3B0AB /* StandardTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87EB6A11ABC5F1300E3B0AB /* StandardTypes.swift */; }; F893355F1A4CE83000B88685 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F89335541A4CE83000B88685 /* Argo.framework */; }; F893356E1A4CE8FC00B88685 /* Argo.h in Headers */ = {isa = PBXBuildFile; fileRef = F893356D1A4CE8FC00B88685 /* Argo.h */; settings = {ATTRIBUTES = (Public, ); }; }; F893356F1A4CE8FC00B88685 /* Argo.h in Headers */ = {isa = PBXBuildFile; fileRef = F893356D1A4CE8FC00B88685 /* Argo.h */; settings = {ATTRIBUTES = (Public, ); }; }; F89335761A4CE93600B88685 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAF519D0F7900031E006 /* Decode.swift */; }; F8C2561A1C3C855B00B70968 /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82D15F21C3C82730079FFB5 /* NSNumber.swift */; }; F8C2561B1C3C855C00B70968 /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82D15F21C3C82730079FFB5 /* NSNumber.swift */; }; F8C2561C1C3C855C00B70968 /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82D15F21C3C82730079FFB5 /* NSNumber.swift */; }; F8C5927E1CB726C7007C5ABC /* booleans.json in Resources */ = {isa = PBXBuildFile; fileRef = F8C5927D1CB726C7007C5ABC /* booleans.json */; }; F8C5927F1CB726CA007C5ABC /* booleans.json in Resources */ = {isa = PBXBuildFile; fileRef = F8C5927D1CB726C7007C5ABC /* booleans.json */; }; F8C592801CB726CB007C5ABC /* booleans.json in Resources */ = {isa = PBXBuildFile; fileRef = F8C5927D1CB726C7007C5ABC /* booleans.json */; }; F8C592821CB726FB007C5ABC /* Booleans.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C592811CB726FB007C5ABC /* Booleans.swift */; }; F8C592831CB726FE007C5ABC /* Booleans.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C592811CB726FB007C5ABC /* Booleans.swift */; }; F8C592841CB726FF007C5ABC /* Booleans.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C592811CB726FB007C5ABC /* Booleans.swift */; }; F8CBE6671A64521000316FBC /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CBE6661A64521000316FBC /* Dictionary.swift */; }; F8CBE6681A64526300316FBC /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CBE6661A64521000316FBC /* Dictionary.swift */; }; F8E33FA51A51E0C20025A6E5 /* post_bad_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = F8E33FA41A51E0C20025A6E5 /* post_bad_comments.json */; }; F8EF432F1BBC728A001886BA /* catDecoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8EF432E1BBC728A001886BA /* catDecoded.swift */; }; F8EF43301BBC729F001886BA /* catDecoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8EF432E1BBC728A001886BA /* catDecoded.swift */; }; F8EF43311BBC729F001886BA /* catDecoded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8EF432E1BBC728A001886BA /* catDecoded.swift */; }; F8EF756A1A4CEC6100BDCC2D /* OptionalPropertyDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0D19D215570031E006 /* OptionalPropertyDecodingTests.swift */; }; F8EF756B1A4CEC6400BDCC2D /* EmbeddedJSONDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB1119D30E660031E006 /* EmbeddedJSONDecodingTests.swift */; }; F8EF756C1A4CEC7100BDCC2D /* JSONFileReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0F19D21AF50031E006 /* JSONFileReader.swift */; }; F8EF756D1A4CEC7100BDCC2D /* user_with_email.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0419D2143A0031E006 /* user_with_email.json */; }; F8EF756E1A4CEC7100BDCC2D /* user_without_email.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0819D214AA0031E006 /* user_without_email.json */; }; F8EF756F1A4CEC7100BDCC2D /* TemplateIcon2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB0919D214AA0031E006 /* TemplateIcon2x.png */; }; F8EF75701A4CEC7100BDCC2D /* comment.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB1319D30ED00031E006 /* comment.json */; }; F8EF75711A4CEC7100BDCC2D /* post_no_comments.json in Resources */ = {isa = PBXBuildFile; fileRef = EAD9FB1519D30F8D0031E006 /* post_no_comments.json */; }; F8EF75721A4CEC7800BDCC2D /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAFD19D2113C0031E006 /* User.swift */; }; F8EF75731A4CEC7800BDCC2D /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FAFF19D211630031E006 /* Comment.swift */; }; F8EF75741A4CEC7800BDCC2D /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB0119D211C10031E006 /* Post.swift */; }; F8EF75751A4CEC7800BDCC2D /* TestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD9FB1719D49A3E0031E006 /* TestModel.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 809754CC1BADF34200C409E6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = EAD9FAC619D0EAB50031E006 /* Project object */; proxyType = 1; remoteGlobalIDString = 809754C01BADF34100C409E6; remoteInfo = "Argo-tvOS"; }; EA395DC01A51FF5200EB607E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = EAD9FAC619D0EAB50031E006 /* Project object */; proxyType = 1; remoteGlobalIDString = EAD9FACE19D0EAB50031E006; remoteInfo = "Argo-iOS"; }; F89335601A4CE83000B88685 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = EAD9FAC619D0EAB50031E006 /* Project object */; proxyType = 1; remoteGlobalIDString = F89335531A4CE83000B88685; remoteInfo = "Argo-Mac"; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ F87D9D8C1A92676900C8AF1D /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F87D9D8E1A92677500C8AF1D /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F8C05D481A649A14004A8D0F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F8C05D4B1A649A21004A8D0F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 4D5F6DD81B3832C200D79B25 /* user_with_nested_name.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = user_with_nested_name.json; sourceTree = ""; }; 809586041BB84CE7004F9319 /* Curry.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Curry.framework; path = "Carthage/Checkouts/Curry/build/Debug-appletvos/Curry.framework"; sourceTree = ""; }; 809754C11BADF34100C409E6 /* Argo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Argo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 809754CA1BADF34200C409E6 /* Argo-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Argo-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; BF92789C1B9365900038A7E1 /* RawRepresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RawRepresentable.swift; path = Argo/Extensions/RawRepresentable.swift; sourceTree = SOURCE_ROOT; }; D0592EB61B77DD7800EFEF39 /* Argo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Argo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EA04D5901BBF1F40001DE23B /* Monad.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Monad.swift; sourceTree = ""; }; EA04D5941BBF1F80001DE23B /* Functor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functor.swift; sourceTree = ""; }; EA04D5981BBF1FA4001DE23B /* Applicative.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Applicative.swift; sourceTree = ""; }; EA04D59C1BBF1FB9001DE23B /* Alternative.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Alternative.swift; sourceTree = ""; }; EA04D5A01BBF2021001DE23B /* FailureCoalescing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureCoalescing.swift; sourceTree = ""; }; EA04D5A41BBF2047001DE23B /* Argo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Argo.swift; sourceTree = ""; }; EA08313019D5EEAF003B90D7 /* TypeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeTests.swift; sourceTree = ""; }; EA08313219D5EEF2003B90D7 /* post_comments.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = post_comments.json; sourceTree = ""; }; EA08313419D5EFC0003B90D7 /* types.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = types.json; sourceTree = ""; }; EA1200CA1BAB5CBA006DDBD8 /* RawRepresentableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RawRepresentableTests.swift; sourceTree = ""; }; EA395DC31A52F8EB00EB607E /* array_root.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = array_root.json; sourceTree = ""; }; EA395DC61A52F93B00EB607E /* ExampleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleTests.swift; sourceTree = ""; }; EA395DC91A52FC1400EB607E /* root_object.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = root_object.json; sourceTree = ""; }; EA47BB521AFC5B76002D2CCD /* DecodedTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecodedTests.swift; sourceTree = ""; }; EA47BB551AFC5DAC002D2CCD /* user_with_bad_type.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = user_with_bad_type.json; sourceTree = ""; }; EA47BB581AFC5E65002D2CCD /* user_without_key.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = user_without_key.json; sourceTree = ""; }; EA4EAF7219DD96330036AE0D /* types_fail_embedded.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = types_fail_embedded.json; sourceTree = ""; }; EA6DD69B1AB383FB00CA3A5B /* PerformanceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PerformanceTests.swift; sourceTree = ""; }; EA6DD69E1AB384C700CA3A5B /* big_data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = big_data.json; sourceTree = ""; }; EABDF6891A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftDictionaryDecodingTests.swift; sourceTree = ""; }; EABDF68D1A9CD4EA00B6CC83 /* PListFileReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PListFileReader.swift; sourceTree = ""; }; EABDF68E1A9CD4EA00B6CC83 /* types.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = types.plist; sourceTree = ""; }; EABDF6931A9CD4FC00B6CC83 /* PListDecodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PListDecodingTests.swift; sourceTree = ""; }; EAD9FACF19D0EAB50031E006 /* Argo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Argo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EAD9FAD319D0EAB50031E006 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EAD9FADA19D0EAB60031E006 /* ArgoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArgoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; EAD9FADD19D0EAB60031E006 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EAD9FAF519D0F7900031E006 /* Decode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decode.swift; sourceTree = ""; }; EAD9FAFD19D2113C0031E006 /* User.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; EAD9FAFF19D211630031E006 /* Comment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; }; EAD9FB0119D211C10031E006 /* Post.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; EAD9FB0419D2143A0031E006 /* user_with_email.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = user_with_email.json; sourceTree = ""; }; EAD9FB0819D214AA0031E006 /* user_without_email.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = user_without_email.json; sourceTree = ""; }; EAD9FB0919D214AA0031E006 /* TemplateIcon2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TemplateIcon2x.png; sourceTree = ""; }; EAD9FB0D19D215570031E006 /* OptionalPropertyDecodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OptionalPropertyDecodingTests.swift; sourceTree = ""; }; EAD9FB0F19D21AF50031E006 /* JSONFileReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONFileReader.swift; sourceTree = ""; }; EAD9FB1119D30E660031E006 /* EmbeddedJSONDecodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmbeddedJSONDecodingTests.swift; sourceTree = ""; }; EAD9FB1319D30ED00031E006 /* comment.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = comment.json; sourceTree = ""; }; EAD9FB1519D30F8D0031E006 /* post_no_comments.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = post_no_comments.json; sourceTree = ""; }; EAD9FB1719D49A3E0031E006 /* TestModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestModel.swift; path = ../../../Argo/ArgoTests/Models/TestModel.swift; sourceTree = ""; }; EADADCB11A5DB6F600B180EC /* EquatableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EquatableTests.swift; sourceTree = ""; }; F802D4C21A5EE061005E236C /* NSURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURL.swift; sourceTree = ""; }; F802D4C51A5EE2D5005E236C /* url.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = url.json; sourceTree = ""; }; F82D15F21C3C82730079FFB5 /* NSNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSNumber.swift; sourceTree = ""; }; F84290281B57EFAE008F57B4 /* Curry.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Curry.framework; path = "Carthage/Checkouts/Curry/build/Debug-iphoneos/Curry.framework"; sourceTree = ""; }; F842902A1B57EFB5008F57B4 /* Curry.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Curry.framework; path = Carthage/Checkouts/Curry/build/Debug/Curry.framework; sourceTree = ""; }; F84318A71B9A2D7A00165216 /* DecodeError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecodeError.swift; sourceTree = ""; }; F874B7E91A66BF52004CCE5E /* root_array.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = root_array.json; sourceTree = ""; }; F876F1D61B56FBB300B38589 /* Runes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Runes.swift; path = Carthage/Checkouts/Runes/Source/Runes.swift; sourceTree = SOURCE_ROOT; }; F87EB6991ABC5F1300E3B0AB /* curry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = curry.swift; sourceTree = ""; }; F87EB69A1ABC5F1300E3B0AB /* decode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = decode.swift; sourceTree = ""; }; F87EB69B1ABC5F1300E3B0AB /* flatReduce.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = flatReduce.swift; sourceTree = ""; }; F87EB69C1ABC5F1300E3B0AB /* sequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = sequence.swift; sourceTree = ""; }; F87EB69E1ABC5F1300E3B0AB /* Decoded.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Decoded.swift; path = Argo/Types/Decoded/Decoded.swift; sourceTree = SOURCE_ROOT; }; F87EB69F1ABC5F1300E3B0AB /* JSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSON.swift; sourceTree = ""; }; F87EB6A01ABC5F1300E3B0AB /* Decodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decodable.swift; sourceTree = ""; }; F87EB6A11ABC5F1300E3B0AB /* StandardTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StandardTypes.swift; sourceTree = ""; }; F89335541A4CE83000B88685 /* Argo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Argo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F893355E1A4CE83000B88685 /* Argo-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Argo-MacTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; F893356D1A4CE8FC00B88685 /* Argo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Argo.h; sourceTree = ""; }; F8C5927D1CB726C7007C5ABC /* booleans.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = booleans.json; sourceTree = ""; }; F8C592811CB726FB007C5ABC /* Booleans.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Booleans.swift; sourceTree = ""; }; F8CBE6661A64521000316FBC /* Dictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Dictionary.swift; sourceTree = ""; }; F8E33FA41A51E0C20025A6E5 /* post_bad_comments.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = post_bad_comments.json; sourceTree = ""; }; F8EF432E1BBC728A001886BA /* catDecoded.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = catDecoded.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 809754BD1BADF34100C409E6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 809754C71BADF34200C409E6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 809586051BB84CEE004F9319 /* Curry.framework in Frameworks */, 809754CB1BADF34200C409E6 /* Argo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D0592EB21B77DD7800EFEF39 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FACB19D0EAB50031E006 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FAD719D0EAB60031E006 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F84290291B57EFAE008F57B4 /* Curry.framework in Frameworks */, F87897EF1A927864009316A5 /* Argo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; F89335501A4CE83000B88685 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F893355B1A4CE83000B88685 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F842902B1B57EFB5008F57B4 /* Curry.framework in Frameworks */, F893355F1A4CE83000B88685 /* Argo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ EA04D5A81BBF43C7001DE23B /* Decoded */ = { isa = PBXGroup; children = ( F87EB69E1ABC5F1300E3B0AB /* Decoded.swift */, EA04D5901BBF1F40001DE23B /* Monad.swift */, EA04D5941BBF1F80001DE23B /* Functor.swift */, EA04D5981BBF1FA4001DE23B /* Applicative.swift */, EA04D59C1BBF1FB9001DE23B /* Alternative.swift */, EA04D5A01BBF2021001DE23B /* FailureCoalescing.swift */, ); path = Decoded; sourceTree = ""; }; EABDF68C1A9CD4EA00B6CC83 /* plists */ = { isa = PBXGroup; children = ( EABDF68D1A9CD4EA00B6CC83 /* PListFileReader.swift */, EABDF68E1A9CD4EA00B6CC83 /* types.plist */, ); path = plists; sourceTree = ""; }; EAD9FAC519D0EAB50031E006 = { isa = PBXGroup; children = ( EAD9FAD119D0EAB50031E006 /* Argo */, EAD9FADB19D0EAB60031E006 /* ArgoTests */, EAD9FAD019D0EAB50031E006 /* Products */, F87AD8BB1AF7DFD200D6E3FF /* Frameworks */, ); indentWidth = 2; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; EAD9FAD019D0EAB50031E006 /* Products */ = { isa = PBXGroup; children = ( EAD9FACF19D0EAB50031E006 /* Argo.framework */, EAD9FADA19D0EAB60031E006 /* ArgoTests.xctest */, F89335541A4CE83000B88685 /* Argo.framework */, F893355E1A4CE83000B88685 /* Argo-MacTests.xctest */, D0592EB61B77DD7800EFEF39 /* Argo.framework */, 809754C11BADF34100C409E6 /* Argo.framework */, 809754CA1BADF34200C409E6 /* Argo-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; EAD9FAD119D0EAB50031E006 /* Argo */ = { isa = PBXGroup; children = ( F87EB69D1ABC5F1300E3B0AB /* Types */, EAD9FAE919D0F6480031E006 /* Operators */, F87EB6981ABC5F1300E3B0AB /* Functions */, F8CBE6651A6451F800316FBC /* Extensions */, EAD9FAE819D0F5B50031E006 /* Resources */, ); name = Argo; path = ../Argo/Argo; sourceTree = ""; }; EAD9FADB19D0EAB60031E006 /* ArgoTests */ = { isa = PBXGroup; children = ( EAD9FB0C19D215020031E006 /* Tests */, EAD9FB0319D213F30031E006 /* JSON */, EABDF68C1A9CD4EA00B6CC83 /* plists */, EAD9FAFC19D2110D0031E006 /* Models */, EAD9FADC19D0EAB60031E006 /* Supporting Files */, ); name = ArgoTests; path = ../Argo/ArgoTests; sourceTree = ""; }; EAD9FADC19D0EAB60031E006 /* Supporting Files */ = { isa = PBXGroup; children = ( EAD9FADD19D0EAB60031E006 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; EAD9FAE819D0F5B50031E006 /* Resources */ = { isa = PBXGroup; children = ( EAD9FAD319D0EAB50031E006 /* Info.plist */, F893356D1A4CE8FC00B88685 /* Argo.h */, ); path = Resources; sourceTree = ""; }; EAD9FAE919D0F6480031E006 /* Operators */ = { isa = PBXGroup; children = ( F876F1D61B56FBB300B38589 /* Runes.swift */, EA04D5A41BBF2047001DE23B /* Argo.swift */, EAD9FAF519D0F7900031E006 /* Decode.swift */, ); path = Operators; sourceTree = ""; }; EAD9FAFC19D2110D0031E006 /* Models */ = { isa = PBXGroup; children = ( F8C592811CB726FB007C5ABC /* Booleans.swift */, EAD9FAFD19D2113C0031E006 /* User.swift */, EAD9FAFF19D211630031E006 /* Comment.swift */, EAD9FB0119D211C10031E006 /* Post.swift */, EAD9FB1719D49A3E0031E006 /* TestModel.swift */, F802D4C21A5EE061005E236C /* NSURL.swift */, ); path = Models; sourceTree = ""; }; EAD9FB0319D213F30031E006 /* JSON */ = { isa = PBXGroup; children = ( F8C5927D1CB726C7007C5ABC /* booleans.json */, EAD9FB0F19D21AF50031E006 /* JSONFileReader.swift */, EAD9FB0419D2143A0031E006 /* user_with_email.json */, EAD9FB0819D214AA0031E006 /* user_without_email.json */, 4D5F6DD81B3832C200D79B25 /* user_with_nested_name.json */, F802D4C51A5EE2D5005E236C /* url.json */, F874B7E91A66BF52004CCE5E /* root_array.json */, EAD9FB0919D214AA0031E006 /* TemplateIcon2x.png */, EAD9FB1319D30ED00031E006 /* comment.json */, EAD9FB1519D30F8D0031E006 /* post_no_comments.json */, EA08313219D5EEF2003B90D7 /* post_comments.json */, F8E33FA41A51E0C20025A6E5 /* post_bad_comments.json */, EA08313419D5EFC0003B90D7 /* types.json */, EA4EAF7219DD96330036AE0D /* types_fail_embedded.json */, EA395DC31A52F8EB00EB607E /* array_root.json */, EA395DC91A52FC1400EB607E /* root_object.json */, EA6DD69E1AB384C700CA3A5B /* big_data.json */, EA47BB551AFC5DAC002D2CCD /* user_with_bad_type.json */, EA47BB581AFC5E65002D2CCD /* user_without_key.json */, ); path = JSON; sourceTree = ""; }; EAD9FB0C19D215020031E006 /* Tests */ = { isa = PBXGroup; children = ( EABDF6931A9CD4FC00B6CC83 /* PListDecodingTests.swift */, EABDF6891A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift */, EAD9FB0D19D215570031E006 /* OptionalPropertyDecodingTests.swift */, EAD9FB1119D30E660031E006 /* EmbeddedJSONDecodingTests.swift */, EA08313019D5EEAF003B90D7 /* TypeTests.swift */, EA395DC61A52F93B00EB607E /* ExampleTests.swift */, EADADCB11A5DB6F600B180EC /* EquatableTests.swift */, EA6DD69B1AB383FB00CA3A5B /* PerformanceTests.swift */, EA47BB521AFC5B76002D2CCD /* DecodedTests.swift */, EA1200CA1BAB5CBA006DDBD8 /* RawRepresentableTests.swift */, ); path = Tests; sourceTree = ""; }; F87AD8BB1AF7DFD200D6E3FF /* Frameworks */ = { isa = PBXGroup; children = ( F842902A1B57EFB5008F57B4 /* Curry.framework */, F84290281B57EFAE008F57B4 /* Curry.framework */, 809586041BB84CE7004F9319 /* Curry.framework */, F87AD8BD1AF7E04B00D6E3FF /* Mac */, F87AD8BC1AF7E04500D6E3FF /* iOS */, ); name = Frameworks; sourceTree = ""; }; F87AD8BC1AF7E04500D6E3FF /* iOS */ = { isa = PBXGroup; children = ( ); name = iOS; sourceTree = ""; }; F87AD8BD1AF7E04B00D6E3FF /* Mac */ = { isa = PBXGroup; children = ( ); name = Mac; sourceTree = ""; }; F87EB6981ABC5F1300E3B0AB /* Functions */ = { isa = PBXGroup; children = ( F8EF432E1BBC728A001886BA /* catDecoded.swift */, F87EB6991ABC5F1300E3B0AB /* curry.swift */, F87EB69A1ABC5F1300E3B0AB /* decode.swift */, F87EB69B1ABC5F1300E3B0AB /* flatReduce.swift */, F87EB69C1ABC5F1300E3B0AB /* sequence.swift */, ); path = Functions; sourceTree = ""; }; F87EB69D1ABC5F1300E3B0AB /* Types */ = { isa = PBXGroup; children = ( EA04D5A81BBF43C7001DE23B /* Decoded */, F87EB69F1ABC5F1300E3B0AB /* JSON.swift */, F87EB6A01ABC5F1300E3B0AB /* Decodable.swift */, F87EB6A11ABC5F1300E3B0AB /* StandardTypes.swift */, F84318A71B9A2D7A00165216 /* DecodeError.swift */, ); path = Types; sourceTree = ""; }; F8CBE6651A6451F800316FBC /* Extensions */ = { isa = PBXGroup; children = ( F82D15F21C3C82730079FFB5 /* NSNumber.swift */, F8CBE6661A64521000316FBC /* Dictionary.swift */, BF92789C1B9365900038A7E1 /* RawRepresentable.swift */, ); path = Extensions; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 809754BE1BADF34100C409E6 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 809754E71BADF37200C409E6 /* Argo.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D0592EB31B77DD7800EFEF39 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FACC19D0EAB50031E006 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F893356E1A4CE8FC00B88685 /* Argo.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F89335511A4CE83000B88685 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F893356F1A4CE8FC00B88685 /* Argo.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 809754C01BADF34100C409E6 /* Argo-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 809754D61BADF34200C409E6 /* Build configuration list for PBXNativeTarget "Argo-tvOS" */; buildPhases = ( 809754BC1BADF34100C409E6 /* Sources */, 809754BD1BADF34100C409E6 /* Frameworks */, 809754BE1BADF34100C409E6 /* Headers */, 809754BF1BADF34100C409E6 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Argo-tvOS"; productName = "Argo-tvOS"; productReference = 809754C11BADF34100C409E6 /* Argo.framework */; productType = "com.apple.product-type.framework"; }; 809754C91BADF34200C409E6 /* Argo-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 809754D71BADF34200C409E6 /* Build configuration list for PBXNativeTarget "Argo-tvOSTests" */; buildPhases = ( 809754C61BADF34200C409E6 /* Sources */, 809754C71BADF34200C409E6 /* Frameworks */, 809754C81BADF34200C409E6 /* Resources */, ); buildRules = ( ); dependencies = ( 809754CD1BADF34200C409E6 /* PBXTargetDependency */, ); name = "Argo-tvOSTests"; productName = "Argo-tvOSTests"; productReference = 809754CA1BADF34200C409E6 /* Argo-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D0592EB51B77DD7800EFEF39 /* Argo-watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = D0592EBD1B77DD7800EFEF39 /* Build configuration list for PBXNativeTarget "Argo-watchOS" */; buildPhases = ( D0592EB11B77DD7800EFEF39 /* Sources */, D0592EB21B77DD7800EFEF39 /* Frameworks */, D0592EB31B77DD7800EFEF39 /* Headers */, D0592EB41B77DD7800EFEF39 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Argo-watchOS"; productName = "Argo-watchOS"; productReference = D0592EB61B77DD7800EFEF39 /* Argo.framework */; productType = "com.apple.product-type.framework"; }; EAD9FACE19D0EAB50031E006 /* Argo-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = EAD9FAE219D0EAB60031E006 /* Build configuration list for PBXNativeTarget "Argo-iOS" */; buildPhases = ( EAD9FACA19D0EAB50031E006 /* Sources */, EAD9FACB19D0EAB50031E006 /* Frameworks */, EAD9FACC19D0EAB50031E006 /* Headers */, EAD9FACD19D0EAB50031E006 /* Resources */, 2BF79DC6DAAA04A8DB0169BA /* Warn for TODO and FIXME comments */, F8C05D481A649A14004A8D0F /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = "Argo-iOS"; productName = argo; productReference = EAD9FACF19D0EAB50031E006 /* Argo.framework */; productType = "com.apple.product-type.framework"; }; EAD9FAD919D0EAB60031E006 /* ArgoTests */ = { isa = PBXNativeTarget; buildConfigurationList = EAD9FAE519D0EAB60031E006 /* Build configuration list for PBXNativeTarget "ArgoTests" */; buildPhases = ( EAD9FAD619D0EAB60031E006 /* Sources */, EAD9FAD719D0EAB60031E006 /* Frameworks */, EAD9FAD819D0EAB60031E006 /* Resources */, F87D9D8C1A92676900C8AF1D /* CopyFiles */, ); buildRules = ( ); dependencies = ( EA395DC11A51FF5200EB607E /* PBXTargetDependency */, ); name = ArgoTests; productName = argoTests; productReference = EAD9FADA19D0EAB60031E006 /* ArgoTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; F89335531A4CE83000B88685 /* Argo-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = F89335671A4CE83000B88685 /* Build configuration list for PBXNativeTarget "Argo-Mac" */; buildPhases = ( F893354F1A4CE83000B88685 /* Sources */, F89335501A4CE83000B88685 /* Frameworks */, F89335511A4CE83000B88685 /* Headers */, F89335521A4CE83000B88685 /* Resources */, F8C05D4B1A649A21004A8D0F /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = "Argo-Mac"; productName = "Argo-Mac"; productReference = F89335541A4CE83000B88685 /* Argo.framework */; productType = "com.apple.product-type.framework"; }; F893355D1A4CE83000B88685 /* Argo-MacTests */ = { isa = PBXNativeTarget; buildConfigurationList = F893356A1A4CE83000B88685 /* Build configuration list for PBXNativeTarget "Argo-MacTests" */; buildPhases = ( F893355A1A4CE83000B88685 /* Sources */, F893355B1A4CE83000B88685 /* Frameworks */, F893355C1A4CE83000B88685 /* Resources */, F87D9D8E1A92677500C8AF1D /* CopyFiles */, ); buildRules = ( ); dependencies = ( F89335611A4CE83000B88685 /* PBXTargetDependency */, ); name = "Argo-MacTests"; productName = "Argo-MacTests"; productReference = F893355E1A4CE83000B88685 /* Argo-MacTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ EAD9FAC619D0EAB50031E006 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0800; ORGANIZATIONNAME = thoughtbot; TargetAttributes = { 809754C01BADF34100C409E6 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 809754C91BADF34200C409E6 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; D0592EB51B77DD7800EFEF39 = { CreatedOnToolsVersion = 7.0; LastSwiftMigration = 0800; }; EAD9FACE19D0EAB50031E006 = { CreatedOnToolsVersion = 6.0.1; LastSwiftMigration = 0800; }; EAD9FAD919D0EAB60031E006 = { CreatedOnToolsVersion = 6.0.1; LastSwiftMigration = 0800; }; F89335531A4CE83000B88685 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; F893355D1A4CE83000B88685 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; }; }; buildConfigurationList = EAD9FAC919D0EAB50031E006 /* Build configuration list for PBXProject "Argo" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = EAD9FAC519D0EAB50031E006; productRefGroup = EAD9FAD019D0EAB50031E006 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( EAD9FACE19D0EAB50031E006 /* Argo-iOS */, EAD9FAD919D0EAB60031E006 /* ArgoTests */, F89335531A4CE83000B88685 /* Argo-Mac */, F893355D1A4CE83000B88685 /* Argo-MacTests */, D0592EB51B77DD7800EFEF39 /* Argo-watchOS */, 809754C01BADF34100C409E6 /* Argo-tvOS */, 809754C91BADF34200C409E6 /* Argo-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 809754BF1BADF34100C409E6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 809754C81BADF34200C409E6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 809755081BADF3ED00C409E6 /* user_with_bad_type.json in Resources */, 809754FA1BADF3ED00C409E6 /* user_without_email.json in Resources */, 809755031BADF3ED00C409E6 /* types.json in Resources */, F8C592801CB726CB007C5ABC /* booleans.json in Resources */, 809754FD1BADF3ED00C409E6 /* root_array.json in Resources */, 809754FE1BADF3ED00C409E6 /* TemplateIcon2x.png in Resources */, 809754FB1BADF3ED00C409E6 /* user_with_nested_name.json in Resources */, 809755071BADF3ED00C409E6 /* big_data.json in Resources */, 809755011BADF3ED00C409E6 /* post_comments.json in Resources */, 809755061BADF3ED00C409E6 /* root_object.json in Resources */, 809755021BADF3ED00C409E6 /* post_bad_comments.json in Resources */, 809755001BADF3ED00C409E6 /* post_no_comments.json in Resources */, 809754F91BADF3ED00C409E6 /* user_with_email.json in Resources */, 8097550A1BADF3F200C409E6 /* types.plist in Resources */, 809755041BADF3ED00C409E6 /* types_fail_embedded.json in Resources */, 809755051BADF3ED00C409E6 /* array_root.json in Resources */, 809754FC1BADF3ED00C409E6 /* url.json in Resources */, 809755091BADF3ED00C409E6 /* user_without_key.json in Resources */, 809754FF1BADF3ED00C409E6 /* comment.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; D0592EB41B77DD7800EFEF39 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FACD19D0EAB50031E006 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FAD819D0EAB60031E006 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( EA47BB561AFC5DAC002D2CCD /* user_with_bad_type.json in Resources */, EA08313519D5EFC0003B90D7 /* types.json in Resources */, EA4EAF7319DD96330036AE0D /* types_fail_embedded.json in Resources */, F8C5927E1CB726C7007C5ABC /* booleans.json in Resources */, EA395DCA1A52FC1400EB607E /* root_object.json in Resources */, F874B7EA1A66BF52004CCE5E /* root_array.json in Resources */, EAD9FB1619D30F8D0031E006 /* post_no_comments.json in Resources */, EA6DD69F1AB384C700CA3A5B /* big_data.json in Resources */, EA08313319D5EEF2003B90D7 /* post_comments.json in Resources */, 4D5F6DD91B3832C200D79B25 /* user_with_nested_name.json in Resources */, EABDF6911A9CD4EA00B6CC83 /* types.plist in Resources */, EAD9FB0A19D214AA0031E006 /* user_without_email.json in Resources */, EAD9FB0619D2143A0031E006 /* user_with_email.json in Resources */, EAD9FB0B19D214AA0031E006 /* TemplateIcon2x.png in Resources */, EA47BB591AFC5E65002D2CCD /* user_without_key.json in Resources */, EA395DC41A52F8EB00EB607E /* array_root.json in Resources */, F8E33FA51A51E0C20025A6E5 /* post_bad_comments.json in Resources */, EAD9FB1419D30ED00031E006 /* comment.json in Resources */, F802D4C61A5EE2D5005E236C /* url.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; F89335521A4CE83000B88685 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F893355C1A4CE83000B88685 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( EA47BB571AFC5DAC002D2CCD /* user_with_bad_type.json in Resources */, F862E0AD1A519D560093B028 /* types.json in Resources */, F862E0AE1A519D5C0093B028 /* types_fail_embedded.json in Resources */, F8C5927F1CB726CA007C5ABC /* booleans.json in Resources */, EA395DCB1A52FC1400EB607E /* root_object.json in Resources */, F874B7EB1A66C221004CCE5E /* root_array.json in Resources */, F8EF75711A4CEC7100BDCC2D /* post_no_comments.json in Resources */, EA6DD6A01AB384C700CA3A5B /* big_data.json in Resources */, F862E0AC1A519D520093B028 /* post_comments.json in Resources */, 4D5F6DDA1B3832C200D79B25 /* user_with_nested_name.json in Resources */, EABDF6921A9CD4EA00B6CC83 /* types.plist in Resources */, F8EF756E1A4CEC7100BDCC2D /* user_without_email.json in Resources */, F8EF756D1A4CEC7100BDCC2D /* user_with_email.json in Resources */, F8EF756F1A4CEC7100BDCC2D /* TemplateIcon2x.png in Resources */, EA47BB5A1AFC5E65002D2CCD /* user_without_key.json in Resources */, EA395DC51A52F8EE00EB607E /* array_root.json in Resources */, EA395DC21A5209C000EB607E /* post_bad_comments.json in Resources */, F8EF75701A4CEC7100BDCC2D /* comment.json in Resources */, F802D4C71A5EE2D5005E236C /* url.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 2BF79DC6DAAA04A8DB0169BA /* Warn for TODO and FIXME comments */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Warn for TODO and FIXME comments"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "KEYWORDS=\"TODO:|FIXME:|\\?\\?\\?:|\\!\\!\\!:\"\nFILE_EXTENSIONS=\"h|m|mm|c|cpp\"\nfind -E \"${SRCROOT}\" -ipath \"${SRCROOT}/pods\" -prune -o \\( -regex \".*\\.($FILE_EXTENSIONS)$\" \\) -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($KEYWORDS).*\\$\" | perl -p -e \"s/($KEYWORDS)/ warning: \\$1/\"\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 809754BC1BADF34100C409E6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EA9159F81BDE74E400D85292 /* Monad.swift in Sources */, 809754DF1BADF36D00C409E6 /* (null) in Sources */, EA9159F71BDE74C700D85292 /* catDecoded.swift in Sources */, EA9159FC1BDE74FC00D85292 /* FailureCoalescing.swift in Sources */, 809754E31BADF36D00C409E6 /* flatReduce.swift in Sources */, 809754DB1BADF36D00C409E6 /* StandardTypes.swift in Sources */, EA9159F91BDE74EB00D85292 /* Functor.swift in Sources */, 809754DA1BADF36D00C409E6 /* Decodable.swift in Sources */, 809754DE1BADF36D00C409E6 /* Decode.swift in Sources */, 809754D81BADF36D00C409E6 /* Decoded.swift in Sources */, 809754E41BADF36D00C409E6 /* sequence.swift in Sources */, 809754DD1BADF36D00C409E6 /* Runes.swift in Sources */, 809754E21BADF36D00C409E6 /* decode.swift in Sources */, 809754DC1BADF36D00C409E6 /* DecodeError.swift in Sources */, EA9159FA1BDE74F300D85292 /* Applicative.swift in Sources */, 809754E51BADF36D00C409E6 /* Dictionary.swift in Sources */, 809754E61BADF36D00C409E6 /* RawRepresentable.swift in Sources */, 809754D91BADF36D00C409E6 /* JSON.swift in Sources */, F8C2561C1C3C855C00B70968 /* NSNumber.swift in Sources */, EA9159F61BDE74BC00D85292 /* Argo.swift in Sources */, EA9159FB1BDE74F800D85292 /* Alternative.swift in Sources */, 809754E11BADF36D00C409E6 /* curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 809754C61BADF34200C409E6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 809754F01BADF3E400C409E6 /* DecodedTests.swift in Sources */, 809754F11BADF3E400C409E6 /* RawRepresentableTests.swift in Sources */, 809754F31BADF3E400C409E6 /* PListFileReader.swift in Sources */, 809754EB1BADF3E400C409E6 /* EmbeddedJSONDecodingTests.swift in Sources */, F8C592841CB726FF007C5ABC /* Booleans.swift in Sources */, 809754EA1BADF3E400C409E6 /* OptionalPropertyDecodingTests.swift in Sources */, 809754F81BADF3E400C409E6 /* NSURL.swift in Sources */, 809754F41BADF3E400C409E6 /* User.swift in Sources */, 809754EC1BADF3E400C409E6 /* TypeTests.swift in Sources */, 809754E81BADF3E400C409E6 /* PListDecodingTests.swift in Sources */, 809754E91BADF3E400C409E6 /* SwiftDictionaryDecodingTests.swift in Sources */, 809754F51BADF3E400C409E6 /* Comment.swift in Sources */, 809754F61BADF3E400C409E6 /* Post.swift in Sources */, 809754F21BADF3E400C409E6 /* JSONFileReader.swift in Sources */, 809754EE1BADF3E400C409E6 /* EquatableTests.swift in Sources */, 809754ED1BADF3E400C409E6 /* ExampleTests.swift in Sources */, 809754F71BADF3E400C409E6 /* TestModel.swift in Sources */, 809754EF1BADF3E400C409E6 /* PerformanceTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D0592EB11B77DD7800EFEF39 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D0592EC41B77DD9A00EFEF39 /* curry.swift in Sources */, EA04D59B1BBF1FA4001DE23B /* Applicative.swift in Sources */, D0592EC11B77DD8E00EFEF39 /* StandardTypes.swift in Sources */, EA04D59F1BBF1FB9001DE23B /* Alternative.swift in Sources */, D0592EC01B77DD8E00EFEF39 /* Decodable.swift in Sources */, D0592EC51B77DD9A00EFEF39 /* decode.swift in Sources */, F8C2561B1C3C855C00B70968 /* NSNumber.swift in Sources */, D0592EC81B77DD9A00EFEF39 /* Dictionary.swift in Sources */, EA04D5A31BBF2021001DE23B /* FailureCoalescing.swift in Sources */, D0592EBE1B77DD8E00EFEF39 /* Decoded.swift in Sources */, F84318AA1B9A2D7A00165216 /* DecodeError.swift in Sources */, D0592EBF1B77DD8E00EFEF39 /* JSON.swift in Sources */, D0592EC21B77DD9300EFEF39 /* Runes.swift in Sources */, F8EF43311BBC729F001886BA /* catDecoded.swift in Sources */, D0592EC31B77DD9300EFEF39 /* Decode.swift in Sources */, EA1200CE1BAB621C006DDBD8 /* RawRepresentable.swift in Sources */, EA04D5931BBF1F40001DE23B /* Monad.swift in Sources */, EA04D5971BBF1F80001DE23B /* Functor.swift in Sources */, D0592EC71B77DD9A00EFEF39 /* sequence.swift in Sources */, EA04D5A71BBF2047001DE23B /* Argo.swift in Sources */, D0592EC61B77DD9A00EFEF39 /* flatReduce.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FACA19D0EAB50031E006 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F87EB6AA1ABC5F1300E3B0AB /* Decoded.swift in Sources */, EA04D5991BBF1FA4001DE23B /* Applicative.swift in Sources */, BF92789D1B9365900038A7E1 /* RawRepresentable.swift in Sources */, EA04D59D1BBF1FB9001DE23B /* Alternative.swift in Sources */, F87EB6AE1ABC5F1300E3B0AB /* Decodable.swift in Sources */, F87EB6A41ABC5F1300E3B0AB /* decode.swift in Sources */, F82D15F31C3C82730079FFB5 /* NSNumber.swift in Sources */, F87EB6AC1ABC5F1300E3B0AB /* JSON.swift in Sources */, EA04D5A11BBF2021001DE23B /* FailureCoalescing.swift in Sources */, F87EB6A61ABC5F1300E3B0AB /* flatReduce.swift in Sources */, F87EB6A81ABC5F1300E3B0AB /* sequence.swift in Sources */, F84318A81B9A2D7A00165216 /* DecodeError.swift in Sources */, F876F1D71B56FBB300B38589 /* Runes.swift in Sources */, F8CBE6671A64521000316FBC /* Dictionary.swift in Sources */, EAD9FAF619D0F7900031E006 /* Decode.swift in Sources */, F87EB6B01ABC5F1300E3B0AB /* StandardTypes.swift in Sources */, EA04D5911BBF1F40001DE23B /* Monad.swift in Sources */, EA04D5951BBF1F80001DE23B /* Functor.swift in Sources */, F87EB6A21ABC5F1300E3B0AB /* curry.swift in Sources */, EA04D5A51BBF2047001DE23B /* Argo.swift in Sources */, F8EF432F1BBC728A001886BA /* catDecoded.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EAD9FAD619D0EAB60031E006 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EAD9FB1219D30E660031E006 /* EmbeddedJSONDecodingTests.swift in Sources */, F802D4C31A5EE061005E236C /* NSURL.swift in Sources */, EABDF68F1A9CD4EA00B6CC83 /* PListFileReader.swift in Sources */, EAD9FB1019D21AF50031E006 /* JSONFileReader.swift in Sources */, F8C592821CB726FB007C5ABC /* Booleans.swift in Sources */, EAD9FB0219D211C10031E006 /* Post.swift in Sources */, EABDF6941A9CD4FC00B6CC83 /* PListDecodingTests.swift in Sources */, EAD9FB1819D49A3E0031E006 /* TestModel.swift in Sources */, EAD9FB0E19D215570031E006 /* OptionalPropertyDecodingTests.swift in Sources */, EA47BB531AFC5B76002D2CCD /* DecodedTests.swift in Sources */, EAD9FAFE19D2113C0031E006 /* User.swift in Sources */, EAD9FB0019D211630031E006 /* Comment.swift in Sources */, EA6DD69C1AB383FB00CA3A5B /* PerformanceTests.swift in Sources */, EA1200CB1BAB5CBA006DDBD8 /* RawRepresentableTests.swift in Sources */, EABDF68A1A9CD46100B6CC83 /* SwiftDictionaryDecodingTests.swift in Sources */, EA08313119D5EEAF003B90D7 /* TypeTests.swift in Sources */, EA395DC71A52F93B00EB607E /* ExampleTests.swift in Sources */, EADADCB21A5DB6F600B180EC /* EquatableTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F893354F1A4CE83000B88685 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F87EB6AB1ABC5F1300E3B0AB /* Decoded.swift in Sources */, EA04D59A1BBF1FA4001DE23B /* Applicative.swift in Sources */, F87EB6AF1ABC5F1300E3B0AB /* Decodable.swift in Sources */, EA04D59E1BBF1FB9001DE23B /* Alternative.swift in Sources */, F87EB6A51ABC5F1300E3B0AB /* decode.swift in Sources */, F87EB6AD1ABC5F1300E3B0AB /* JSON.swift in Sources */, F8C2561A1C3C855B00B70968 /* NSNumber.swift in Sources */, F87EB6A71ABC5F1300E3B0AB /* flatReduce.swift in Sources */, EA04D5A21BBF2021001DE23B /* FailureCoalescing.swift in Sources */, F87EB6A91ABC5F1300E3B0AB /* sequence.swift in Sources */, F84318A91B9A2D7A00165216 /* DecodeError.swift in Sources */, F876F1D81B56FBB300B38589 /* Runes.swift in Sources */, F8CBE6681A64526300316FBC /* Dictionary.swift in Sources */, F8EF43301BBC729F001886BA /* catDecoded.swift in Sources */, F89335761A4CE93600B88685 /* Decode.swift in Sources */, EA1200CD1BAB621C006DDBD8 /* RawRepresentable.swift in Sources */, EA04D5921BBF1F40001DE23B /* Monad.swift in Sources */, EA04D5961BBF1F80001DE23B /* Functor.swift in Sources */, F87EB6B11ABC5F1300E3B0AB /* StandardTypes.swift in Sources */, EA04D5A61BBF2047001DE23B /* Argo.swift in Sources */, F87EB6A31ABC5F1300E3B0AB /* curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F893355A1A4CE83000B88685 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F8EF75731A4CEC7800BDCC2D /* Comment.swift in Sources */, F802D4C41A5EE172005E236C /* NSURL.swift in Sources */, EABDF6901A9CD4EA00B6CC83 /* PListFileReader.swift in Sources */, F8EF75721A4CEC7800BDCC2D /* User.swift in Sources */, F8C592831CB726FE007C5ABC /* Booleans.swift in Sources */, F8EF756B1A4CEC6400BDCC2D /* EmbeddedJSONDecodingTests.swift in Sources */, EABDF6951A9CD4FC00B6CC83 /* PListDecodingTests.swift in Sources */, F8EF75751A4CEC7800BDCC2D /* TestModel.swift in Sources */, F8EF75741A4CEC7800BDCC2D /* Post.swift in Sources */, EA47BB541AFC5B76002D2CCD /* DecodedTests.swift in Sources */, F8EF756A1A4CEC6100BDCC2D /* OptionalPropertyDecodingTests.swift in Sources */, F8EF756C1A4CEC7100BDCC2D /* JSONFileReader.swift in Sources */, EA6DD69D1AB383FB00CA3A5B /* PerformanceTests.swift in Sources */, EA1200CC1BAB5CBA006DDBD8 /* RawRepresentableTests.swift in Sources */, EABDF68B1A9CD46400B6CC83 /* SwiftDictionaryDecodingTests.swift in Sources */, F862E0AB1A519D470093B028 /* TypeTests.swift in Sources */, EA395DC81A52FA5300EB607E /* ExampleTests.swift in Sources */, EADADCB41A5DB7F800B180EC /* EquatableTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 809754CD1BADF34200C409E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 809754C01BADF34100C409E6 /* Argo-tvOS */; targetProxy = 809754CC1BADF34200C409E6 /* PBXContainerItemProxy */; }; EA395DC11A51FF5200EB607E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = EAD9FACE19D0EAB50031E006 /* Argo-iOS */; targetProxy = EA395DC01A51FF5200EB607E /* PBXContainerItemProxy */; }; F89335611A4CE83000B88685 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = F89335531A4CE83000B88685 /* Argo-Mac */; targetProxy = F89335601A4CE83000B88685 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 809754D21BADF34200C409E6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_NO_COMMON_BLOCKS = YES; GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; INFOPLIST_FILE = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.thoughtbot.Argo; PRODUCT_NAME = Argo; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 809754D31BADF34200C409E6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = 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"; GCC_NO_COMMON_BLOCKS = YES; GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; INFOPLIST_FILE = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.thoughtbot.Argo; PRODUCT_NAME = Argo; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 809754D41BADF34200C409E6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; INFOPLIST_FILE = ArgoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 809754D51BADF34200C409E6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; INFOPLIST_FILE = ArgoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; D0592EBB1B77DD7800EFEF39 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = marker; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=watchsimulator*]" = ""; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; INFOPLIST_FILE = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME)"; PRODUCT_NAME = Argo; SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; D0592EBC1B77DD7800EFEF39 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = bitcode; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=watchsimulator*]" = ""; 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"; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; INFOPLIST_FILE = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME)"; PRODUCT_NAME = Argo; SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; EAD9FAE019D0EAB60031E006 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = 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_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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_DEPRECATED_FUNCTIONS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = YES; GCC_WARN_SIGN_COMPARE = YES; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; EAD9FAE119D0EAB60031E006 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = 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_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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_DEPRECATED_FUNCTIONS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = YES; GCC_WARN_SIGN_COMPARE = YES; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; EAD9FAE319D0EAB60031E006 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = marker; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME)"; PRODUCT_NAME = Argo; SKIP_INSTALL = YES; }; name = Debug; }; EAD9FAE419D0EAB60031E006 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME)"; PRODUCT_NAME = Argo; SKIP_INSTALL = YES; }; name = Release; }; EAD9FAE619D0EAB60031E006 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = ArgoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = ArgoTests; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; EAD9FAE719D0EAB60031E006 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; INFOPLIST_FILE = ArgoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = ArgoTests; }; name = Release; }; F89335681A4CE83000B88685 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = marker; 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 = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME)"; PRODUCT_NAME = Argo; SDKROOT = macosx; SKIP_INSTALL = YES; }; name = Debug; }; F89335691A4CE83000B88685 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = bitcode; COMBINE_HIDPI_IMAGES = YES; 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 = "$(SRCROOT)/Argo/Resources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME)"; PRODUCT_NAME = Argo; SDKROOT = macosx; SKIP_INSTALL = YES; }; name = Release; }; F893356B1A4CE83000B88685 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = ArgoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Debug; }; F893356C1A4CE83000B88685 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = ArgoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 809754D61BADF34200C409E6 /* Build configuration list for PBXNativeTarget "Argo-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 809754D21BADF34200C409E6 /* Debug */, 809754D31BADF34200C409E6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 809754D71BADF34200C409E6 /* Build configuration list for PBXNativeTarget "Argo-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 809754D41BADF34200C409E6 /* Debug */, 809754D51BADF34200C409E6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D0592EBD1B77DD7800EFEF39 /* Build configuration list for PBXNativeTarget "Argo-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D0592EBB1B77DD7800EFEF39 /* Debug */, D0592EBC1B77DD7800EFEF39 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EAD9FAC919D0EAB50031E006 /* Build configuration list for PBXProject "Argo" */ = { isa = XCConfigurationList; buildConfigurations = ( EAD9FAE019D0EAB60031E006 /* Debug */, EAD9FAE119D0EAB60031E006 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EAD9FAE219D0EAB60031E006 /* Build configuration list for PBXNativeTarget "Argo-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( EAD9FAE319D0EAB60031E006 /* Debug */, EAD9FAE419D0EAB60031E006 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EAD9FAE519D0EAB60031E006 /* Build configuration list for PBXNativeTarget "ArgoTests" */ = { isa = XCConfigurationList; buildConfigurations = ( EAD9FAE619D0EAB60031E006 /* Debug */, EAD9FAE719D0EAB60031E006 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F89335671A4CE83000B88685 /* Build configuration list for PBXNativeTarget "Argo-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( F89335681A4CE83000B88685 /* Debug */, F89335691A4CE83000B88685 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F893356A1A4CE83000B88685 /* Build configuration list for PBXNativeTarget "Argo-MacTests" */ = { isa = XCConfigurationList; buildConfigurations = ( F893356B1A4CE83000B88685 /* Debug */, F893356C1A4CE83000B88685 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = EAD9FAC619D0EAB50031E006 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcodeproj/xcshareddata/xcschemes/Argo-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcodeproj/xcshareddata/xcschemes/Argo-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcodeproj/xcshareddata/xcschemes/Argo-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcodeproj/xcshareddata/xcschemes/Argo-watchOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Argo.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/JSONFileReader.swift ================================================ import Foundation func JSONFromFile(file: String) -> AnyObject? { return NSBundle(forClass: JSONFileReader.self).pathForResource(file, ofType: "json") .flatMap { NSData(contentsOfFile: $0) } .flatMap(JSONObjectWithData) } private func JSONObjectWithData(data: NSData) -> AnyObject? { return try? NSJSONSerialization.JSONObjectWithData(data, options: []) } private class JSONFileReader { } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/array_root.json ================================================ [ "foo", "bar", "baz" ] ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/big_data.json ================================================ [{ "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }, { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } }] ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/booleans.json ================================================ { "realBool": true, "numberBool": 1 } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/comment.json ================================================ { "id": 6, "text": "Cool story bro.", "author": { "id": 1, "name": "Cool User" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/post_bad_comments.json ================================================ { "id": 3, "text": "A Cool story.", "author": { "id": 1, "name": "Cool User" }, "comments": [ { "id": 6, "text": "Cool story bro.", "author": { "id": 1, "name": "Cool User" } }, { "id": 6, "author": { "id": 1, "name": "Cool User" } } ] } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/post_comments.json ================================================ { "id": 3, "text": "A Cool story.", "author": { "id": 1, "name": "Cool User" }, "comments": [ { "id": 6, "text": "Cool story bro.", "author": { "id": 1, "name": "Cool User" } }, { "id": 6, "text": "Cool story bro.", "author": { "id": 1, "name": "Cool User" } } ] } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/post_no_comments.json ================================================ { "id": 3, "text": "A Cool story.", "author": { "id": 1, "name": "Cool User" }, "comments": [] } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/root_array.json ================================================ [ { "title": "Foo", "age": 21 }, { "title": "Bar", "age": 32 } ] ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/root_object.json ================================================ { "user": { "id": 1, "name": "Cool User", "email": "u.cool@example.com" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/types.json ================================================ { "numerics": { "int": 5, "int64": 9007199254740992, "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 9223372036854775807, "uint64_string": "18446744073709551614" }, "bool": false, "string_array": [ "hello", "world" ], "string_array_opt": null, "embedded": { "string_array": [ "hello", "world" ], "string_array_opt": [] }, "user_opt": { "id": 6, "name": "Cooler User" }, "dict": { "foo": "bar" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/types_fail_embedded.json ================================================ { "int": 5, "double": 3.4, "bool": false, "int_opt": 4, "string_array": [ "hello", "world" ], "user_opt": { "id": 6, "fail": "Cooler User" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/url.json ================================================ { "url": "http://example.com", } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/user_with_bad_type.json ================================================ { "id": "1", "name": "Cool User", "email": "u.cool@example.com" } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/user_with_email.json ================================================ { "id": 1, "name": "Cool User", "email": "u.cool@example.com" } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/user_with_nested_name.json ================================================ { "id": 1, "userinfo": { "name": "Very Cool User" }, "email": "u.cool@example.com" } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/user_without_email.json ================================================ { "id": 1, "name": "Cool User" } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/JSON/user_without_key.json ================================================ { "name": "Cool User", "email": "u.cool@example.com" } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Models/Booleans.swift ================================================ import Argo import Curry struct Booleans: Decodable { let bool: Bool let number: Bool static func decode(j: JSON) -> Decoded { return curry(Booleans.init) <^> j <| "realBool" <*> j <| "numberBool" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Models/Comment.swift ================================================ import Argo import Curry struct Comment { let id: Int let text: String let authorName: String } extension Comment: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "id" <*> j <| "text" <*> j <| ["author", "name"] } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Models/NSURL.swift ================================================ import Argo import Foundation extension NSURL: Decodable { public typealias DecodedType = NSURL public class func decode(j: JSON) -> Decoded { switch j { case .String(let urlString): return NSURL(string: urlString).map(pure) ?? .typeMismatch("URL", actual: j) default: return .typeMismatch("URL", actual: j) } } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Models/Post.swift ================================================ import Argo import Curry struct Post { let id: Int let text: String let author: User let comments: [Comment] } extension Post: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "id" <*> j <| "text" <*> j <| "author" <*> j <|| "comments" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Models/TestModel.swift ================================================ import Argo import Curry struct TestModel { let numerics: TestModelNumerics let string: String let bool: Bool let stringArray: [String] let stringArrayOpt: [String]? let eStringArray: [String] let eStringArrayOpt: [String]? let userOpt: User? let dict: [String: String] } extension TestModel: Decodable { static func decode(j: JSON) -> Decoded { let curriedInit = curry(self.init) return curriedInit <^> j <| "numerics" <*> j <| ["user_opt", "name"] <*> j <| "bool" <*> j <|| "string_array" <*> j <||? "string_array_opt" <*> j <|| ["embedded", "string_array"] <*> j <||? ["embedded", "string_array_opt"] <*> j <|? "user_opt" <*> (j <| "dict" >>- { [String: String].decode($0) }) } } struct TestModelNumerics { let int: Int let int64: Int64 let int64String: Int64 let double: Double let float: Float let intOpt: Int? let uint: UInt let uint64: UInt64 let uint64String: UInt64 } extension TestModelNumerics: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "int" <*> j <| "int64" <*> j <| "int64_string" <*> j <| "double" <*> j <| "float" <*> j <|? "int_opt" <*> j <| "uint" <*> j <| "uint64" <*> j <| "uint64_string" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Models/User.swift ================================================ import Argo import Curry struct User { let id: Int let name: String let email: String? } extension User: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "id" <*> j <| ["userinfo", "name"] <|> j <| "name" <*> j <|? "email" } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/DecodedTests.swift ================================================ import XCTest import Argo class DecodedTests: XCTestCase { func testDecodedSuccess() { let user: Decoded = decode(JSONFromFile("user_with_email")!) switch user { case let .Success(x): XCTAssert(user.description == "Success(\(x))") default: XCTFail("Unexpected Case Occurred") } } func testDecodedWithError() { let user: Decoded = decode(JSONFromFile("user_with_bad_type")!) switch user.error { case .Some: XCTAssert(true) case .None: XCTFail("Unexpected Success") } } func testDecodedWithNoError() { let user: Decoded = decode(JSONFromFile("user_with_email")!) switch user.error { case .Some: XCTFail("Unexpected Error Occurred") case .None: XCTAssert(true) } } func testDecodedTypeMissmatch() { let user: Decoded = decode(JSONFromFile("user_with_bad_type")!) switch user { case let .Failure(.TypeMismatch(expected, actual)): XCTAssert(user.description == "Failure(TypeMismatch(Expected \(expected), got \(actual)))") default: XCTFail("Unexpected Case Occurred") } } func testDecodedMissingKey() { let user: Decoded = decode(JSONFromFile("user_without_key")!) switch user { case let .Failure(.MissingKey(s)): XCTAssert(user.description == "Failure(MissingKey(\(s)))") default: XCTFail("Unexpected Case Occurred") } } func testDecodedCustomError() { let customError: Decoded = decode([:]) switch customError { case let .Failure(e): XCTAssert(e.description == "Custom(My Custom Error)") default: XCTFail("Unexpected Case Occurred") } } func testDecodedMaterializeSuccess() { let user: Decoded = decode(JSONFromFile("user_with_email")!) let materialized = materialize { user.value! } switch materialized { case let .Success(x): XCTAssert(user.description == "Success(\(x))") default: XCTFail("Unexpected Case Occurred") } } func testDecodedMaterializeFailure() { let error = NSError(domain: "com.thoughtbot.Argo", code: 0, userInfo: nil) let materialized = materialize { throw error } switch materialized { case let .Failure(e): XCTAssert(e.description == "Custom(\(error.description))") default: XCTFail("Unexpected Case Occurred") } } func testDecodedDematerializeSuccess() { let user: Decoded = decode(JSONFromFile("user_with_email")!) do { try user.dematerialize() XCTAssert(true) } catch { XCTFail("Unexpected Error Occurred") } } func testDecodedDematerializeTypeMismatch() { let user: Decoded = decode(JSONFromFile("user_with_bad_type")!) do { try user.dematerialize() XCTFail("Unexpected Success") } catch DecodeError.TypeMismatch { XCTAssert(true) } catch DecodeError.MissingKey { XCTFail("Unexpected Error Occurred") } catch { XCTFail("Unexpected Error Occurred") } } func testDecodedDematerializeMissingKey() { let user: Decoded = decode(JSONFromFile("user_without_key")!) do { try user.dematerialize() XCTFail("Unexpected Success") } catch DecodeError.MissingKey { XCTAssert(true) } catch DecodeError.TypeMismatch { XCTFail("Unexpected Error Occurred") } catch { XCTFail("Unexpected Error Occurred") } } func testDecodedOrWithSuccess() { let successUser: Decoded = decode(JSONFromFile("user_with_email")!) let failedUser: Decoded = decode(JSONFromFile("user_with_bad_type")!) let result = successUser.or(failedUser) switch result { case .Success: XCTAssert(result.description == successUser.description) default: XCTFail("Unexpected Case Occurred") } } func testDecodedOrWithError() { let successUser: Decoded = decode(JSONFromFile("user_with_email")!) let failedUser: Decoded = decode(JSONFromFile("user_with_bad_type")!) let result = failedUser.or(successUser) switch result { case .Success: XCTAssert(result.description == successUser.description) default: XCTFail("Unexpected Case Occurred") } } } private struct Dummy: Decodable { static func decode(json: JSON) -> Decoded { return .Failure(.Custom("My Custom Error")) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/EmbeddedJSONDecodingTests.swift ================================================ import XCTest import Argo class EmbeddedJSONDecodingTests: XCTestCase { func testCommentDecodingWithEmbeddedUserName() { let comment: Comment? = JSONFromFile("comment").flatMap(decode) XCTAssert(comment != nil) XCTAssert(comment?.id == 6) XCTAssert(comment?.text == "Cool story bro.") XCTAssert(comment?.authorName == "Cool User") } func testPostDecodingWithEmbeddedUserModel() { let post: Post? = JSONFromFile("post_no_comments").flatMap(decode) XCTAssert(post != nil) XCTAssert(post?.id == 3) XCTAssert(post?.text == "A Cool story.") XCTAssert(post?.author.name == "Cool User") XCTAssert(post?.comments.count == 0) } func testPostDecodingWithEmbeddedUserModelAndComments() { let post: Post? = JSONFromFile("post_comments").flatMap(decode) XCTAssert(post != nil) XCTAssert(post?.id == 3) XCTAssert(post?.text == "A Cool story.") XCTAssert(post?.author.name == "Cool User") XCTAssert(post?.comments.count == 2) } func testPostDecodingWithBadComments() { let post: Post? = JSONFromFile("post_bad_comments").flatMap(decode) XCTAssert(post == nil) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/EquatableTests.swift ================================================ import XCTest import Argo class EquatableTests: XCTestCase { func testEqualJSONObjects() { let json = JSONFromFile("types").map(JSON.init) let anotherParsed = JSONFromFile("types").map(JSON.init) XCTAssertEqual(json!, anotherParsed!) } func testNotEqualJSONObjects() { let json = JSONFromFile("types").map(JSON.init) let anotherJSON = JSONFromFile("types_fail_embedded").map(JSON.init) XCTAssertNotEqual(json!, anotherJSON!) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/ExampleTests.swift ================================================ import XCTest import Argo import Curry class ExampleTests: XCTestCase { func testJSONWithRootArray() { let stringArray: [String]? = JSONFromFile("array_root").flatMap(decode) XCTAssertNotNil(stringArray) XCTAssertEqual(stringArray!, ["foo", "bar", "baz"]) } func testJSONWithRootObject() { let object = JSONFromFile("root_object") as? [String: AnyObject] let user: User? = object.flatMap { decode($0, rootKey: "user") } XCTAssert(user != nil) XCTAssert(user?.id == 1) XCTAssert(user?.name == "Cool User") XCTAssert(user?.email != nil) XCTAssert(user?.email! == "u.cool@example.com") } func testDecodingNonFinalClass() { let object = JSONFromFile("url") as? [String: AnyObject] let url: NSURL? = object.flatMap { decode($0, rootKey: "url") } XCTAssert(url != nil) XCTAssert(url?.absoluteString == "http://example.com") } func testDecodingJSONWithRootArray() { let expected = JSON([["title": "Foo", "age": 21], ["title": "Bar", "age": 32]]) let json = JSONFromFile("root_array").map(JSON.init) XCTAssert(.Some(expected) == json) } func testFlatMapOptionals() { let json: AnyObject? = JSONFromFile("user_with_email") let user: User? = json.flatMap(decode) XCTAssert(user?.id == 1) XCTAssert(user?.name == "Cool User") XCTAssert(user?.email == "u.cool@example.com") } func testNilCoalescing() { let json: AnyObject? = JSONFromFile("user_with_nested_name") let user: User? = json.flatMap(decode) XCTAssert(user?.id == 1) XCTAssert(user?.name == "Very Cool User") XCTAssert(user?.email == "u.cool@example.com") } func testFlatMapDecoded() { let json: AnyObject? = JSONFromFile("user_with_email") let user: Decoded = .fromOptional(json) >>- decode XCTAssert(user.value?.id == 1) XCTAssert(user.value?.name == "Cool User") XCTAssert(user.value?.email == "u.cool@example.com") } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/OptionalPropertyDecodingTests.swift ================================================ import XCTest import Argo class OptionalPropertyDecodingTests: XCTestCase { func testUserDecodingWithEmail() { let user: User? = JSONFromFile("user_with_email").flatMap(decode) XCTAssert(user != nil) XCTAssert(user?.id == 1) XCTAssert(user?.name == "Cool User") XCTAssert(user?.email != nil) XCTAssert(user?.email! == "u.cool@example.com") } func testUserDecodingWithoutEmail() { let user: User? = JSONFromFile("user_without_email").flatMap(decode) XCTAssert(user != nil) XCTAssert(user?.id == 1) XCTAssert(user?.name == "Cool User") XCTAssert(user?.email == nil) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/PListDecodingTests.swift ================================================ import XCTest import Argo class PListDecodingTests: XCTestCase { func testDecodingAllTypesFromPList() { let model: TestModel? = PListFileReader.plist(fromFile: "types").flatMap(decode) XCTAssert(model != nil) XCTAssert(model?.numerics.int == 5) XCTAssert(model?.numerics.int64 == 9007199254740992) XCTAssert(model?.numerics.uint == 500) XCTAssert(model?.numerics.uint64 == 9223372036854775807) XCTAssert(model?.numerics.uint64String == 18446744073709551614) XCTAssert(model?.numerics.double == 3.4) XCTAssert(model?.numerics.float == 1.1) XCTAssert(model?.numerics.intOpt == nil) XCTAssert(model?.string == "Cooler User") XCTAssert(model?.bool == false) XCTAssert(model?.stringArray.count == 2) XCTAssert(model?.stringArrayOpt == nil) XCTAssert(model?.eStringArray.count == 2) XCTAssert(model?.eStringArrayOpt != nil) XCTAssert(model?.eStringArrayOpt?.count == 0) XCTAssert(model?.userOpt != nil) XCTAssert(model?.userOpt?.id == 6) XCTAssert(model?.dict ?? [:] == ["foo": "bar"]) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/PerformanceTests.swift ================================================ import XCTest import Argo class PerformanceTests: XCTestCase { func testParsePerformance() { let json: AnyObject = JSONFromFile("big_data")! measureBlock { _ = JSON(json) } } func testDecodePerformance() { let json: AnyObject = JSONFromFile("big_data")! let j = JSON(json) measureBlock { [TestModel].decode(j) } } func testBigDataDecodesCorrectly() { let json: AnyObject = JSONFromFile("big_data")! let j = JSON(json) let models = [TestModel].decode(j) XCTAssertEqual(models.value!.count, 10_000, "Decoded big_data should have 10_000 results.") } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/RawRepresentableTests.swift ================================================ import XCTest import Argo enum TestRawString: String { case CoolString case NotCoolStringBro } enum TestRawInt: Int { case Zero case One } extension TestRawString: Decodable { } extension TestRawInt: Decodable { } class RawRepresentable: XCTestCase { func testStringEnum() { let json = JSON.Object([ "string": JSON.String("CoolString"), "another": JSON.String("NotCoolStringBro") ]) let string: TestRawString? = (json <| "string").value let another: TestRawString? = (json <| "another").value XCTAssert(TestRawString.CoolString == string) XCTAssert(TestRawString.NotCoolStringBro == another) } func testIntEnum() { let json = JSON.Object([ "zero": JSON.Number(0), "one": JSON.Number(1) ]) let zero: TestRawInt? = (json <| "zero").value let one: TestRawInt? = (json <| "one").value XCTAssert(TestRawInt.Zero == zero) XCTAssert(TestRawInt.One == one) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/SwiftDictionaryDecodingTests.swift ================================================ import XCTest import Argo class SwiftDictionaryDecodingTests: XCTestCase { func testDecodingAllTypesFromSwiftDictionary() { let typesDict = [ "numerics": [ "int": 5, "int64": 900719,//9254740992, Dictionaries can't handle 64bit ints (iOS only, Mac works) "int64_string": "1076543210012345678", "double": 3.4, "float": 1.1, "int_opt": 4, "uint": 500, "uint64": 1039288, "uint64_string": "18446744073709551614" ], "bool": false, "string_array": ["hello", "world"], "embedded": [ "string_array": ["hello", "world"], "string_array_opt": [] ], "user_opt": [ "id": 6, "name": "Cooler User" ], "dict": [ "foo": "bar" ] ] let model: TestModel? = decode(typesDict) XCTAssert(model != nil) XCTAssert(model?.numerics.int == 5) XCTAssert(model?.numerics.int64 == 900719)//9254740992) XCTAssert(model?.numerics.uint == 500) XCTAssert(model?.numerics.uint64 == 1039288) XCTAssert(model?.numerics.uint64String == 18446744073709551614) XCTAssert(model?.numerics.double == 3.4) XCTAssert(model?.numerics.float == 1.1) XCTAssert(model?.numerics.intOpt != nil) XCTAssert(model?.numerics.intOpt! == 4) XCTAssert(model?.string == "Cooler User") XCTAssert(model?.bool == false) XCTAssert(model?.stringArray.count == 2) XCTAssert(model?.stringArrayOpt == nil) XCTAssert(model?.eStringArray.count == 2) XCTAssert(model?.eStringArrayOpt != nil) XCTAssert(model?.eStringArrayOpt?.count == 0) XCTAssert(model?.userOpt != nil) XCTAssert(model?.userOpt?.id == 6) XCTAssert(model?.dict ?? [:] == ["foo": "bar"]) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/Tests/TypeTests.swift ================================================ import XCTest import Argo class TypeTests: XCTestCase { func testAllTheTypes() { let model: TestModel? = JSONFromFile("types").flatMap(decode) XCTAssert(model != nil) XCTAssert(model?.numerics.int == 5) XCTAssert(model?.numerics.int64 == 9007199254740992) XCTAssert(model?.numerics.int64String == 1076543210012345678) XCTAssert(model?.numerics.uint == 500) XCTAssert(model?.numerics.uint64 == 9223372036854775807) XCTAssert(model?.numerics.uint64String == 18446744073709551614) XCTAssert(model?.numerics.double == 3.4) XCTAssert(model?.numerics.float == 1.1) XCTAssert(model?.numerics.intOpt != nil) XCTAssert(model?.numerics.intOpt! == 4) XCTAssert(model?.string == "Cooler User") XCTAssert(model?.bool == false) XCTAssert(model?.stringArray.count == 2) XCTAssert(model?.stringArrayOpt == nil) XCTAssert(model?.eStringArray.count == 2) XCTAssert(model?.eStringArrayOpt != nil) XCTAssert(model?.eStringArrayOpt?.count == 0) XCTAssert(model?.userOpt != nil) XCTAssert(model?.userOpt?.id == 6) XCTAssert(model?.dict ?? [:] == ["foo": "bar"]) } func testFailingEmbedded() { let model: TestModel? = JSONFromFile("types_fail_embedded").flatMap(decode) XCTAssert(model == nil) } func testBooleanDecoding() { let bools: Booleans? = JSONFromFile("booleans").flatMap(decode) XCTAssert(bools != nil) XCTAssert(bools?.bool == true) XCTAssert(bools?.number == true) } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/plists/PListFileReader.swift ================================================ import Foundation class PListFileReader { class func plist(fromFile file: String) -> AnyObject? { let path = NSBundle(forClass: self).pathForResource(file, ofType: "plist") if let p = path { if let dict = NSDictionary(contentsOfFile: p) { return dict } if let arr = NSArray(contentsOfFile: p) { return arr } } return .None } } ================================================ FILE: Carthage/Checkouts/Argo/ArgoTests/plists/types.plist ================================================ numerics int 5 int64 9007199254740992 int64_string 1076543210012345678 double 3.4 float 1.1 uint 500 uint64 9223372036854775807 uint64_string 18446744073709551614 bool embedded string_array hello world string_array_opt string_array hello world user_opt id 6 name Cooler User dict foo bar ================================================ FILE: Carthage/Checkouts/Argo/CONTRIBUTING.md ================================================ We love pull requests from everyone. Follow the thoughtbot [code of conduct] while contributing. [code of conduct]: https://thoughtbot.com/open-source-code-of-conduct ## Dependencies Argo uses [Carthage][] for dependency management. Running `bin/setup` will install Carthage if it isn't already installed, then download the dependencies. [Carthage]: https://github.com/Carthage/Carthage ## Contributing 1. Fork the repo. 2. Run the tests. We only take pull requests with passing tests, and it's great to know that you have a clean slate. 3. Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, we need a test! 4. Make the test pass. 5. Push to your fork and submit a pull request. At this point you're waiting on us. We like to at least comment on, if not accept, pull requests within three business days (and, typically, one business day). We may suggest some changes or improvements or alternatives. Some things that will increase the chance that your pull request is accepted, * Include tests that fail without your code, and pass with it * Update the documentation, the surrounding one, examples elsewhere, guides, whatever is affected by your contribution * Follow the existing style of the project ================================================ FILE: Carthage/Checkouts/Argo/Cartfile.private ================================================ github "thoughtbot/Curry" ~> 2.3.2 github "thoughtbot/Runes" >= 3.0.0 ================================================ FILE: Carthage/Checkouts/Argo/Cartfile.resolved ================================================ github "thoughtbot/Curry" "v2.3.2" github "thoughtbot/Runes" "v3.2.0" ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/.gitattributes ================================================ *.pbxproj merge=union ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/.gitignore ================================================ # OS X Finder .DS_Store # Xcode per-user config *.mode1 *.mode1v3 *.mode2v3 *.perspective *.perspectivev3 *.pbxuser xcuserdata *.xccheckout # Build products build/ *.o *.LinkFileList *.hmap # Automatic backup files *~.nib/ *.swp *~ *.dat *.dep # Cocoapods Pods # Carthage Carthage/Build # Swift Package Manager .build Packages # AppCode specific files .idea/ *.iml ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/CONTRIBUTING.md ================================================ We love pull requests from everyone. Follow the thoughtbot [code of conduct] while contributing. [code of conduct]: https://thoughtbot.com/open-source-code-of-conduct ## Contributing 1. Fork the repo. 2. Push to your fork and submit a pull request. At this point you're waiting on us. We like to at least comment on, if not accept, pull requests within three business days (and, typically, one business day). We may suggest some changes or improvements or alternatives. Some things that will increase the chance that your pull request is accepted, * Update the documentation, the surrounding one, examples elsewhere, guides, whatever is affected by your contribution * Follow the existing style of the project ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.podspec ================================================ Pod::Spec.new do |spec| spec.name = 'Curry' spec.version = '2.3.2' spec.summary = 'Function Currying for Swift' spec.homepage = 'https://github.com/thoughtbot/curry' spec.license = { :type => 'MIT', :file => 'LICENSE' } spec.author = { 'Gordon Fontenot' => 'gordon@thoughtbot.com', 'thoughtbot' => nil, } spec.social_media_url = 'http://twitter.com/thoughtbot' spec.source = { :git => 'https://github.com/thoughtbot/curry.git', :tag => "v#{spec.version}" } spec.source_files = 'Source/**/*.{h,swift}' spec.requires_arc = true spec.ios.deployment_target = '8.0' spec.osx.deployment_target = '10.9' spec.watchos.deployment_target = '2.0' spec.tvos.deployment_target = '9.0' end ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 804D01FB1BA3687E0005BBC4 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; 804D01FC1BA368820005BBC4 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; 80E0590F1BA9FAC10077CBA7 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; 80E059101BA9FAC50077CBA7 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; F88630761B4EF9B200F53969 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; F88630961B4EFA2700F53969 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; F886309A1B4EFD7600F53969 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; F886309B1B4EFD7600F53969 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 804D01F31BA3684C0005BBC4 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80E059071BA9FA7F0077CBA7 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F88630561B4EF96200F53969 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F88630741B4EF9B200F53969 /* Curry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Curry.h; sourceTree = ""; }; F88630751B4EF9B200F53969 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F886307D1B4EF9F800F53969 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F88630991B4EFD7600F53969 /* Curry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Curry.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 804D01EF1BA3684C0005BBC4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 80E059031BA9FA7F0077CBA7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F88630521B4EF96200F53969 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F88630791B4EF9F800F53969 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ F886304C1B4EF96200F53969 = { isa = PBXGroup; children = ( F88630731B4EF9B200F53969 /* Resources */, F88630721B4EF9B200F53969 /* Source */, F88630571B4EF96200F53969 /* Products */, ); sourceTree = ""; }; F88630571B4EF96200F53969 /* Products */ = { isa = PBXGroup; children = ( F88630561B4EF96200F53969 /* Curry.framework */, F886307D1B4EF9F800F53969 /* Curry.framework */, 804D01F31BA3684C0005BBC4 /* Curry.framework */, 80E059071BA9FA7F0077CBA7 /* Curry.framework */, ); name = Products; sourceTree = ""; }; F88630721B4EF9B200F53969 /* Source */ = { isa = PBXGroup; children = ( F88630991B4EFD7600F53969 /* Curry.swift */, ); path = Source; sourceTree = ""; }; F88630731B4EF9B200F53969 /* Resources */ = { isa = PBXGroup; children = ( F88630741B4EF9B200F53969 /* Curry.h */, F88630751B4EF9B200F53969 /* Info.plist */, ); path = Resources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 804D01F01BA3684C0005BBC4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 804D01FC1BA368820005BBC4 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 80E059041BA9FA7F0077CBA7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 80E059101BA9FAC50077CBA7 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F88630531B4EF96200F53969 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F88630761B4EF9B200F53969 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F886307A1B4EF9F800F53969 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F88630961B4EFA2700F53969 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 804D01F21BA3684C0005BBC4 /* Curry-watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = 804D01FA1BA3684C0005BBC4 /* Build configuration list for PBXNativeTarget "Curry-watchOS" */; buildPhases = ( 804D01EE1BA3684C0005BBC4 /* Sources */, 804D01EF1BA3684C0005BBC4 /* Frameworks */, 804D01F01BA3684C0005BBC4 /* Headers */, 804D01F11BA3684C0005BBC4 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-watchOS"; productName = "Curry-watchOS"; productReference = 804D01F31BA3684C0005BBC4 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; 80E059061BA9FA7F0077CBA7 /* Curry-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 80E0590E1BA9FA7F0077CBA7 /* Build configuration list for PBXNativeTarget "Curry-tvOS" */; buildPhases = ( 80E059021BA9FA7F0077CBA7 /* Sources */, 80E059031BA9FA7F0077CBA7 /* Frameworks */, 80E059041BA9FA7F0077CBA7 /* Headers */, 80E059051BA9FA7F0077CBA7 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-tvOS"; productName = "Curry-tvOS"; productReference = 80E059071BA9FA7F0077CBA7 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; F88630551B4EF96200F53969 /* Curry-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = F886306C1B4EF96200F53969 /* Build configuration list for PBXNativeTarget "Curry-iOS" */; buildPhases = ( F88630511B4EF96200F53969 /* Sources */, F88630521B4EF96200F53969 /* Frameworks */, F88630531B4EF96200F53969 /* Headers */, F88630541B4EF96200F53969 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-iOS"; productName = Curry; productReference = F88630561B4EF96200F53969 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; F886307C1B4EF9F800F53969 /* Curry-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = F88630901B4EF9F800F53969 /* Build configuration list for PBXNativeTarget "Curry-Mac" */; buildPhases = ( F88630781B4EF9F800F53969 /* Sources */, F88630791B4EF9F800F53969 /* Frameworks */, F886307A1B4EF9F800F53969 /* Headers */, F886307B1B4EF9F800F53969 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-Mac"; productName = "Curry-Mac"; productReference = F886307D1B4EF9F800F53969 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ F886304D1B4EF96200F53969 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0800; ORGANIZATIONNAME = thoughtbot; TargetAttributes = { 804D01F21BA3684C0005BBC4 = { CreatedOnToolsVersion = 7.0; }; 80E059061BA9FA7F0077CBA7 = { CreatedOnToolsVersion = 7.1; }; F88630551B4EF96200F53969 = { CreatedOnToolsVersion = 6.4; }; F886307C1B4EF9F800F53969 = { CreatedOnToolsVersion = 6.4; }; }; }; buildConfigurationList = F88630501B4EF96200F53969 /* Build configuration list for PBXProject "Curry" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = F886304C1B4EF96200F53969; productRefGroup = F88630571B4EF96200F53969 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( F88630551B4EF96200F53969 /* Curry-iOS */, F886307C1B4EF9F800F53969 /* Curry-Mac */, 804D01F21BA3684C0005BBC4 /* Curry-watchOS */, 80E059061BA9FA7F0077CBA7 /* Curry-tvOS */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 804D01F11BA3684C0005BBC4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 80E059051BA9FA7F0077CBA7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F88630541B4EF96200F53969 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F886307B1B4EF9F800F53969 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 804D01EE1BA3684C0005BBC4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 804D01FB1BA3687E0005BBC4 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 80E059021BA9FA7F0077CBA7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 80E0590F1BA9FAC10077CBA7 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F88630511B4EF96200F53969 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F886309A1B4EFD7600F53969 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F88630781B4EF9F800F53969 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F886309B1B4EFD7600F53969 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 804D01F81BA3684C0005BBC4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; 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; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; 804D01F91BA3684C0005BBC4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = watchos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; 80E0590C1BA9FA7F0077CBA7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; 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; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 80E0590D1BA9FA7F0077CBA7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; F886306A1B4EF96200F53969 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; F886306B1B4EF96200F53969 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; F886306D1B4EF96200F53969 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; F886306E1B4EF96200F53969 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; F88630911B4EF9F800F53969 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = dwarf; 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 = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = macosx; SKIP_INSTALL = YES; }; name = Debug; }; F88630921B4EF9F800F53969 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 804D01FA1BA3684C0005BBC4 /* Build configuration list for PBXNativeTarget "Curry-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 804D01F81BA3684C0005BBC4 /* Debug */, 804D01F91BA3684C0005BBC4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 80E0590E1BA9FA7F0077CBA7 /* Build configuration list for PBXNativeTarget "Curry-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 80E0590C1BA9FA7F0077CBA7 /* Debug */, 80E0590D1BA9FA7F0077CBA7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F88630501B4EF96200F53969 /* Build configuration list for PBXProject "Curry" */ = { isa = XCConfigurationList; buildConfigurations = ( F886306A1B4EF96200F53969 /* Debug */, F886306B1B4EF96200F53969 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F886306C1B4EF96200F53969 /* Build configuration list for PBXNativeTarget "Curry-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( F886306D1B4EF96200F53969 /* Debug */, F886306E1B4EF96200F53969 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F88630901B4EF9F800F53969 /* Build configuration list for PBXNativeTarget "Curry-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( F88630911B4EF9F800F53969 /* Debug */, F88630921B4EF9F800F53969 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = F886304D1B4EF96200F53969 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-watchOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/LICENSE ================================================ Copyright (c) 2014 thoughtbot, inc. MIT License 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: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Package.swift ================================================ import PackageDescription let package = Package( name: "Curry" ) ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/README.md ================================================ [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) # Curry # Swift implementations for function currying. For more info on function currying in Swift, please refer to [this blog post][tb-curry] [tb-curry]: https://robots.thoughtbot.com/introduction-to-function-currying-in-swift ## Installation ## ### [Carthage] ### [Carthage]: https://github.com/Carthage/Carthage ``` github "thoughtbot/Curry" ``` Then run `carthage update`. Follow the current instructions in [Carthage's README][carthage-installation] for up to date installation instructions. [carthage-installation]: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application ### [CocoaPods] ### [CocoaPods]: http://cocoapods.org Add the following to your [Podfile](http://guides.cocoapods.org/using/the-podfile.html): ```ruby pod 'Curry' ``` You will also need to make sure you're opting into using frameworks: ```ruby use_frameworks! ``` Then run `pod install` with CocoaPods 0.36 or newer. Contributing ------------ See the [CONTRIBUTING] document. Thank you, [contributors]! [CONTRIBUTING]: CONTRIBUTING.md [contributors]: https://github.com/thoughtbot/Curry/graphs/contributors License ------- Curry is Copyright (c) 2015 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the [LICENSE] file. [LICENSE]: /LICENSE About ----- ![thoughtbot](https://thoughtbot.com/logo.png) Curry is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc. We love open source software! See [our other projects][community] or look at our product [case studies] and [hire us][hire] to help build your iOS app. [community]: https://thoughtbot.com/community?utm_source=github [case studies]: https://thoughtbot.com/ios?utm_source=github [hire]: https://thoughtbot.com/hire-us?utm_source=github ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Resources/Curry.h ================================================ // // Curry.h // Curry // // Created by Gordon Fontenot on 7/9/15. // Copyright (c) 2015 thoughtbot. All rights reserved. // #import //! Project version number for Curry. FOUNDATION_EXPORT double CurryVersionNumber; //! Project version string for Curry. FOUNDATION_EXPORT const unsigned char CurryVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Resources/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 2.3.2 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/Source/Curry.swift ================================================ public func curry(_ function: (A) -> B) -> (A) -> B { return { (`a`: A) -> B in function(`a`) } } public func curry(_ function: (A, B) -> C) -> (A) -> (B) -> C { return { (`a`: A) -> (B) -> C in { (`b`: B) -> C in function(`a`, `b`) } } } public func curry(_ function: (A, B, C) -> D) -> (A) -> (B) -> (C) -> D { return { (`a`: A) -> (B) -> (C) -> D in { (`b`: B) -> (C) -> D in { (`c`: C) -> D in function(`a`, `b`, `c`) } } } } public func curry(_ function: (A, B, C, D) -> E) -> (A) -> (B) -> (C) -> (D) -> E { return { (`a`: A) -> (B) -> (C) -> (D) -> E in { (`b`: B) -> (C) -> (D) -> E in { (`c`: C) -> (D) -> E in { (`d`: D) -> E in function(`a`, `b`, `c`, `d`) } } } } } public func curry(_ function: (A, B, C, D, E) -> F) -> (A) -> (B) -> (C) -> (D) -> (E) -> F { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> F in { (`b`: B) -> (C) -> (D) -> (E) -> F in { (`c`: C) -> (D) -> (E) -> F in { (`d`: D) -> (E) -> F in { (`e`: E) -> F in function(`a`, `b`, `c`, `d`, `e`) } } } } } } public func curry(_ function: (A, B, C, D, E, F) -> G) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> G { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> G in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> G in { (`c`: C) -> (D) -> (E) -> (F) -> G in { (`d`: D) -> (E) -> (F) -> G in { (`e`: E) -> (F) -> G in { (`f`: F) -> G in function(`a`, `b`, `c`, `d`, `e`, `f`) } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G) -> H) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> H { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> H in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> H in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> H in { (`d`: D) -> (E) -> (F) -> (G) -> H in { (`e`: E) -> (F) -> (G) -> H in { (`f`: F) -> (G) -> H in { (`g`: G) -> H in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`) } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H) -> I) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> I in { (`e`: E) -> (F) -> (G) -> (H) -> I in { (`f`: F) -> (G) -> (H) -> I in { (`g`: G) -> (H) -> I in { (`h`: H) -> I in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`) } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I) -> J) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> J in { (`f`: F) -> (G) -> (H) -> (I) -> J in { (`g`: G) -> (H) -> (I) -> J in { (`h`: H) -> (I) -> J in { (`i`: I) -> J in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`) } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J) -> K) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> K in { (`g`: G) -> (H) -> (I) -> (J) -> K in { (`h`: H) -> (I) -> (J) -> K in { (`i`: I) -> (J) -> K in { (`j`: J) -> K in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`) } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K) -> L) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> L in { (`h`: H) -> (I) -> (J) -> (K) -> L in { (`i`: I) -> (J) -> (K) -> L in { (`j`: J) -> (K) -> L in { (`k`: K) -> L in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`) } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L) -> M) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> M in { (`i`: I) -> (J) -> (K) -> (L) -> M in { (`j`: J) -> (K) -> (L) -> M in { (`k`: K) -> (L) -> M in { (`l`: L) -> M in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`) } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M) -> N) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> N in { (`j`: J) -> (K) -> (L) -> (M) -> N in { (`k`: K) -> (L) -> (M) -> N in { (`l`: L) -> (M) -> N in { (`m`: M) -> N in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`) } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> O) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> O in { (`k`: K) -> (L) -> (M) -> (N) -> O in { (`l`: L) -> (M) -> (N) -> O in { (`m`: M) -> (N) -> O in { (`n`: N) -> O in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`) } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> P) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> P in { (`l`: L) -> (M) -> (N) -> (O) -> P in { (`m`: M) -> (N) -> (O) -> P in { (`n`: N) -> (O) -> P in { (`o`: O) -> P in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`) } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> Q) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`m`: M) -> (N) -> (O) -> (P) -> Q in { (`n`: N) -> (O) -> (P) -> Q in { (`o`: O) -> (P) -> Q in { (`p`: P) -> Q in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`) } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> R) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`n`: N) -> (O) -> (P) -> (Q) -> R in { (`o`: O) -> (P) -> (Q) -> R in { (`p`: P) -> (Q) -> R in { (`q`: Q) -> R in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`) } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) -> S) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`o`: O) -> (P) -> (Q) -> (R) -> S in { (`p`: P) -> (Q) -> (R) -> S in { (`q`: Q) -> (R) -> S in { (`r`: R) -> S in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`) } } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) -> T) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`o`: O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`p`: P) -> (Q) -> (R) -> (S) -> T in { (`q`: Q) -> (R) -> (S) -> T in { (`r`: R) -> (S) -> T in { (`s`: S) -> T in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`) } } } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) -> U) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`o`: O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`p`: P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`q`: Q) -> (R) -> (S) -> (T) -> U in { (`r`: R) -> (S) -> (T) -> U in { (`s`: S) -> (T) -> U in { (`t`: T) -> U in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`) } } } } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) -> V) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`o`: O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`p`: P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`q`: Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`r`: R) -> (S) -> (T) -> (U) -> V in { (`s`: S) -> (T) -> (U) -> V in { (`t`: T) -> (U) -> V in { (`u`: U) -> V in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`, `u`) } } } } } } } } } } } } } } } } } } } } } } ================================================ FILE: Carthage/Checkouts/Argo/Carthage/Checkouts/Curry/bin/generate ================================================ #!/usr/bin/env xcrun swift // Generates a Swift file with implementation of function currying for a ridicolously high number of arguments import Foundation let generics = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] extension Array { subscript(safe index: Int) -> Element? { return indices ~= index ? self[index] : .none } } func genericType(for position: Int) -> String { let max = generics.count switch position { case _ where position < max: return generics[position % max] default: return generics[position / max - 1] + generics[position % max] } } func commaConcat(_ xs: [String]) -> String { return xs.joined(separator: ", ") } func singleParameterFunctions(_ xs: [String]) -> String { guard let first = xs.first else { fatalError("Attempted to nest functions with no arguments") } guard xs.last != first else { return first } let remainder = Array(xs.dropFirst()) return "(\(first)) -> \(singleParameterFunctions(remainder))" } func curryDefinitionGenerator(arguments: Int) -> String { let genericParameters = (0.." let inputParameters = Array(genericParameters[0.. (B) -> (C) -> D" let innerFunctionArguments = commaConcat(lowerFunctionArguments) // "`a`, `b`, `c`" let functionDefinition = "function(\(innerFunctionArguments))" // function(`a`, `b`, `c`) let implementation = lowerFunctionArguments.enumerated().reversed().reduce(functionDefinition) { accum, tuple in let (index, argument) = tuple let functionParameters = Array(genericParameters.suffix(from: index + 1)) return "{ (\(argument): \(inputParameters[index])) -> \(singleParameterFunctions(functionParameters)) in \(accum) }" } // "{ (`a`: A) -> (B) -> (C) -> D in { (`b`: B) -> (C) -> D in { (`c`: C) -> D in function(`a`, `b`, `c`) } } }" let curry = [ "public func curry\(genericTypeDefinition)(_ function: \(functionArguments) -> \(returnType)) -> \(returnFunction) {", " return \(implementation)", "}" ] return curry.joined(separator: "\n") } print("Generating 💬") let input = Process.arguments[safe: 1] ?? "20" let limit = Int(input)! let start = 2 let curries = (start...limit+1).map { curryDefinitionGenerator(arguments: $0) } let output = curries.joined(separator: "\n\n") + "\n" let outputPath = "Source/Curry.swift" let currentPath = NSURL(fileURLWithPath: FileManager.default().currentDirectoryPath) let currySwiftPath = currentPath.appendingPathComponent(outputPath)! do { try output.write(to: currySwiftPath, atomically: true, encoding: String.Encoding.utf8) } catch let e as NSError { print("An error occurred while saving the generated functions. Error: \(e)") } print("Done, curry functions files written at \(outputPath) 👍") ================================================ FILE: Carthage/Checkouts/Argo/Documentation/.gitkeep ================================================ ================================================ FILE: Carthage/Checkouts/Argo/Documentation/Basic-Usage.md ================================================ ## Usage Argo uses Swift's type system along with concepts from functional programming to let you smoothly transform JSON data into Swift model types. Argo does this with a minimum of syntax, while at the same time improving type safety and data integrity compared to other approaches. You may need to learn a few things in order to learn Argo effectively, but once you do so, you'll have a powerful new tool to hang on your belt! ### Decoding basics Argo's whole purpose is to let you easily pick apart structured data (normally in the form of a dictionary created from JSON data) and create Swift objects based on the decoded content. Typically, you'll want to do this with JSON data received from a server or elsewhere. The first thing you need to do is convert the JSON data from `NSData` to an `AnyObject` using `Foundation`'s `NSJSONSerialization` API. Once you have the `AnyObject`, you can call Argo's global `decode` function to get back the decoded model. ```swift let json: AnyObject? = try? NSJSONSerialization.JSONObjectWithData(responseData, options: []) if let j: AnyObject = json { let user: User? = decode(j) // ignore failure info or let decodedUser: Decoded = decode(j) // preserve failure info } ``` As you see in this example, Argo introduces a new type: `Decoded`. This new type contains either a successfully decoded object or a failure state that preserves information about why a decoding failed. You can choose to either ignore the `Decoded` type and just get back the optional value or keep the `Decoded` type and use it to debug or report decoding failures. When you decode an `AnyObject` into a model using the global `decode` function, you can specify whether you want an `Optional` model or a `Decoded` model by specifying the return type as seen in the code block above. ### Implementing `Decodable` In order for this to work with your own model types, you need to make sure that models that you wish to decode from JSON conform to the `Decodable` protocol: ```swift public protocol Decodable { typealias DecodedType = Self static func decode(json: JSON) -> Decoded } ``` In your model, you need to implement the `decode` function to perform whatever transformations are needed in order to create your model from the given JSON structure. To illustrate this, we will decode a simple model type called `User`. Start by creating this `User` model: ```swift struct User { let id: Int let name: String } ``` ### Currying `User.init` We will be using another small library called [`Curry`] to help with decoding our `User` model. Currying allows us to partially apply the `init` function over the course of the decoding process. This basically means that we can build up the `init` function call bit by bit, adding one parameter at a time, if and only if Argo can successfully decode them. If any of the parameters don't meet our expectations, Argo will skip the `init` call and return a special failure state. [`Curry`]: https://github.com/thoughtbot/Curry > If you'd like to learn more about currying, we recommend the following articles: > > > - [Apple's documentation of curried functions](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-XID_615) > - [Introduction to Function Currying in Swift](http://robots.thoughtbot.com/introduction-to-function-currying-in-swift) Now, we make `User` conform to `Decodable` and implement the required `decode` function. We will implement this function by using some [functional concepts](Functional-Concepts.md), specifically the `map` (`<^>`) and `apply` (`<*>`) operators, to conditionally pass the required parameters to the curried init function. The common pattern will look like this: ```swift static func decode(json: JSON) -> Decoded { return curry(Model.init) <^> paramOne <*> paramTwo <*> paramThree } ``` and so on. If any of those parameters are a failure state, then the entire creation process will fail, and the function will return the first failure state. If all of the parameters are successful, the value will be unwrapped and passed to the `init` function. ### Safely pulling values from JSON In the example above, we showed some non-existent parameters (`paramOne`, etc), but one of Argo's main features is the ability to help you grab the real parameters from the JSON structure in a way that is type-safe and concise. You don't need to manually check to make sure that a value is non-nil, or that it's of the right type. Argo leverages Swift's expressive type system to do that heavy lifting for you. To help with the decoding process, Argo introduces two new operators for parsing a value out of the JSON: - `<|` will attempt to parse a single value from the JSON - `<||` will attempt to parse an array of values from the JSON These are infix operators that correspond to familiar operations: - `json <| "name"` is analogous to `json["name"]`, in cases where a single item is associated with the `"name"` key - `json <|| "posts"` is analogous to `json["posts"]`, in cases where an array of items is associated with the `"posts"` key As a bonus, if your JSON contains nested data whose elements are also `Decodable`, then you can retrieve a nested value by using an array of strings: - `json <| ["location", "city"]` is analogous to `json["location"]["city"]` Each of these operators will attempt to extract the specified value from the JSON structure. If a value is found, the operator will then attempt to cast the value to the expected type. If that all works out, the operator will return the decoded object wrapped inside a `Decoded.Success(.Some(value))`. If the value it finds is of the wrong type, the function will return a `Decoded.Failure(.TypeMismatch(expected: String, actual: String))` failure state. If it can't find any value at all for the specified key, the function will return a `Decoded.Failure(.MissingKey(name: String))` failure state. There are also Optional versions of these operators: - `<|?` will attempt to parse an optional value from the JSON - `<||?` will attempt to parse an optional array of values from the JSON Usage is the same as for the non-optional variants. The difference is that if these operators happen to pull a `nil` value from the JSON, they will consider this a success and continue on, rather than returning a failure state. This is useful for including parameters that truly are optional values. For example, if your system doesn't require someone to supply an email address, you could have an optional property on `User` such as `let email: String?` and use `json <|? "email"` to decode either an email string or a `nil` value. ### Finally implementing your `decode` function So, to implement our `decode` function, we can use the JSON parsing operator in conjunction with `map` and `apply`: ```swift extension User: Decodable { static func decode(j: JSON) -> Decoded { return curry(User.init) <^> j <| "id" <*> j <| "name" } } ``` For comparison, an implementation of a similar function without Argo could look like this: ```swift extension User { static func decode(j: NSDictionary) -> User? { if let id = j["id"] as? Int, let name = j["name"] as? String { return User(id: id, name: name) } return .None } } ``` Not only is that code much more verbose than the equivalent code using Argo, it also doesn't return to the caller any indication of where or why any failures occur. This technique also requires you to specify the type of each value in multiple places, which means that if the type of one of your values changes, you'll have to change it at multiple places in your code. If you're using Argo, however, you just need to declare the types of your properties in your model, and then the Swift compiler will infer the types that need to be sent to the curried `decode` function and therefore the types that need to be found in the JSON structure. You can decode custom types the same way, as long as the type also conforms to `Decodable`. This is how we implement [relationships]. [relationships]: Relationships.md For more Argo usage examples, see our [test suite](../ArgoTests). ================================================ FILE: Carthage/Checkouts/Argo/Documentation/Decode-Enums.md ================================================ # Decoding Enums Decoding Structs and Classes is a similar process, but Enums can mix things up. If your Enum inherits from a Raw Type (`String` or `Int`), then making it conform to `Decodable` is as simple as pie. Let's look at a `Role` type enum: ```swift enum Role: String { case User case Admin case SuperAdmin } ``` To make `Role` conform to `Decodable`, use this one line: ```swift extension Role: Decodable { } ``` "THAT'S IT?! How?", you ask. Enums with a raw type like `String` or `Int` conform to `RawRepresentable`. Enums that are `RawRepresentable` are given a default value by the Swift compiler. With `Int`, the first case is `0` and each case is one more than the previous case. With `String`, the default raw value is the case name. So for `Role`, the raw value that represents the case `User` is `"User"`. `RawRepresentable` enums also get a default initialize `init(rawValue: )`. We added a [default implementation] to Argo for `Int` and `String` enums so decoding can be this simple. [default implementation]: ../Argo/Extensions/RawRepresentable.swift So, what if the enum doesn't have a raw type? Conforming to `Decodable` is a bit more involved but not too hard. Let's look at an example: ```swift enum FootRace { case HalfMarathon case Marathon case UltraMarathon } ``` We can write `Decodable` for `FootRace` like so: ```swift extension FootRace: Decodable { static func decode(j: JSON) -> Decoded { switch j { // First, make sure JSON is a number. case let .Number(distance): // Next, match the number to the enum case. switch distance { // When a case matches, use pure to wrap the enum in Decoded. case 13.1: return pure(.HalfMarathon) case 26.2: return pure(.Marathon) case _ where distance > 26.2: return pure(.UltraMarathon) // Return an error if no case matched default: return .typeMismatch("marathon distance", actual: distance) } // Return an error if JSON is not a number. default: return .typeMismatch("Number", actual: j) } } } ``` ================================================ FILE: Carthage/Checkouts/Argo/Documentation/Decode-Root-Keys.md ================================================ # Decoding with Root Keys The easiest way to decode models from JSON is to use the global `decode` function: pass the `AnyObject` variable returned from `NSJSONSerialization` directly to `decode`, and you'll get the model back. However, many times the JSON for the model is embedded within a root key: ``` { "user": { "id": 1881372911, "name": "George Senior" } } ``` In this case, you can't use the global `decode` function because it assumes the object you're trying to decode is at the root level. To get around this, first transform the `AnyObject` into a `JSON` type, then use the `<|` operator to pull out the object and decode it into its model. ```swift let json = JSON(anyObject) let user: Decoded = json <| "user" // or let user: User? = json <| "user" ``` ================================================ FILE: Carthage/Checkouts/Argo/Documentation/Functional-Concepts.md ================================================ ## Functional Concepts Argo really wants to be used with patterns borrowed from functional programming such as `map` (`<^>`) and `apply` (`<*>`). We feel that these patterns greatly reduce the pain felt in trying to use JSON (an inherently loosely typed format) with Swift (a strictly typed language). It also gives us a way to succinctly maintain Argo's core concept, and short circuit the decoding process if any part of it fails. Additionally, we feel that the use of operators for these functions greatly improves the readability of the code we're suggesting. Using named functions would lead to nested functions and a confusing number of parenthesis. If you aren't familiar with how these functions work (or just aren't comfortable with using operators), that's totally OK. It's possible to use the library without using them, although it might be a little more painful. If you're looking to learn more about these functions, we would recommend reading the following articles: - [Functional Swift for Dealing with Optional Values](http://robots.thoughtbot.com/functional-swift-for-dealing-with-optional-values) - [Railway Oriented Programming](http://fsharpforfunandprofit.com/posts/recipe-part2/) And check out this talk: - [How I Learned To Stop Worrying And Love The Functor](https://github.com/gfontenot/talks/tree/master/Functors) ================================================ FILE: Carthage/Checkouts/Argo/Documentation/Ideology.md ================================================ ## Ideology Argo's core concept is that in order to maintain type safety, you should only be able to successfully decode an object if all parameters are satisfied properly. So if you have a model that looks like this: ```swift struct User { let id: Int let name: String } ``` but the JSON you receive from the server looks like this: ```json { "user": { "id": "this isn't a number", "name": "Gob Bluth" } } ``` then ideally, JSON parsing would fail, and you'd get an error state instead of a `User` object. In Argo, if JSON parsing succeeds you'll receive the `User` object and you can be sure that it is full and valid. If it fails, you will instead be given the reason why the `User` couldn't be constructed. If you're interested in learning more about the concepts and ideology that went into building Argo, we recommend reading the series of articles that were written alongside its development: - [Efficient JSON in Swift with Functional Concepts and Generics](http://robots.thoughtbot.com/efficient-json-in-swift-with-functional-concepts-and-generics) - [Real World JSON Parsing with Swift](http://robots.thoughtbot.com/real-world-json-parsing-with-swift) - [Parsing Embedded JSON and Arrays in Swift](http://robots.thoughtbot.com/parsing-embedded-json-and-arrays-in-swift) ================================================ FILE: Carthage/Checkouts/Argo/Documentation/README.md ================================================ # Documentation # Argo allows you to easily decode loosely typed structures into strongly typed models. When paired with functional programming concepts, Argo becomes a beautiful way to decode JSON from network responses into your application models. The following guides will teach you how to use Argo and how powerful it can be. ## High Level Concepts ## - [Overarching ideology](Ideology.md) - [Functional concepts](Functional-Concepts.md) ## Basic Usage ## - [Decoding your first model](Basic-Usage.md) - [Relationships](Relationships.md) ## Advanced Usage ## - [Decoding root keys](Decode-Root-Keys.md) - [Decoding Enums](Decode-Enums.md) - Understanding the Decode operators // TODO - Interacting with the `JSON` enum // TODO - Writing your own custom parser // TODO - More complex parsers // TODO ================================================ FILE: Carthage/Checkouts/Argo/Documentation/Relationships.md ================================================ # Decoding Relationships It's very common to have models that relate to other models. When all your models conform to `Decodable`, Argo makes it really easy to populate those relationships. "How does this work?", you ask. Well, Argo is smart enough to know it can decode anything that conforms to `Decodable` because internally, Argo is simply calling each type's `decode` function. That means that any type that conforms to `Decodable` looks the same to Argo as a `String` or `Int`; in fact, Argo can only decode those Swift types because we've already implemented `Decodable` for them. Let's look at a `User`, `Post`, and `Comment` model and how they relate. First, our server is sending us the JSON for the `Post` model: ``` { "author": { "id": 6, "name": "Gob Bluth" }, "text": "I've made a huge mistake." } ``` Our `Post` model could then be: ```swift struct Post { let author: String let text: String } ``` For now, we only need the user's name and we can use the special embedded syntax to get it. Then our implementation of `Decodable` for `Post` looks like this: ```swift extension Post: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| ["author", "name"] <*> j <| "text" } } ``` Great! Now we can decode JSON into `Post` models. However, let's be real, we can't have posts without comments! Comments are like 90% of the fun on the internet. Most likely the JSON will contain an embedded array of `Comment` models: ``` { "author": { "id": 53, "name": "Lindsay" }, "text": "I have the afternoon free.", "comments": [ { "author": { "id": 1, "name": "Lucille" }, "text": "Really? Did 'nothing' cancel?" } ] } ``` So then `Comment` will look like: ```swift struct Comment { let author: String let text: String } extension Comment: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| ["author", "name"] <*> j <| "text" } } ``` Now, we can add an array of comments to our `Post` model: ```swift struct Post { let author: String let text: String let comments: [Comment] } extension Post: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| ["author", "name"] <*> j <| "text" <*> j <|| "comments" } } ``` We added `comments` as a property on our `Post` model. Then we added a line to decode the comments from the JSON. Notice how we use `<||` instead of `<|` with `comments` because it is an _Array_. Storing the name of the author with a post or comment isn't very flexible. What we really want to do is tie posts and comments to users. If we use the `User` struct from [Basic Usage]: [Basic Usage]: Basic-Usage.md ```swift struct User { let id: Int let name: String } extension User: Decodable { static func decode(j: JSON) -> Decoded { return curry(User.init) <^> j <| "id" <*> j <| "name" } } ``` We can simply change the `author` property from `String` to `User` and point the decoder directly at the author object. No joke! Take a look: ```swift struct Post { let author: User let text: String let comments: [Comment] } extension Post: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "author" <*> j <| "text" <*> j <|| "comments" } } struct Comment { let author: User let text: String } extension Comment: Decodable { static func decode(j: JSON) -> Decoded { return curry(self.init) <^> j <| "author" <*> j <| "text" } } ``` That's it! Argo's use of Generics and the `Decodable` protocol means that supporting custom types is straightforward, since that's internally the same way Argo decodes Swift's standard types. ================================================ FILE: Carthage/Checkouts/Argo/ISSUE_TEMPLATE.md ================================================ _[Description of the issue you are experiencing]_ ### Error Messages _List all the error messages or warnings you are seeing, if any._ ### Sample JSON ``` { "key": "value" } ``` ### Models _All models involved, including their `Decodable` implementations._ ``` struct User { // ... } extension User: Decodable { // ... } ``` ### Argo Version _example: Argo 3.0.0_ ### Dependency Manager _examples: Carthage, Cocoapods, git submodules, copied code, etc._ ================================================ FILE: Carthage/Checkouts/Argo/LICENSE ================================================ Copyright (c) 2014 thoughtbot, inc. MIT License 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: Carthage/Checkouts/Argo/README.md ================================================ # Argo [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) Argo is a library that lets you extract models from JSON or similar structures in a way that's concise, type-safe, and easy to extend. Using Argo, you won't need to write validation code to ensure that incoming data is of the right type, or to make sure required data fields aren't turning up empty. Argo uses Swift's expressive type system to do that for you, and reports back explicit failure states in case it doesn't find what you've told it to expect. _Argo_ is the Greek word for _swift_ and the name of the ship used by Jason, son of Aeson, of the Argonauts. Aeson is the JSON parsing library in Haskell that inspired Argo, much like Aeson inspired his son Jason. NOTE: For Swift 1.2 support, use the versions tagged 1.x.x. For Swift 1.1 support, use the versions tagged 0.3.x. You can find those in the [releases]. [releases]: https://github.com/thoughtbot/Argo/releases ## Installation ### [Carthage] [Carthage]: https://github.com/Carthage/Carthage Add the following to your Cartfile: ``` github "thoughtbot/Argo" ``` Then run `carthage update`. Follow the current instructions in [Carthage's README][carthage-installation] for up to date installation instructions. [carthage-installation]: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application ### [CocoaPods] [CocoaPods]: http://cocoapods.org Add the following to your [Podfile](http://guides.cocoapods.org/using/the-podfile.html): ```ruby pod 'Argo' ``` You will also need to make sure you're opting into using frameworks: ```ruby use_frameworks! ``` Then run `pod install` with CocoaPods 0.36 or newer. ### Git Submodules I guess you could do it this way if that's your thing. Add this repo as a submodule, and add the project file to your workspace. You can then link against `Argo.framework` for your application target. ## Usage tl;dr: Please note: the example below requires an additional, external module named [Curry](https://github.com/thoughtbot/Curry) which lets us use the `curry` function to curry `User.init`. ```swift import Argo import Curry struct User { let id: Int let name: String let email: String? let role: Role let companyName: String let friends: [User] } extension User: Decodable { static func decode(j: JSON) -> Decoded { return curry(User.init) <^> j <| "id" <*> j <| "name" <*> j <|? "email" // Use ? for parsing optional values <*> j <| "role" // Custom types that also conform to Decodable just work <*> j <| ["company", "name"] // Parse nested objects <*> j <|| "friends" // parse arrays of objects } } // Wherever you receive JSON data: let json: AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data, options: []) if let j: AnyObject = json { let user: User? = decode(j) } ``` For more information, see the [Documentation](Documentation/) ## Contributing See the [CONTRIBUTING] document. Thank you, [contributors]! [CONTRIBUTING]: CONTRIBUTING.md [contributors]: https://github.com/thoughtbot/Argo/graphs/contributors ## License Argo is Copyright (c) 2015 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the [LICENSE] file. [LICENSE]: /LICENSE ## About ![thoughtbot](https://thoughtbot.com/logo.png) Argo is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc. We love open source software! See [our other projects][community] or look at our product [case studies] and [hire us][hire] to help build your iOS app. [community]: https://thoughtbot.com/community?utm_source=github [case studies]: https://thoughtbot.com/work?utm_source=github [hire]: https://thoughtbot.com/hire-us?utm_source=github ================================================ FILE: Carthage/Checkouts/Argo/bin/archive ================================================ #!/usr/bin/env bash carthage build --no-skip-current carthage archive Argo ================================================ FILE: Carthage/Checkouts/Argo/bin/setup ================================================ #!/usr/bin/env bash brew install carthage 2> /dev/null carthage bootstrap --use-submodules --no-build --no-use-binaries ================================================ FILE: Carthage/Checkouts/Argo/bin/test ================================================ #!/usr/bin/env sh set -o pipefail xcrun xcodebuild \ -workspace Argo.xcworkspace \ -scheme Argo-Mac \ test \ | xcpretty --color xcrun xcodebuild \ -workspace Argo.xcworkspace \ -scheme Argo-iOS \ -destination "platform=iOS Simulator,name=iPhone 6" \ test \ | xcpretty --color xcrun xcodebuild \ -workspace Argo.xcworkspace \ -scheme Argo-watchOS \ -destination "generic/platform=watchOS" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_IDENTITY="" \ | xcpretty --color xcrun xcodebuild \ -workspace Argo.xcworkspace \ -scheme Argo-tvOS \ -destination "platform=tvOS Simulator,name=Apple TV 1080p" \ test \ | xcpretty --color ================================================ FILE: Carthage/Checkouts/Argo/circle.yml ================================================ machine: xcode: version: "7.3" environment: XCODE_SCHEME: nonce XCODE_WORKSPACE: nonce.xcworkspace dependencies: override: - git submodule update --init --recursive test: override: - bin/test ================================================ FILE: Carthage/Checkouts/Curry/.gitattributes ================================================ *.pbxproj merge=union ================================================ FILE: Carthage/Checkouts/Curry/.gitignore ================================================ # OS X Finder .DS_Store # Xcode per-user config *.mode1 *.mode1v3 *.mode2v3 *.perspective *.perspectivev3 *.pbxuser xcuserdata *.xccheckout # Build products build/ *.o *.LinkFileList *.hmap # Automatic backup files *~.nib/ *.swp *~ *.dat *.dep # Cocoapods Pods # Carthage Carthage/Build # Swift Package Manager .build Packages # AppCode specific files .idea/ *.iml ================================================ FILE: Carthage/Checkouts/Curry/CONTRIBUTING.md ================================================ We love pull requests from everyone. Follow the thoughtbot [code of conduct] while contributing. [code of conduct]: https://thoughtbot.com/open-source-code-of-conduct ## Contributing 1. Fork the repo. 2. Push to your fork and submit a pull request. At this point you're waiting on us. We like to at least comment on, if not accept, pull requests within three business days (and, typically, one business day). We may suggest some changes or improvements or alternatives. Some things that will increase the chance that your pull request is accepted, * Update the documentation, the surrounding one, examples elsewhere, guides, whatever is affected by your contribution * Follow the existing style of the project ================================================ FILE: Carthage/Checkouts/Curry/Curry.podspec ================================================ Pod::Spec.new do |spec| spec.name = 'Curry' spec.version = '2.3.3' spec.summary = 'Function Currying for Swift' spec.homepage = 'https://github.com/thoughtbot/curry' spec.license = { :type => 'MIT', :file => 'LICENSE' } spec.author = { 'Gordon Fontenot' => 'gordon@thoughtbot.com', 'thoughtbot' => nil, } spec.social_media_url = 'http://twitter.com/thoughtbot' spec.source = { :git => 'https://github.com/thoughtbot/curry.git', :tag => "v#{spec.version}" } spec.source_files = 'Source/**/*.{h,swift}' spec.requires_arc = true spec.ios.deployment_target = '8.0' spec.osx.deployment_target = '10.9' spec.watchos.deployment_target = '2.0' spec.tvos.deployment_target = '9.0' end ================================================ FILE: Carthage/Checkouts/Curry/Curry.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 804D01FB1BA3687E0005BBC4 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; 804D01FC1BA368820005BBC4 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; 80E0590F1BA9FAC10077CBA7 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; 80E059101BA9FAC50077CBA7 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; F88630761B4EF9B200F53969 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; F88630961B4EFA2700F53969 /* Curry.h in Headers */ = {isa = PBXBuildFile; fileRef = F88630741B4EF9B200F53969 /* Curry.h */; settings = {ATTRIBUTES = (Public, ); }; }; F886309A1B4EFD7600F53969 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; F886309B1B4EFD7600F53969 /* Curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88630991B4EFD7600F53969 /* Curry.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 804D01F31BA3684C0005BBC4 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80E059071BA9FA7F0077CBA7 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F88630561B4EF96200F53969 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F88630741B4EF9B200F53969 /* Curry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Curry.h; sourceTree = ""; }; F88630751B4EF9B200F53969 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F886307D1B4EF9F800F53969 /* Curry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Curry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F88630991B4EFD7600F53969 /* Curry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Curry.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 804D01EF1BA3684C0005BBC4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 80E059031BA9FA7F0077CBA7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F88630521B4EF96200F53969 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F88630791B4EF9F800F53969 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ F886304C1B4EF96200F53969 = { isa = PBXGroup; children = ( F88630731B4EF9B200F53969 /* Resources */, F88630721B4EF9B200F53969 /* Source */, F88630571B4EF96200F53969 /* Products */, ); sourceTree = ""; }; F88630571B4EF96200F53969 /* Products */ = { isa = PBXGroup; children = ( F88630561B4EF96200F53969 /* Curry.framework */, F886307D1B4EF9F800F53969 /* Curry.framework */, 804D01F31BA3684C0005BBC4 /* Curry.framework */, 80E059071BA9FA7F0077CBA7 /* Curry.framework */, ); name = Products; sourceTree = ""; }; F88630721B4EF9B200F53969 /* Source */ = { isa = PBXGroup; children = ( F88630991B4EFD7600F53969 /* Curry.swift */, ); path = Source; sourceTree = ""; }; F88630731B4EF9B200F53969 /* Resources */ = { isa = PBXGroup; children = ( F88630741B4EF9B200F53969 /* Curry.h */, F88630751B4EF9B200F53969 /* Info.plist */, ); path = Resources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 804D01F01BA3684C0005BBC4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 804D01FC1BA368820005BBC4 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 80E059041BA9FA7F0077CBA7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 80E059101BA9FAC50077CBA7 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F88630531B4EF96200F53969 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F88630761B4EF9B200F53969 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F886307A1B4EF9F800F53969 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F88630961B4EFA2700F53969 /* Curry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 804D01F21BA3684C0005BBC4 /* Curry-watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = 804D01FA1BA3684C0005BBC4 /* Build configuration list for PBXNativeTarget "Curry-watchOS" */; buildPhases = ( 804D01EE1BA3684C0005BBC4 /* Sources */, 804D01EF1BA3684C0005BBC4 /* Frameworks */, 804D01F01BA3684C0005BBC4 /* Headers */, 804D01F11BA3684C0005BBC4 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-watchOS"; productName = "Curry-watchOS"; productReference = 804D01F31BA3684C0005BBC4 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; 80E059061BA9FA7F0077CBA7 /* Curry-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 80E0590E1BA9FA7F0077CBA7 /* Build configuration list for PBXNativeTarget "Curry-tvOS" */; buildPhases = ( 80E059021BA9FA7F0077CBA7 /* Sources */, 80E059031BA9FA7F0077CBA7 /* Frameworks */, 80E059041BA9FA7F0077CBA7 /* Headers */, 80E059051BA9FA7F0077CBA7 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-tvOS"; productName = "Curry-tvOS"; productReference = 80E059071BA9FA7F0077CBA7 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; F88630551B4EF96200F53969 /* Curry-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = F886306C1B4EF96200F53969 /* Build configuration list for PBXNativeTarget "Curry-iOS" */; buildPhases = ( F88630511B4EF96200F53969 /* Sources */, F88630521B4EF96200F53969 /* Frameworks */, F88630531B4EF96200F53969 /* Headers */, F88630541B4EF96200F53969 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-iOS"; productName = Curry; productReference = F88630561B4EF96200F53969 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; F886307C1B4EF9F800F53969 /* Curry-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = F88630901B4EF9F800F53969 /* Build configuration list for PBXNativeTarget "Curry-Mac" */; buildPhases = ( F88630781B4EF9F800F53969 /* Sources */, F88630791B4EF9F800F53969 /* Frameworks */, F886307A1B4EF9F800F53969 /* Headers */, F886307B1B4EF9F800F53969 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Curry-Mac"; productName = "Curry-Mac"; productReference = F886307D1B4EF9F800F53969 /* Curry.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ F886304D1B4EF96200F53969 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0800; ORGANIZATIONNAME = thoughtbot; TargetAttributes = { 804D01F21BA3684C0005BBC4 = { CreatedOnToolsVersion = 7.0; LastSwiftMigration = 0800; }; 80E059061BA9FA7F0077CBA7 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; F88630551B4EF96200F53969 = { CreatedOnToolsVersion = 6.4; LastSwiftMigration = 0800; }; F886307C1B4EF9F800F53969 = { CreatedOnToolsVersion = 6.4; LastSwiftMigration = 0800; }; }; }; buildConfigurationList = F88630501B4EF96200F53969 /* Build configuration list for PBXProject "Curry" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = F886304C1B4EF96200F53969; productRefGroup = F88630571B4EF96200F53969 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( F88630551B4EF96200F53969 /* Curry-iOS */, F886307C1B4EF9F800F53969 /* Curry-Mac */, 804D01F21BA3684C0005BBC4 /* Curry-watchOS */, 80E059061BA9FA7F0077CBA7 /* Curry-tvOS */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 804D01F11BA3684C0005BBC4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 80E059051BA9FA7F0077CBA7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F88630541B4EF96200F53969 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F886307B1B4EF9F800F53969 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 804D01EE1BA3684C0005BBC4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 804D01FB1BA3687E0005BBC4 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 80E059021BA9FA7F0077CBA7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 80E0590F1BA9FAC10077CBA7 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F88630511B4EF96200F53969 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F886309A1B4EFD7600F53969 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F88630781B4EF9F800F53969 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F886309B1B4EFD7600F53969 /* Curry.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 804D01F81BA3684C0005BBC4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; 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; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; 804D01F91BA3684C0005BBC4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = watchos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; 80E0590C1BA9FA7F0077CBA7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; 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; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 80E0590D1BA9FA7F0077CBA7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; F886306A1B4EF96200F53969 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; F886306B1B4EF96200F53969 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; F886306D1B4EF96200F53969 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; F886306E1B4EF96200F53969 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; F88630911B4EF9F800F53969 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = dwarf; 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 = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = macosx; SKIP_INSTALL = YES; }; name = Debug; }; F88630921B4EF9F800F53969 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "com.thoughtbot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Curry; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 804D01FA1BA3684C0005BBC4 /* Build configuration list for PBXNativeTarget "Curry-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 804D01F81BA3684C0005BBC4 /* Debug */, 804D01F91BA3684C0005BBC4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 80E0590E1BA9FA7F0077CBA7 /* Build configuration list for PBXNativeTarget "Curry-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 80E0590C1BA9FA7F0077CBA7 /* Debug */, 80E0590D1BA9FA7F0077CBA7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F88630501B4EF96200F53969 /* Build configuration list for PBXProject "Curry" */ = { isa = XCConfigurationList; buildConfigurations = ( F886306A1B4EF96200F53969 /* Debug */, F886306B1B4EF96200F53969 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F886306C1B4EF96200F53969 /* Build configuration list for PBXNativeTarget "Curry-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( F886306D1B4EF96200F53969 /* Debug */, F886306E1B4EF96200F53969 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F88630901B4EF9F800F53969 /* Build configuration list for PBXNativeTarget "Curry-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( F88630911B4EF9F800F53969 /* Debug */, F88630921B4EF9F800F53969 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = F886304D1B4EF96200F53969 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Curry/Curry.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Curry/Curry.xcodeproj/xcshareddata/xcschemes/Curry-watchOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Curry/LICENSE ================================================ Copyright (c) 2014 thoughtbot, inc. MIT License 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: Carthage/Checkouts/Curry/Package.swift ================================================ import PackageDescription let package = Package( name: "Curry" ) ================================================ FILE: Carthage/Checkouts/Curry/README.md ================================================ [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) # Curry # Swift implementations for function currying. For more info on function currying in Swift, please refer to [this blog post][tb-curry] [tb-curry]: https://robots.thoughtbot.com/introduction-to-function-currying-in-swift ## Installation ## ### [Carthage] ### [Carthage]: https://github.com/Carthage/Carthage ``` github "thoughtbot/Curry" ``` Then run `carthage update`. Follow the current instructions in [Carthage's README][carthage-installation] for up to date installation instructions. [carthage-installation]: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application ### [CocoaPods] ### [CocoaPods]: http://cocoapods.org Add the following to your [Podfile](http://guides.cocoapods.org/using/the-podfile.html): ```ruby pod 'Curry' ``` You will also need to make sure you're opting into using frameworks: ```ruby use_frameworks! ``` Then run `pod install` with CocoaPods 0.36 or newer. Contributing ------------ See the [CONTRIBUTING] document. Thank you, [contributors]! [CONTRIBUTING]: CONTRIBUTING.md [contributors]: https://github.com/thoughtbot/Curry/graphs/contributors License ------- Curry is Copyright (c) 2015 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the [LICENSE] file. [LICENSE]: /LICENSE About ----- ![thoughtbot](https://thoughtbot.com/logo.png) Curry is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc. We love open source software! See [our other projects][community] or look at our product [case studies] and [hire us][hire] to help build your iOS app. [community]: https://thoughtbot.com/community?utm_source=github [case studies]: https://thoughtbot.com/ios?utm_source=github [hire]: https://thoughtbot.com/hire-us?utm_source=github ================================================ FILE: Carthage/Checkouts/Curry/Resources/Curry.h ================================================ // // Curry.h // Curry // // Created by Gordon Fontenot on 7/9/15. // Copyright (c) 2015 thoughtbot. All rights reserved. // #import //! Project version number for Curry. FOUNDATION_EXPORT double CurryVersionNumber; //! Project version string for Curry. FOUNDATION_EXPORT const unsigned char CurryVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import ================================================ FILE: Carthage/Checkouts/Curry/Resources/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 2.3.3 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Curry/Source/Curry.swift ================================================ public func curry(_ function: (A) -> B) -> (A) -> B { return { (`a`: A) -> B in function(`a`) } } public func curry(_ function: (A, B) -> C) -> (A) -> (B) -> C { return { (`a`: A) -> (B) -> C in { (`b`: B) -> C in function(`a`, `b`) } } } public func curry(_ function: (A, B, C) -> D) -> (A) -> (B) -> (C) -> D { return { (`a`: A) -> (B) -> (C) -> D in { (`b`: B) -> (C) -> D in { (`c`: C) -> D in function(`a`, `b`, `c`) } } } } public func curry(_ function: (A, B, C, D) -> E) -> (A) -> (B) -> (C) -> (D) -> E { return { (`a`: A) -> (B) -> (C) -> (D) -> E in { (`b`: B) -> (C) -> (D) -> E in { (`c`: C) -> (D) -> E in { (`d`: D) -> E in function(`a`, `b`, `c`, `d`) } } } } } public func curry(_ function: (A, B, C, D, E) -> F) -> (A) -> (B) -> (C) -> (D) -> (E) -> F { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> F in { (`b`: B) -> (C) -> (D) -> (E) -> F in { (`c`: C) -> (D) -> (E) -> F in { (`d`: D) -> (E) -> F in { (`e`: E) -> F in function(`a`, `b`, `c`, `d`, `e`) } } } } } } public func curry(_ function: (A, B, C, D, E, F) -> G) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> G { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> G in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> G in { (`c`: C) -> (D) -> (E) -> (F) -> G in { (`d`: D) -> (E) -> (F) -> G in { (`e`: E) -> (F) -> G in { (`f`: F) -> G in function(`a`, `b`, `c`, `d`, `e`, `f`) } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G) -> H) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> H { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> H in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> H in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> H in { (`d`: D) -> (E) -> (F) -> (G) -> H in { (`e`: E) -> (F) -> (G) -> H in { (`f`: F) -> (G) -> H in { (`g`: G) -> H in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`) } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H) -> I) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> I in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> I in { (`e`: E) -> (F) -> (G) -> (H) -> I in { (`f`: F) -> (G) -> (H) -> I in { (`g`: G) -> (H) -> I in { (`h`: H) -> I in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`) } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I) -> J) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> J in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> J in { (`f`: F) -> (G) -> (H) -> (I) -> J in { (`g`: G) -> (H) -> (I) -> J in { (`h`: H) -> (I) -> J in { (`i`: I) -> J in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`) } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J) -> K) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> K in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> K in { (`g`: G) -> (H) -> (I) -> (J) -> K in { (`h`: H) -> (I) -> (J) -> K in { (`i`: I) -> (J) -> K in { (`j`: J) -> K in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`) } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K) -> L) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> L in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> L in { (`h`: H) -> (I) -> (J) -> (K) -> L in { (`i`: I) -> (J) -> (K) -> L in { (`j`: J) -> (K) -> L in { (`k`: K) -> L in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`) } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L) -> M) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> M in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> M in { (`i`: I) -> (J) -> (K) -> (L) -> M in { (`j`: J) -> (K) -> (L) -> M in { (`k`: K) -> (L) -> M in { (`l`: L) -> M in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`) } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M) -> N) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> N in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> N in { (`j`: J) -> (K) -> (L) -> (M) -> N in { (`k`: K) -> (L) -> (M) -> N in { (`l`: L) -> (M) -> N in { (`m`: M) -> N in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`) } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> O) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> O in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> O in { (`k`: K) -> (L) -> (M) -> (N) -> O in { (`l`: L) -> (M) -> (N) -> O in { (`m`: M) -> (N) -> O in { (`n`: N) -> O in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`) } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> P) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> P in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> P in { (`l`: L) -> (M) -> (N) -> (O) -> P in { (`m`: M) -> (N) -> (O) -> P in { (`n`: N) -> (O) -> P in { (`o`: O) -> P in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`) } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> Q) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> Q in { (`m`: M) -> (N) -> (O) -> (P) -> Q in { (`n`: N) -> (O) -> (P) -> Q in { (`o`: O) -> (P) -> Q in { (`p`: P) -> Q in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`) } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> R) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> R in { (`n`: N) -> (O) -> (P) -> (Q) -> R in { (`o`: O) -> (P) -> (Q) -> R in { (`p`: P) -> (Q) -> R in { (`q`: Q) -> R in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`) } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) -> S) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> S in { (`o`: O) -> (P) -> (Q) -> (R) -> S in { (`p`: P) -> (Q) -> (R) -> S in { (`q`: Q) -> (R) -> S in { (`r`: R) -> S in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`) } } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) -> T) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`o`: O) -> (P) -> (Q) -> (R) -> (S) -> T in { (`p`: P) -> (Q) -> (R) -> (S) -> T in { (`q`: Q) -> (R) -> (S) -> T in { (`r`: R) -> (S) -> T in { (`s`: S) -> T in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`) } } } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) -> U) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`o`: O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`p`: P) -> (Q) -> (R) -> (S) -> (T) -> U in { (`q`: Q) -> (R) -> (S) -> (T) -> U in { (`r`: R) -> (S) -> (T) -> U in { (`s`: S) -> (T) -> U in { (`t`: T) -> U in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`) } } } } } } } } } } } } } } } } } } } } } public func curry(_ function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) -> V) -> (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V { return { (`a`: A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`b`: B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`c`: C) -> (D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`d`: D) -> (E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`e`: E) -> (F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`f`: F) -> (G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`g`: G) -> (H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`h`: H) -> (I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`i`: I) -> (J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`j`: J) -> (K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`k`: K) -> (L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`l`: L) -> (M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`m`: M) -> (N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`n`: N) -> (O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`o`: O) -> (P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`p`: P) -> (Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`q`: Q) -> (R) -> (S) -> (T) -> (U) -> V in { (`r`: R) -> (S) -> (T) -> (U) -> V in { (`s`: S) -> (T) -> (U) -> V in { (`t`: T) -> (U) -> V in { (`u`: U) -> V in function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`, `u`) } } } } } } } } } } } } } } } } } } } } } } ================================================ FILE: Carthage/Checkouts/Curry/bin/generate ================================================ #!/usr/bin/env xcrun swift // Generates a Swift file with implementation of function currying for a ridicolously high number of arguments import Foundation let generics = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] extension Array { subscript(safe index: Int) -> Element? { return indices ~= index ? self[index] : .none } } func genericType(for position: Int) -> String { let max = generics.count switch position { case _ where position < max: return generics[position % max] default: return generics[position / max - 1] + generics[position % max] } } func commaConcat(_ xs: [String]) -> String { return xs.joined(separator: ", ") } func singleParameterFunctions(_ xs: [String]) -> String { guard let first = xs.first else { fatalError("Attempted to nest functions with no arguments") } guard xs.last != first else { return first } let remainder = Array(xs.dropFirst()) return "(\(first)) -> \(singleParameterFunctions(remainder))" } func curryDefinitionGenerator(arguments: Int) -> String { let genericParameters = (0.." let inputParameters = Array(genericParameters[0.. (B) -> (C) -> D" let innerFunctionArguments = commaConcat(lowerFunctionArguments) // "`a`, `b`, `c`" let functionDefinition = "function(\(innerFunctionArguments))" // function(`a`, `b`, `c`) let implementation = lowerFunctionArguments.enumerated().reversed().reduce(functionDefinition) { accum, tuple in let (index, argument) = tuple let functionParameters = Array(genericParameters.suffix(from: index + 1)) return "{ (\(argument): \(inputParameters[index])) -> \(singleParameterFunctions(functionParameters)) in \(accum) }" } // "{ (`a`: A) -> (B) -> (C) -> D in { (`b`: B) -> (C) -> D in { (`c`: C) -> D in function(`a`, `b`, `c`) } } }" let curry = [ "public func curry\(genericTypeDefinition)(_ function: \(functionArguments) -> \(returnType)) -> \(returnFunction) {", " return \(implementation)", "}" ] return curry.joined(separator: "\n") } print("Generating 💬") let input = Process.arguments[safe: 1] ?? "20" let limit = Int(input)! let start = 2 let curries = (start...limit+1).map { curryDefinitionGenerator(arguments: $0) } let output = curries.joined(separator: "\n\n") + "\n" let outputPath = "Source/Curry.swift" let currentPath = NSURL(fileURLWithPath: FileManager.default().currentDirectoryPath) let currySwiftPath = currentPath.appendingPathComponent(outputPath)! do { try output.write(to: currySwiftPath, atomically: true, encoding: String.Encoding.utf8) } catch let e as NSError { print("An error occurred while saving the generated functions. Error: \(e)") } print("Done, curry functions files written at \(outputPath) 👍") ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/.gitignore ================================================ # Xcode .DS_Store build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata profile *.moved-aside DerivedData .idea/ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/DZNEmptyDataSet.podspec ================================================ @version = "1.8" Pod::Spec.new do |s| s.name = "DZNEmptyDataSet" s.version = @version s.summary = "A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display." s.description = "It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. The -reloadData call will be observed so the empty dataset will be configured whenever needed." s.homepage = "https://github.com/dzenbot/DZNEmptyDataSet" s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { "dzenbot" => "iromero@dzen.cl" } s.platform = :ios, '6.0' s.source = { :git => "https://github.com/dzenbot/DZNEmptyDataSet.git", :tag => "v#{s.version}" } s.source_files = 'Classes', 'Source/**/*.{h,m}' s.requires_arc = true s.framework = "UIKit" end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/AppDelegate.h ================================================ // // AppDelegate.h // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/AppDelegate.m ================================================ // // AppDelegate.m // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "AppDelegate.h" #import "MainViewController.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window.backgroundColor = [UIColor whiteColor]; return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Application.h ================================================ // // Application.h // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import typedef NS_ENUM(NSUInteger, ApplicationType) { ApplicationTypeUndefined = 0, ApplicationType500px = 1, ApplicationTypeAirbnb, ApplicationTypeAppstore, ApplicationTypeCamera, ApplicationTypeDropbox, ApplicationTypeFacebook, ApplicationTypeFancy, ApplicationTypeFoursquare, ApplicationTypeiCloud, ApplicationTypeInstagram, ApplicationTypeiTunesConnect, ApplicationTypeKickstarter, ApplicationTypePath, ApplicationTypePinterest, ApplicationTypePhotos, ApplicationTypePodcasts, ApplicationTypeRemote, ApplicationTypeSafari, ApplicationTypeSkype, ApplicationTypeSlack, ApplicationTypeTumblr, ApplicationTypeTwitter, ApplicationTypeVideos, ApplicationTypeVesper, ApplicationTypeVine, ApplicationTypeWhatsapp, ApplicationTypeWWDC, ApplicationCount // Used for count (27) }; @interface Application : NSObject @property (nonatomic, strong) NSString *displayName; @property (nonatomic, strong) NSString *developerName; @property (nonatomic, strong) NSString *identifier; @property (nonatomic, strong) NSString *iconName; @property (nonatomic) ApplicationType type; - (instancetype)initWithDictionary:(NSDictionary *)dict; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Application.m ================================================ // // Application.m // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "Application.h" @implementation Application - (instancetype)initWithDictionary:(NSDictionary *)dict { if (!dict) { return nil; } self = [super init]; if (self) { self.displayName = [dict objectForKey:@"display_name"]; self.developerName = [dict objectForKey:@"developer_name"]; self.identifier = [dict objectForKey:@"identifier"]; } return self; } - (void)setDisplayName:(NSString *)displayName { _displayName = displayName; self.iconName = [[[NSString stringWithFormat:@"icon_%@", self.displayName] lowercaseString] stringByReplacingOccurrencesOfString:@" " withString:@"_"]; self.type = applicationTypeFromString(self.displayName) + 1; } ApplicationType applicationTypeFromString(NSString *string) { NSArray *arr = @[ @"500px", @"Airbnb", @"AppStore", @"Camera", @"Dropbox", @"Facebook", @"Fancy", @"Foursquare", @"iCloud", @"Instagram", @"iTunes Connect", @"Kickstarter", @"Path", @"Pinterest", @"Photos", @"Podcasts", @"Remote", @"Safari", @"Skype", @"Slack", @"Tumblr", @"Twitter", @"Videos", @"Vesper", @"Vine", @"WhatsApp", @"WWDC" ]; return (ApplicationType)[arr indexOfObject:string]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Applications-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIcons CFBundleIcons~ipad CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS UIAppFonts IdealSans-Book-Pro.otf Lato-Regular.ttf UIMainStoryboardFile Storyboard UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Applications-Prefix.pch ================================================ // // Prefix header // // The contents of this file are implicitly included at the beginning of every source file. // #import #ifndef __IPHONE_5_0 #warning "This project uses features only available in iOS SDK 5.0 and later." #endif #ifdef __OBJC__ #import #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/DetailViewController.h ================================================ // // DetailViewController.h // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "Application.h" @interface DetailViewController : UITableViewController @property (nonatomic, weak) NSArray *applications; @property (nonatomic) BOOL allowShuffling; - (instancetype)initWithApplication:(Application *)app; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/DetailViewController.m ================================================ // // DetailViewController.m // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "DetailViewController.h" #import "UIColor+Hexadecimal.h" #import "UIScrollView+EmptyDataSet.h" @interface DetailViewController () @property (nonatomic, strong) Application *application; @property (nonatomic, getter=isLoading) BOOL loading; @end @implementation DetailViewController - (instancetype)initWithApplication:(Application *)application { self = [super initWithStyle:UITableViewStylePlain]; if (self) { self.application = application; self.title = application.displayName; } return self; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; self.edgesForExtendedLayout = UIRectEdgeNone; self.tableView.emptyDataSetSource = self; self.tableView.emptyDataSetDelegate = self; [self configureHeaderAndFooter]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self configureNavigationBar]; } #pragma mark - Configuration and Event Methods - (void)configureNavigationBar { UIColor *barColor = nil; UIColor *tintColor = nil; UIStatusBarStyle barstyle = UIStatusBarStyleDefault; self.navigationController.navigationBar.titleTextAttributes = nil; switch (self.application.type) { case ApplicationType500px: { barColor = [UIColor colorWithHex:@"242424"]; tintColor = [UIColor colorWithHex:@"d7d7d7"]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeAirbnb: { barColor = [UIColor colorWithHex:@"f8f8f8"]; tintColor = [UIColor colorWithHex:@"08aeff"]; break; } case ApplicationTypeCamera: { barColor = [UIColor colorWithHex:@"595959"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: tintColor}; break; } case ApplicationTypeDropbox: { barColor = [UIColor whiteColor]; tintColor = [UIColor colorWithHex:@"007ee5"]; break; } case ApplicationTypeFacebook: { barColor = [UIColor colorWithHex:@"506da8"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeFancy: { barColor = [UIColor colorWithHex:@"353b49"]; tintColor = [UIColor colorWithHex:@"c4c7cb"]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeFoursquare: { barColor = [UIColor colorWithHex:@"00aeef"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeInstagram: { barColor = [UIColor colorWithHex:@"2e5e86"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeKickstarter: { barColor = [UIColor colorWithHex:@"f7f8f8"]; tintColor = [UIColor colorWithHex:@"2bde73"]; break; } case ApplicationTypePath: { barColor = [UIColor colorWithHex:@"544f49"]; tintColor = [UIColor colorWithHex:@"fffff2"]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypePinterest: { barColor = [UIColor colorWithHex:@"f4f4f4"]; tintColor = [UIColor colorWithHex:@"cb2027"]; break; } case ApplicationTypeSlack: { barColor = [UIColor colorWithHex:@"f4f5f6"]; tintColor = [UIColor colorWithHex:@"3eba92"]; break; } case ApplicationTypeSkype: { barColor = [UIColor colorWithHex:@"00aff0"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeTumblr: { barColor = [UIColor colorWithHex:@"2e3e53"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeTwitter: { barColor = [UIColor colorWithHex:@"58aef0"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeVesper: { barColor = [UIColor colorWithHex:@"5e7d9a"]; tintColor = [UIColor colorWithHex:@"f8f8f8"]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeVideos: { barColor = [UIColor colorWithHex:@"4a4b4d"]; tintColor = [UIColor blackColor]; break; } case ApplicationTypeVine: { barColor = [UIColor colorWithHex:@"00bf8f"]; tintColor = [UIColor whiteColor]; barstyle = UIStatusBarStyleLightContent; break; } case ApplicationTypeWWDC: { tintColor = [UIColor colorWithHex:@"fc6246"]; break; } default: barColor = [UIColor colorWithHex:@"f8f8f8"]; tintColor = [UIApplication sharedApplication].keyWindow.tintColor; break; } UIImage *logo = [UIImage imageNamed:[NSString stringWithFormat:@"logo_%@", [self.application.displayName lowercaseString]]]; if (logo) { self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo]; } else { self.navigationItem.titleView = nil; self.navigationItem.title = self.application.displayName; } self.navigationController.navigationBar.barTintColor = barColor; self.navigationController.navigationBar.tintColor = tintColor; [[UIApplication sharedApplication] setStatusBarStyle:barstyle animated:YES]; } - (void)configureHeaderAndFooter { NSString *imageName = nil; if (self.application.type == ApplicationTypePinterest) { imageName = @"header_pinterest"; } if (self.application.type == ApplicationTypePodcasts) { imageName = @"header_podcasts"; } if (imageName) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; imageView.userInteractionEnabled = YES; UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapHeaderView:)]; [imageView addGestureRecognizer:tapGesture]; self.tableView.tableHeaderView = imageView; } else { self.tableView.tableHeaderView = [UIView new]; } self.tableView.tableFooterView = [UIView new]; } - (void)setAllowShuffling:(BOOL)allow { _allowShuffling = allow; UIBarButtonItem *rightItem = nil; if (allow) { rightItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(shuffle:)]; } self.navigationItem.rightBarButtonItem = rightItem; } - (void)didTapHeaderView:(id)sender { NSLog(@"%s",__FUNCTION__); } - (void)shuffle:(id)sender { Application *randomApp = [self randomApplication]; while ([randomApp.identifier isEqualToString:self.application.identifier] || randomApp.type == ApplicationTypeUndefined) { randomApp = [self randomApplication]; } self.application = randomApp; [self configureHeaderAndFooter]; [self configureNavigationBar]; [self.tableView reloadEmptyDataSet]; } - (Application *)randomApplication { ApplicationType randomType = arc4random() % ApplicationCount; NSPredicate *query = [NSPredicate predicateWithFormat:@"type == %d", randomType]; return [[self.applications filteredArrayUsingPredicate:query] firstObject]; } - (void)setLoading:(BOOL)loading { if (self.isLoading == loading) { return; } _loading = loading; [self.tableView reloadEmptyDataSet]; } #pragma mark - UITableViewDataSource Methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell; } #pragma mark - DZNEmptyDataSetSource Methods - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = nil; UIFont *font = nil; UIColor *textColor = nil; NSMutableDictionary *attributes = [NSMutableDictionary new]; switch (self.application.type) { case ApplicationType500px: { text = @"No Photos"; font = [UIFont boldSystemFontOfSize:17.0]; textColor = [UIColor colorWithHex:@"545454"]; break; } case ApplicationTypeAirbnb: { text = @"No Messages"; font = [UIFont fontWithName:@"HelveticaNeue-Light" size:22.0]; textColor = [UIColor colorWithHex:@"c9c9c9"]; break; } case ApplicationTypeCamera: { text = @"Please Allow Photo Access"; font = [UIFont boldSystemFontOfSize:18.0]; textColor = [UIColor colorWithHex:@"5f6978"]; break; } case ApplicationTypeDropbox: { text = @"Star Your Favorite Files"; font = [UIFont boldSystemFontOfSize:17.0]; textColor = [UIColor colorWithHex:@"25282b"]; break; } case ApplicationTypeFacebook: { text = @"No friends to show."; font = [UIFont boldSystemFontOfSize:22.0]; textColor = [UIColor colorWithHex:@"acafbd"]; NSShadow *shadow = [NSShadow new]; shadow.shadowColor = [UIColor whiteColor]; shadow.shadowOffset = CGSizeMake(0.0, 1.0); [attributes setObject:shadow forKey:NSShadowAttributeName]; break; } case ApplicationTypeFancy: { text = @"No Owns yet"; font = [UIFont boldSystemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"494c53"]; break; } case ApplicationTypeiCloud: { text = @"iCloud Photo Sharing"; break; } case ApplicationTypeInstagram: { text = @"Instagram Direct"; font = [UIFont fontWithName:@"HelveticaNeue-Light" size:26.0]; textColor = [UIColor colorWithHex:@"444444"]; break; } case ApplicationTypeiTunesConnect: { text = @"No Favorites"; font = [UIFont systemFontOfSize:22.0]; break; } case ApplicationTypeKickstarter: { text = @"Activity empty"; font = [UIFont boldSystemFontOfSize:16.0]; textColor = [UIColor colorWithHex:@"828587"]; [attributes setObject:@(-0.10) forKey:NSKernAttributeName]; break; } case ApplicationTypePath: { text = @"Message Your Friends"; font = [UIFont boldSystemFontOfSize:14.0]; textColor = [UIColor whiteColor]; break; } case ApplicationTypePinterest: { text = @"No boards to display"; font = [UIFont boldSystemFontOfSize:18.0]; textColor = [UIColor colorWithHex:@"666666"]; break; } case ApplicationTypePhotos: { text = @"No Photos or Videos"; break; } case ApplicationTypePodcasts: { text = @"No Podcasts"; break; } case ApplicationTypeRemote: { text = @"Cannot Connect to a Local Network"; font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:18.0]; textColor = [UIColor colorWithHex:@"555555"]; break; } case ApplicationTypeTumblr: { text = @"This is your Dashboard."; font = [UIFont boldSystemFontOfSize:18.0]; textColor = [UIColor colorWithHex:@"aab6c4"]; break; } case ApplicationTypeTwitter: { text = @"No lists"; font = [UIFont boldSystemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"292f33"]; break; } case ApplicationTypeVesper: { text = @"No Notes"; font = [UIFont fontWithName:@"IdealSans-Book-Pro" size:16.0]; textColor = [UIColor colorWithHex:@"d9dce1"]; break; } case ApplicationTypeVideos: { text = @"AirPlay"; font = [UIFont systemFontOfSize:17.0]; textColor = [UIColor colorWithHex:@"414141"]; break; } case ApplicationTypeVine: { text = @"Welcome to VMs"; font = [UIFont boldSystemFontOfSize:22.0]; textColor = [UIColor colorWithHex:@"595959"]; [attributes setObject:@(0.45) forKey:NSKernAttributeName]; break; } case ApplicationTypeWhatsapp: { text = @"No Media"; font = [UIFont systemFontOfSize:20.0]; textColor = [UIColor colorWithHex:@"808080"]; break; } case ApplicationTypeWWDC: { text = @"No Favorites"; font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:16.0]; textColor = [UIColor colorWithHex:@"b9b9b9"]; break; } default: return nil; } if (!text) { return nil; } if (font) [attributes setObject:font forKey:NSFontAttributeName]; if (textColor) [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = nil; UIFont *font = nil; UIColor *textColor = nil; NSMutableDictionary *attributes = [NSMutableDictionary new]; NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new]; paragraph.lineBreakMode = NSLineBreakByWordWrapping; paragraph.alignment = NSTextAlignmentCenter; switch (self.application.type) { case ApplicationType500px: { text = @"Get started by uploading a photo."; font = [UIFont boldSystemFontOfSize:15.0]; textColor = [UIColor colorWithHex:@"545454"]; break; } case ApplicationTypeAirbnb: { text = @"When you have messages, you’ll see them here."; font = [UIFont systemFontOfSize:13.0]; textColor = [UIColor colorWithHex:@"cfcfcf"]; paragraph.lineSpacing = 4.0; break; } case ApplicationTypeAppstore: { text = @"There are no results for “wwdc2014”."; font = [UIFont systemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"333333"]; break; } case ApplicationTypeCamera: { text = @"This allows you to share photos from your library and save photos to your camera roll."; font = [UIFont systemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"5f6978"]; break; } case ApplicationTypeDropbox: { text = @"Favorites are saved for offline access."; font = [UIFont systemFontOfSize:14.5]; textColor = [UIColor colorWithHex:@"7b8994"]; break; } case ApplicationTypeFancy: { text = @"Tap Add to List and add things to Owns"; font = [UIFont systemFontOfSize:13.0]; textColor = [UIColor colorWithHex:@"7a7d83"]; break; } case ApplicationTypeFoursquare: { text = @"Nobody has liked or commented on your check-ins yet."; font = [UIFont boldSystemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"cecbc6"]; break; } case ApplicationTypeiCloud: { text = @"Share photos and videos with just the people you choose, and let them add photos, videos, and comments."; paragraph.lineSpacing = 2.0; break; } case ApplicationTypeInstagram: { text = @"Send photos and videos directly to your friends. Only the people you send to can see these posts."; font = [UIFont systemFontOfSize:16.0]; textColor = [UIColor colorWithHex:@"444444"]; paragraph.lineSpacing = 4.0; break; } case ApplicationTypeiTunesConnect: { text = @"To add a favorite, tap the star icon next to an App's name."; font = [UIFont systemFontOfSize:14.0]; break; } case ApplicationTypeKickstarter: { text = @"When you back a project or follow a friend, their activity will show up here."; font = [UIFont systemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"828587"]; break; } case ApplicationTypePath: { text = @"Send a message or create a group."; font = [UIFont systemFontOfSize:14.0]; textColor = [UIColor colorWithHex:@"a6978d"]; break; } case ApplicationTypePhotos: { text = @"You can sync photos and videos onto your iPhone using iTunes."; break; } case ApplicationTypePodcasts: { text = @"You can subscribe to podcasts in Top Charts or Featured."; break; } case ApplicationTypeRemote: { text = @"You must connect to a Wi-Fi network to control iTunes or Apple TV"; font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:11.75]; textColor = [UIColor colorWithHex:@"555555"]; break; } case ApplicationTypeSafari: { text = @"Safari cannot open the page because your iPhone is not connected to the Internet."; textColor = [UIColor colorWithHex:@"7d7f7f"]; paragraph.lineSpacing = 2.0; break; } case ApplicationTypeSkype: { text = @"Keep all your favorite people together, add favorites."; font = [UIFont fontWithName:@"HelveticaNeue-Light" size:17.75]; textColor = [UIColor colorWithHex:@"a6c3d1"]; paragraph.lineSpacing = 3.0; break; } case ApplicationTypeSlack: { text = @"You don't have any recent mentions"; font = [UIFont fontWithName:@"Lato-Regular" size:19.0]; textColor = [UIColor colorWithHex:@"d7d7d7"]; break; } case ApplicationTypeTumblr: { text = @"When you follow some blogs, their latest posts will show up here!"; font = [UIFont systemFontOfSize:17.0]; textColor = [UIColor colorWithHex:@"828e9c"]; break; } case ApplicationTypeTwitter: { text = @"You aren’t subscribed to any lists yet."; font = [UIFont systemFontOfSize:12.0]; textColor = [UIColor colorWithHex:@"8899a6"]; break; } case ApplicationTypeVideos: { text = @"This video is playing on “Apple TV”."; font = [UIFont systemFontOfSize:12.0]; textColor = [UIColor colorWithHex:@"737373"]; break; } case ApplicationTypeVine: { text = @"This is where your private conversations will live"; font = [UIFont systemFontOfSize:17.0]; textColor = [UIColor colorWithHex:@"a6a6a6"]; break; } case ApplicationTypeWhatsapp: { text = @"You can exchange media with Ignacio by tapping on the Arrow Up icon in the conversation screen."; font = [UIFont systemFontOfSize:15.0]; textColor = [UIColor colorWithHex:@"989898"]; break; } case ApplicationTypeWWDC: { text = @"Favorites are only available to Registered Apple Developers."; font = [UIFont systemFontOfSize:16.0]; textColor = [UIColor colorWithHex:@"b9b9b9"]; break; } default: return nil; } if (!text) { return nil; } if (font) [attributes setObject:font forKey:NSFontAttributeName]; if (textColor) [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; if (paragraph) [attributes setObject:paragraph forKey:NSParagraphStyleAttributeName]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; switch (self.application.type) { case ApplicationTypeSkype: [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithHex:@"00adf1"] range:[attributedString.string rangeOfString:@"add favorites"]]; break; default: break; } return attributedString; } - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { if (self.isLoading) { return [UIImage imageNamed:@"loading_imgBlue_78x78"]; } else { NSString *imageName = [[[NSString stringWithFormat:@"placeholder_%@", self.application.displayName] lowercaseString] stringByReplacingOccurrencesOfString:@" " withString:@"_"]; return [UIImage imageNamed:imageName]; } } - (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView { CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"]; animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; animation.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI_2, 0.0, 0.0, 1.0) ]; animation.duration = 0.25; animation.cumulative = YES; animation.repeatCount = MAXFLOAT; return animation; } - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { NSString *text = nil; UIFont *font = nil; UIColor *textColor = nil; switch (self.application.type) { case ApplicationTypeAirbnb: { text = @"Start Browsing"; font = [UIFont boldSystemFontOfSize:16.0]; textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"05adff" : @"6bceff"]; break; } case ApplicationTypeCamera: { text = @"Continue"; font = [UIFont boldSystemFontOfSize:17.0]; textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"007ee5" : @"48a1ea"]; break; } case ApplicationTypeDropbox: { text = @"Learn more"; font = [UIFont systemFontOfSize:15.0]; textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"007ee5" : @"48a1ea"]; break; } case ApplicationTypeFoursquare: { text = @"Add friends to get started!"; font = [UIFont boldSystemFontOfSize:14.0]; textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"00aeef" : @"ffffff"]; break; } case ApplicationTypeiCloud: { text = @"Create New Stream"; font = [UIFont systemFontOfSize:14.0]; textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"999999" : @"ebebeb"]; break; } case ApplicationTypeKickstarter: { text = @"Discover projects"; font = [UIFont boldSystemFontOfSize:14.0]; textColor = [UIColor whiteColor]; break; } case ApplicationTypeWWDC: { text = @"Sign In"; font = [UIFont systemFontOfSize:16.0]; textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"fc6246" : @"fdbbb2"]; break; } default: return nil; } if (!text) { return nil; } NSMutableDictionary *attributes = [NSMutableDictionary new]; if (font) [attributes setObject:font forKey:NSFontAttributeName]; if (textColor) [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } - (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { NSString *imageName = [[NSString stringWithFormat:@"button_background_%@", self.application.displayName] lowercaseString]; if (state == UIControlStateNormal) imageName = [imageName stringByAppendingString:@"_normal"]; if (state == UIControlStateHighlighted) imageName = [imageName stringByAppendingString:@"_highlight"]; UIEdgeInsets capInsets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0); UIEdgeInsets rectInsets = UIEdgeInsetsZero; switch (self.application.type) { case ApplicationTypeFoursquare: capInsets = UIEdgeInsetsMake(25.0, 25.0, 25.0, 25.0); rectInsets = UIEdgeInsetsMake(0.0, 10, 0.0, 10); break; case ApplicationTypeiCloud: rectInsets = UIEdgeInsetsMake(-19.0, -61.0, -19.0, -61.0); break; case ApplicationTypeKickstarter: capInsets = UIEdgeInsetsMake(22.0, 22.0, 22.0, 22.0); rectInsets = UIEdgeInsetsMake(0.0, -20, 0.0, -20); break; default: break; } return [[[UIImage imageNamed:imageName] resizableImageWithCapInsets:capInsets resizingMode:UIImageResizingModeStretch] imageWithAlignmentRectInsets:rectInsets]; } - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { switch (self.application.type) { case ApplicationType500px: return [UIColor blackColor]; case ApplicationTypeAirbnb: return [UIColor whiteColor]; case ApplicationTypeDropbox: return [UIColor colorWithHex:@"f0f3f5"]; case ApplicationTypeFacebook: return [UIColor colorWithHex:@"eceef7"]; case ApplicationTypeFancy: return [UIColor colorWithHex:@"f0f0f0"]; case ApplicationTypeFoursquare: return [UIColor colorWithHex:@"fcfcfa"]; case ApplicationTypeInstagram: return [UIColor whiteColor]; case ApplicationTypeKickstarter:return [UIColor colorWithHex:@"f7fafa"]; case ApplicationTypePath: return [UIColor colorWithHex:@"726d67"]; case ApplicationTypePinterest: return [UIColor colorWithHex:@"e1e1e1"]; case ApplicationTypeSlack: return [UIColor whiteColor]; case ApplicationTypeTumblr: return [UIColor colorWithHex:@"34465c"]; case ApplicationTypeTwitter: return [UIColor colorWithHex:@"f5f8fa"]; case ApplicationTypeVesper: return [UIColor colorWithHex:@"f8f8f8"]; case ApplicationTypeVideos: return [UIColor blackColor]; case ApplicationTypeWhatsapp: return [UIColor colorWithHex:@"f2f2f2"]; default: return nil; } } - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView { if (self.application.type == ApplicationTypeKickstarter) { CGFloat offset = CGRectGetHeight([UIApplication sharedApplication].statusBarFrame); offset += CGRectGetHeight(self.navigationController.navigationBar.frame); return -offset; } if (self.application.type == ApplicationTypeTwitter) { return -roundf(self.tableView.frame.size.height/2.5); } return 0.0; } - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView { switch (self.application.type) { case ApplicationType500px: return 9.0; case ApplicationTypeAirbnb: return 24.0; case ApplicationTypeAppstore: return 34.0; case ApplicationTypeFacebook: return 30.0; case ApplicationTypeFancy: return 1.0; case ApplicationTypeFoursquare: return 9.0; case ApplicationTypeInstagram: return 24.0; case ApplicationTypeiTunesConnect: return 9.0; case ApplicationTypeKickstarter: return 15.0; case ApplicationTypePath: return 1.0; case ApplicationTypePodcasts: return 35.0; case ApplicationTypeTumblr: return 10.0; case ApplicationTypeTwitter: return 0.1; case ApplicationTypeVesper: return 22.0; case ApplicationTypeVideos: return 0.1; case ApplicationTypeVine: return 0.1; case ApplicationTypeWWDC: return 18.0; default: return 0.0; } } #pragma mark - DZNEmptyDataSetDelegate Methods - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView { return self.isLoading; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { self.loading = YES; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.loading = NO; }); } - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { self.loading = YES; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.loading = NO; }); } #pragma mark - View Auto-Rotation - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return NO; } #pragma mark - View Auto-Rotation - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)dealloc { NSLog(@"%s",__FUNCTION__); } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/button_background_foursquare_highlight.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "button_background_foursquare_highlight.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "button_background_foursquare_highlight@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/button_background_foursquare_normal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "button_background_foursquare_normal.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "button_background_foursquare_normal@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/button_background_icloud_highlight.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "button_background_icloud_highlight.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "button_background_icloud_highlight@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/button_background_icloud_normal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "button_background_icloud_normal.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "button_background_icloud_normal@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/button_background_kickstarter_highlight.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "button_background_kickstarter_highlight.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "button_background_kickstarter_highlight@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/button_background_kickstarter_normal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "button_background_kickstarter_normal.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "button_background_kickstarter_normal@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/header_pinterest.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "header_pinterest.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "header_pinterest@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/header_podcasts.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "header_podcasts.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "header_podcasts@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_500px.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_500px.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_500px@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_airbnb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_airbnb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_airbnb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_appstore.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_appstore.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_appstore@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_camera.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_camera.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_camera@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_dropbox.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_dropbox.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_dropbox@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_facebook.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_facebook.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_facebook@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_fancy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_fancy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_fancy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_foursquare.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_foursquare.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_foursquare@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_icloud.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_icloud.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_icloud@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_instagram.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_instagram.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_instagram@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_itunes_connect.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_itunesconnect.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_itunesconnect@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_kickstarter.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_kickstarter.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_kickstarter@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_path.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_path.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_path@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_photos.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_photos.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_photos@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_pinterest.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_pinterest.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_pinterest@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_podcasts.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_podcasts.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_podcasts@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_remote.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_remote.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_remote@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_safari.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_safari.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_safari@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_skype.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_skype.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_skype@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_slack.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_slack.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_slack@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_tumblr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_tumblr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_tumblr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_twitter.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_twitter.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_twitter@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_vesper.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_vesper.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_vesper@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_videos.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_videos.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_videos@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_vine.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_vine.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_vine@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_whatsapp.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_whatsapp.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_whatsapp@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/icon_wwdc.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_wwdc.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_wwdc@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/loading_imgBlue_78x78.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "loading_imgBlue_78x78@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "loading_imgBlue_78x78@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_500px.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_500px.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_500px@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_airbnb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_airbnb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_airbnb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_dropbox.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_dropbox.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_dropbox@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_facebook.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_facebook.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_facebook@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_fancy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_fancy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_fancy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_foursquare.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_foursquare.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_foursquare@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_instagram.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_instagram.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_instagram@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_kickstarter.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_kickstarter.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_kickstarter@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_path.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_path.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_path@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_pinterest.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_pinterest.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_pinterest@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_skype.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_skype.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_skype@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_slack.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_slack.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_slack@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_tumblr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_tumblr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_tumblr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_twitter.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_twitter.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_twitter@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_vesper.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_vesper.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_vesper@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/logo_vine.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "logo_vine.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "logo_vine@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_500px.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_500px.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_500px@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_airbnb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_airbnb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_airbnb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_appstore.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_appstore.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_appstore@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_dropbox.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_dropbox.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_dropbox@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_facebook.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_facebook.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_facebook@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_fancy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_fancy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_fancy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_foursquare.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_foursquare.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_foursquare@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_instagram.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_instagram.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_instagram@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_itunes_connect.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_itunes_connect.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_itunes_connect@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_kickstarter.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_kickstarter.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_kickstarter@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_path.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_path.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_path@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_remote.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_remote.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_remote@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_skype.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_skype.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_skype@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_slack.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_slack.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_slack@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_tumblr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_tumblr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_tumblr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_vesper.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_vesper.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_vesper@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_videos.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_videos.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_videos@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_vine.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_vine.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_vine@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Images.xcassets/placeholder_whatsapp.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "placeholder_whatsapp.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "placeholder_whatsapp@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/MainViewController.h ================================================ // // MainViewController.h // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "DetailViewController.h" #import "Application.h" @interface MainViewController : UITableViewController @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/MainViewController.m ================================================ // // MainViewController.m // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "MainViewController.h" #import "UIColor+Hexadecimal.h" #import "UIScrollView+EmptyDataSet.h" @interface MainViewController () @property (nonatomic, strong) NSMutableArray *applications; @end @implementation MainViewController - (void)awakeFromNib { [super awakeFromNib]; [self serializeApplications]; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Popular Applications"; self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:NULL]; self.tableView.tableFooterView = [UIView new]; self.searchDisplayController.searchResultsTableView.emptyDataSetSource = self; self.searchDisplayController.searchResultsTableView.emptyDataSetDelegate = self; self.searchDisplayController.searchResultsTableView.tableFooterView = [UIView new]; [self.searchDisplayController setValue:@"" forKey:@"noResultsMessage"]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBar.titleTextAttributes = nil; self.navigationController.navigationBar.barTintColor = [UIColor colorWithHex:@"f8f8f8"];; self.navigationController.navigationBar.translucent = NO; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES]; } #pragma mark - Getters - (NSArray *)filteredApps { UISearchBar *searchBar = self.searchDisplayController.searchBar; if ([searchBar isFirstResponder] && searchBar.text.length > 0) { NSPredicate *precidate = [NSPredicate predicateWithFormat:@"displayName CONTAINS[cd] %@", searchBar.text]; return [self.applications filteredArrayUsingPredicate:precidate]; } return self.applications; } #pragma mark - Serialization - (void)serializeApplications { NSString *path = [[NSBundle mainBundle] pathForResource:@"applications" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:path]; NSArray *objects = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions|NSJSONWritingPrettyPrinted error:nil] mutableCopy]; self.applications = [NSMutableArray new]; for (NSDictionary *dictionary in objects) { Application *app = [[Application alloc] initWithDictionary:dictionary]; [self.applications addObject:app]; } } #pragma mark - DZNEmptyDataSetSource Methods - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"No Application Found"; return [[NSAttributedString alloc] initWithString:text attributes:nil]; } - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { UISearchBar *searchBar = self.searchDisplayController.searchBar; NSString *text = [NSString stringWithFormat:@"There are no empty dataset examples for \"%@\".", searchBar.text]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text attributes:nil]; [attributedString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:17.0] range:[attributedString.string rangeOfString:searchBar.text]]; return attributedString; } - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { NSString *text = @"Search on the App Store"; UIFont *font = [UIFont systemFontOfSize:16.0]; UIColor *textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"007aff" : @"c6def9"]; NSMutableDictionary *attributes = [NSMutableDictionary new]; [attributes setObject:font forKey:NSFontAttributeName]; [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor whiteColor]; } - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView { return -64.0; } #pragma mark - DZNEmptyDataSetDelegate Methods - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return YES; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { NSLog(@"%s",__FUNCTION__); } - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { UISearchBar *searchBar = self.searchDisplayController.searchBar; NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.com/apps/%@", searchBar.text]]; if ([[UIApplication sharedApplication] canOpenURL:URL]) { [[UIApplication sharedApplication] openURL:URL]; } } #pragma mark - UITableViewDataSource Methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger rowCount = [self filteredApps].count; return rowCount; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"app_cell_identifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; } Application *app = [[self filteredApps] objectAtIndex:indexPath.row]; cell.textLabel.text = app.displayName; cell.detailTextLabel.text = app.developerName; UIImage *image = [UIImage imageNamed:app.iconName]; cell.imageView.image = image; cell.imageView.layer.cornerRadius = image.size.width*0.2; cell.imageView.layer.masksToBounds = YES; cell.imageView.layer.borderColor = [UIColor colorWithWhite:0.0 alpha:0.2].CGColor; cell.imageView.layer.borderWidth = 0.5; cell.imageView.layer.shouldRasterize = YES; cell.imageView.layer.rasterizationScale = [UIScreen mainScreen].scale; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 70.0; } #pragma mark - UITableViewDelegate Methods - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Application *app = [[self filteredApps] objectAtIndex:indexPath.row]; DetailViewController *controller = [[DetailViewController alloc] initWithApplication:app]; controller.applications = self.applications; controller.allowShuffling = YES; [self.navigationController pushViewController:controller animated:YES]; } #pragma mark - UISearchBarDelegate Methods - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { return YES; } - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { return YES; } - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { // Do something } - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { // Do something } - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { // Do something } - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { // Do something } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { // Do something } #pragma mark - UISearchDisplayDelegate Methods - (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller { // Do something } - (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller { // Do something } - (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { // Do something } - (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView { // Do something } #pragma mark - View Auto-Rotation - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/Storyboard.storyboard ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/System.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "icon-40@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "icon-40@3x.png", "scale" : "3x" }, { "size" : "57x57", "idiom" : "iphone", "filename" : "icon-57.png", "scale" : "1x" }, { "size" : "57x57", "idiom" : "iphone", "filename" : "icon-57@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "icon-60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "icon-60@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "icon-29~ipad.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "icon-29@2x~ipad.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "icon-40~ipad.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "icon-40@2x~ipad.png", "scale" : "2x" }, { "size" : "50x50", "idiom" : "ipad", "filename" : "icon-50~ipad.png", "scale" : "1x" }, { "size" : "50x50", "idiom" : "ipad", "filename" : "icon-50@2x~ipad.png", "scale" : "2x" }, { "size" : "72x72", "idiom" : "ipad", "filename" : "icon-72~ipad.png", "scale" : "1x" }, { "size" : "72x72", "idiom" : "ipad", "filename" : "icon-72@2x~ipad.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "icon-76~ipad.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "icon-76@2x~ipad.png", "scale" : "2x" }, { "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/System.xcassets/LaunchImage.launchimage/Contents.json ================================================ { "images" : [ { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "736h", "filename" : "Default-hd-plus@2x.png", "minimum-system-version" : "8.0", "orientation" : "portrait", "scale" : "3x" }, { "orientation" : "landscape", "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "8.0", "subtype" : "736h", "scale" : "3x" }, { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "667h", "filename" : "Default-hd@2x.png", "minimum-system-version" : "8.0", "orientation" : "portrait", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "filename" : "Default@2x.png", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "retina4", "filename" : "Default-568h@2x.png", "minimum-system-version" : "7.0", "orientation" : "portrait", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "filename" : "Default.png", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "iphone", "filename" : "Default@2x-1.png", "extent" : "full-screen", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "filename" : "Default-568h@2x-1.png", "extent" : "full-screen", "subtype" : "retina4", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/UIColor+Hexadecimal.h ================================================ // // UIColor+Hexadecimal.h // Applications // // Created by Ignacio on 6/7/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import @interface UIColor (Hexadecimal) + (UIColor *)colorWithHex:(NSString *)string; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/UIColor+Hexadecimal.m ================================================ // // UIColor+Hexadecimal.m // Applications // // Created by Ignacio on 6/7/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "UIColor+Hexadecimal.h" @implementation UIColor (Hexadecimal) + (UIColor *)colorWithHex:(NSString *)string { NSString *cleanString = [string stringByReplacingOccurrencesOfString:@"#" withString:@""]; if([cleanString length] == 3) { cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)], [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)], [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]]; } if([cleanString length] == 6) { cleanString = [cleanString stringByAppendingString:@"ff"]; } unsigned int baseValue; [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue]; float red = ((baseValue >> 24) & 0xFF)/255.0f; float green = ((baseValue >> 16) & 0xFF)/255.0f; float blue = ((baseValue >> 8) & 0xFF)/255.0f; return [UIColor colorWithRed:red green:green blue:blue alpha:1.0]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/applications.json ================================================ [ { "display_name": "500px", "developer_name": "500px", "identifier": "471965292" }, { "display_name": "Airbnb", "developer_name": "Airbnb, Inc.", "identifier": "401626263" }, { "display_name": "AppStore", "developer_name": "Apple, Inc.", "identifier": "" }, { "display_name": "Camera", "developer_name": "Apple, Inc.", "identifier": "" }, { "display_name": "Dropbox", "developer_name": "Dropbox, Inc.", "identifier": "327630330" }, { "display_name": "Facebook", "developer_name": "Facebook, Inc.", "identifier": "284882215" }, { "display_name": "Fancy", "developer_name": "Thing Daemon, Inc.", "identifier": "407324335" }, { "display_name": "Foursquare", "developer_name": "Foursquare Labs", "identifier": "306934924" }, { "display_name": "iCloud", "developer_name": "Apple, Inc.", "identifier": "" }, { "display_name": "Instagram", "developer_name": "Instagram, Inc.", "identifier": "389801252" }, { "display_name": "iTunes Connect", "developer_name": "Apple, Inc.", "identifier": "376771144" }, { "display_name": "Kickstarter", "developer_name": "Kickstarter, Inc.", "identifier": "596961532" }, { "display_name": "Path", "developer_name": "Path, Inc.", "identifier": "403639508" }, { "display_name": "Pinterest", "developer_name": "Pinterest, Inc.", "identifier": "429047995" }, { "display_name": "Photos", "developer_name": "Apple, Inc.", "identifier": "" }, { "display_name": "Podcasts", "developer_name": "Apple, Inc.", "identifier": "525463029" }, { "display_name": "Remote", "developer_name": "Apple, Inc.", "identifier": "284417350" }, { "display_name": "Safari", "developer_name": "Apple, Inc.", "identifier": "" }, { "display_name": "Skype", "developer_name": "Skype Communications S.a.r.l", "identifier": "304878510" }, { "display_name": "Slack", "developer_name": "Tiny Speck, Inc.", "identifier": "618783545" }, { "display_name": "Tumblr", "developer_name": "Tumblr, Inc.", "identifier": "305343404" }, { "display_name": "Twitter", "developer_name": "Twitter, Inc.", "identifier": "333903271" }, { "display_name": "Vesper", "developer_name": "Q Branch", "identifier": "655895325" }, { "display_name": "Videos", "developer_name": "Apple, Inc.", "identifier": "" }, { "display_name": "Vine", "developer_name": "Vine Labs, Inc.", "identifier": "592447445" }, { "display_name": "WhatsApp", "developer_name": "WhatsApp, Inc.", "identifier": "310633997" }, { "display_name": "WWDC", "developer_name": "Apple, Inc.", "identifier": "640199958" }, ] ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/en.lproj/InfoPlist.strings ================================================ /* Localized versions of Info.plist keys */ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications/main.m ================================================ // // main.m // Applications // // Created by Ignacio on 6/6/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications.xcodeproj/project.pbxproj ================================================ archiveVersion 1 classes objectVersion 46 objects 04DD24601BAFDFAD001647B5 isa PBXFileReference lastKnownFileType folder.assetcatalog path Images.xcassets sourceTree <group> 04DD24611BAFDFAD001647B5 fileRef 04DD24601BAFDFAD001647B5 isa PBXBuildFile 4F36C06819CD11E40073E4BE isa PBXFileReference lastKnownFileType folder.assetcatalog path System.xcassets sourceTree <group> 4F36C06919CD11E40073E4BE fileRef 4F36C06819CD11E40073E4BE isa PBXBuildFile 4F805142196FBB2400FD61AA fileEncoding 4 isa PBXFileReference lastKnownFileType file.storyboard path Storyboard.storyboard sourceTree <group> 4F805143196FBB2400FD61AA fileRef 4F805142196FBB2400FD61AA isa PBXBuildFile 4FB5CE7619421BB70051C6BD children 4FB5CE8819421BB70051C6BD 4FB5CE8119421BB70051C6BD 4FB5CE8019421BB70051C6BD DEED72002638D6535AFCE24C isa PBXGroup sourceTree <group> 4FB5CE7719421BB70051C6BD attributes LastUpgradeCheck 0700 ORGANIZATIONNAME DZN Labs buildConfigurationList 4FB5CE7A19421BB70051C6BD compatibilityVersion Xcode 3.2 developmentRegion English hasScannedForEncodings 0 isa PBXProject knownRegions en Base mainGroup 4FB5CE7619421BB70051C6BD productRefGroup 4FB5CE8019421BB70051C6BD projectDirPath projectReferences projectRoot targets 4FB5CE7E19421BB70051C6BD 4FB5CE7A19421BB70051C6BD buildConfigurations 4FB5CEAF19421BB70051C6BD 4FB5CEB019421BB70051C6BD defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 4FB5CE7B19421BB70051C6BD buildActionMask 2147483647 files 4FB5CEB919421CA40051C6BD 4FB5CEF2194383F90051C6BD 4FB5CE9319421BB70051C6BD 4FB5CE8F19421BB70051C6BD 4FB5CEC2194220F50051C6BD 4FB5CEBC19421D0F0051C6BD isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 4FB5CE7C19421BB70051C6BD buildActionMask 2147483647 files 4FB5CE8519421BB70051C6BD 4FB5CE8719421BB70051C6BD 4FB5CE8319421BB70051C6BD DC3D8C2CF037427184D94841 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 4FB5CE7D19421BB70051C6BD buildActionMask 2147483647 files 4FB5CF151943BA140051C6BD 4FB5CEC41942210E0051C6BD 04DD24611BAFDFAD001647B5 4F36C06919CD11E40073E4BE 4FB5CE8D19421BB70051C6BD 4F805143196FBB2400FD61AA 4FB5CEE41942944A0051C6BD isa PBXResourcesBuildPhase runOnlyForDeploymentPostprocessing 0 4FB5CE7E19421BB70051C6BD buildConfigurationList 4FB5CEB119421BB70051C6BD buildPhases 82691CA88C254035AC3A9848 4FB5CE7B19421BB70051C6BD 4FB5CE7C19421BB70051C6BD 4FB5CE7D19421BB70051C6BD 80DE751658C84F6E894FCE7A buildRules dependencies isa PBXNativeTarget name Applications productName Applications productReference 4FB5CE7F19421BB70051C6BD productType com.apple.product-type.application 4FB5CE7F19421BB70051C6BD explicitFileType wrapper.application includeInIndex 0 isa PBXFileReference path Applications.app sourceTree BUILT_PRODUCTS_DIR 4FB5CE8019421BB70051C6BD children 4FB5CE7F19421BB70051C6BD isa PBXGroup name Products sourceTree <group> 4FB5CE8119421BB70051C6BD children 4FB5CE8219421BB70051C6BD 4FB5CE8419421BB70051C6BD 4FB5CE8619421BB70051C6BD 7C28AF233A3440BF861BEB87 isa PBXGroup name Frameworks sourceTree <group> 4FB5CE8219421BB70051C6BD isa PBXFileReference lastKnownFileType wrapper.framework name Foundation.framework path System/Library/Frameworks/Foundation.framework sourceTree SDKROOT 4FB5CE8319421BB70051C6BD fileRef 4FB5CE8219421BB70051C6BD isa PBXBuildFile 4FB5CE8419421BB70051C6BD isa PBXFileReference lastKnownFileType wrapper.framework name CoreGraphics.framework path System/Library/Frameworks/CoreGraphics.framework sourceTree SDKROOT 4FB5CE8519421BB70051C6BD fileRef 4FB5CE8419421BB70051C6BD isa PBXBuildFile 4FB5CE8619421BB70051C6BD isa PBXFileReference lastKnownFileType wrapper.framework name UIKit.framework path System/Library/Frameworks/UIKit.framework sourceTree SDKROOT 4FB5CE8719421BB70051C6BD fileRef 4FB5CE8619421BB70051C6BD isa PBXBuildFile 4FB5CE8819421BB70051C6BD children 4FB5CE9119421BB70051C6BD 4FB5CE9219421BB70051C6BD 4FB5CEB719421CA40051C6BD 4FB5CEB819421CA40051C6BD 4FB5CEBA19421D0F0051C6BD 4FB5CEBB19421D0F0051C6BD 4FB5CEC0194220F50051C6BD 4FB5CEC1194220F50051C6BD 4FB5CEF0194383F90051C6BD 4FB5CEF1194383F90051C6BD 4FB5CEC31942210E0051C6BD 04DD24601BAFDFAD001647B5 4F36C06819CD11E40073E4BE 4FB5CECE1942944A0051C6BD 4FB5CE8919421BB70051C6BD isa PBXGroup path Applications sourceTree <group> 4FB5CE8919421BB70051C6BD children 4F805142196FBB2400FD61AA 4FB5CE8A19421BB70051C6BD 4FB5CE8B19421BB70051C6BD 4FB5CE8E19421BB70051C6BD 4FB5CE9019421BB70051C6BD isa PBXGroup name Supporting Files sourceTree <group> 4FB5CE8A19421BB70051C6BD isa PBXFileReference lastKnownFileType text.plist.xml path Applications-Info.plist sourceTree <group> 4FB5CE8B19421BB70051C6BD children 4FB5CE8C19421BB70051C6BD isa PBXVariantGroup name InfoPlist.strings sourceTree <group> 4FB5CE8C19421BB70051C6BD isa PBXFileReference lastKnownFileType text.plist.strings name en path en.lproj/InfoPlist.strings sourceTree <group> 4FB5CE8D19421BB70051C6BD fileRef 4FB5CE8B19421BB70051C6BD isa PBXBuildFile 4FB5CE8E19421BB70051C6BD isa PBXFileReference lastKnownFileType sourcecode.c.objc path main.m sourceTree <group> 4FB5CE8F19421BB70051C6BD fileRef 4FB5CE8E19421BB70051C6BD isa PBXBuildFile 4FB5CE9019421BB70051C6BD isa PBXFileReference lastKnownFileType sourcecode.c.h path Applications-Prefix.pch sourceTree <group> 4FB5CE9119421BB70051C6BD isa PBXFileReference lastKnownFileType sourcecode.c.h path AppDelegate.h sourceTree <group> 4FB5CE9219421BB70051C6BD isa PBXFileReference lastKnownFileType sourcecode.c.objc path AppDelegate.m sourceTree <group> 4FB5CE9319421BB70051C6BD fileRef 4FB5CE9219421BB70051C6BD isa PBXBuildFile 4FB5CEAF19421BB70051C6BD buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES_ERROR CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES_ERROR CLANG_WARN__DUPLICATE_METHOD_MATCH YES CODE_SIGN_IDENTITY[sdk=iphoneos*] iPhone Developer COPY_PHASE_STRIP NO ENABLE_TESTABILITY YES GCC_C_LANGUAGE_STANDARD gnu99 GCC_DYNAMIC_NO_PIC NO 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 7.0 ONLY_ACTIVE_ARCH YES SDKROOT iphoneos isa XCBuildConfiguration name Debug 4FB5CEB019421BB70051C6BD buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES_ERROR CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES_ERROR CLANG_WARN__DUPLICATE_METHOD_MATCH YES CODE_SIGN_IDENTITY[sdk=iphoneos*] iPhone Developer COPY_PHASE_STRIP YES ENABLE_NS_ASSERTIONS NO GCC_C_LANGUAGE_STANDARD gnu99 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 7.0 SDKROOT iphoneos VALIDATE_PRODUCT YES isa XCBuildConfiguration name Release 4FB5CEB119421BB70051C6BD buildConfigurations 4FB5CEB219421BB70051C6BD 4FB5CEB319421BB70051C6BD defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 4FB5CEB219421BB70051C6BD baseConfigurationReference D0254246A6B36709B3020FC2 buildSettings ASSETCATALOG_COMPILER_APPICON_NAME AppIcon ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME LaunchImage CODE_SIGN_IDENTITY iPhone Developer: fangwen huang (33TFM3RXM7) GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER Applications/Applications-Prefix.pch INFOPLIST_FILE Applications/Applications-Info.plist IPHONEOS_DEPLOYMENT_TARGET 7.0 PRODUCT_BUNDLE_IDENTIFIER com.dzn.${PRODUCT_NAME:rfc1034identifier} PRODUCT_NAME $(TARGET_NAME) PROVISIONING_PROFILE a84f8631-7134-4f99-8d95-ca7217404d91 WRAPPER_EXTENSION app isa XCBuildConfiguration name Debug 4FB5CEB319421BB70051C6BD baseConfigurationReference BCEA3AD20EF58699A6D55E0B buildSettings ASSETCATALOG_COMPILER_APPICON_NAME AppIcon ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME LaunchImage CODE_SIGN_IDENTITY iPhone Developer: fangwen huang (33TFM3RXM7) GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER Applications/Applications-Prefix.pch INFOPLIST_FILE Applications/Applications-Info.plist IPHONEOS_DEPLOYMENT_TARGET 7.0 PRODUCT_BUNDLE_IDENTIFIER com.dzn.${PRODUCT_NAME:rfc1034identifier} PRODUCT_NAME $(TARGET_NAME) PROVISIONING_PROFILE a84f8631-7134-4f99-8d95-ca7217404d91 WRAPPER_EXTENSION app isa XCBuildConfiguration name Release 4FB5CEB719421CA40051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.h path MainViewController.h sourceTree <group> 4FB5CEB819421CA40051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.objc path MainViewController.m sourceTree <group> 4FB5CEB919421CA40051C6BD fileRef 4FB5CEB819421CA40051C6BD isa PBXBuildFile 4FB5CEBA19421D0F0051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.h path DetailViewController.h sourceTree <group> 4FB5CEBB19421D0F0051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.objc path DetailViewController.m sourceTree <group> 4FB5CEBC19421D0F0051C6BD fileRef 4FB5CEBB19421D0F0051C6BD isa PBXBuildFile 4FB5CEC0194220F50051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.h path Application.h sourceTree <group> 4FB5CEC1194220F50051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.objc path Application.m sourceTree <group> 4FB5CEC2194220F50051C6BD fileRef 4FB5CEC1194220F50051C6BD isa PBXBuildFile 4FB5CEC31942210E0051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType text.json path applications.json sourceTree <group> 4FB5CEC41942210E0051C6BD fileRef 4FB5CEC31942210E0051C6BD isa PBXBuildFile 4FB5CECE1942944A0051C6BD children 4FB5CECF1942944A0051C6BD 4FB5CEF41943BA140051C6BD isa PBXGroup path Fonts sourceTree <group> 4FB5CECF1942944A0051C6BD children 4FB5CED41942944A0051C6BD isa PBXGroup path Ideal Sans sourceTree <group> 4FB5CED41942944A0051C6BD isa PBXFileReference lastKnownFileType file path IdealSans-Book-Pro.otf sourceTree <group> 4FB5CEE41942944A0051C6BD fileRef 4FB5CED41942944A0051C6BD isa PBXBuildFile 4FB5CEF0194383F90051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.h path UIColor+Hexadecimal.h sourceTree <group> 4FB5CEF1194383F90051C6BD fileEncoding 4 isa PBXFileReference lastKnownFileType sourcecode.c.objc path UIColor+Hexadecimal.m sourceTree <group> 4FB5CEF2194383F90051C6BD fileRef 4FB5CEF1194383F90051C6BD isa PBXBuildFile 4FB5CEF41943BA140051C6BD children 4FB5CF021943BA140051C6BD isa PBXGroup path Lato sourceTree <group> 4FB5CF021943BA140051C6BD isa PBXFileReference lastKnownFileType file path Lato-Regular.ttf sourceTree <group> 4FB5CF151943BA140051C6BD fileRef 4FB5CF021943BA140051C6BD isa PBXBuildFile 7C28AF233A3440BF861BEB87 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference path libPods.a sourceTree BUILT_PRODUCTS_DIR 80DE751658C84F6E894FCE7A buildActionMask 2147483647 files inputPaths isa PBXShellScriptBuildPhase name Copy Pods Resources outputPaths runOnlyForDeploymentPostprocessing 0 shellPath /bin/sh shellScript "${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh" showEnvVarsInLog 0 82691CA88C254035AC3A9848 buildActionMask 2147483647 files inputPaths isa PBXShellScriptBuildPhase name Check Pods Manifest.lock outputPaths runOnlyForDeploymentPostprocessing 0 shellPath /bin/sh shellScript diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null if [[ $? != 0 ]] ; then cat << EOM error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. EOM exit 1 fi showEnvVarsInLog 0 BCEA3AD20EF58699A6D55E0B includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig name Pods.release.xcconfig path Pods/Target Support Files/Pods/Pods.release.xcconfig sourceTree <group> D0254246A6B36709B3020FC2 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig name Pods.debug.xcconfig path Pods/Target Support Files/Pods/Pods.debug.xcconfig sourceTree <group> DC3D8C2CF037427184D94841 fileRef 7C28AF233A3440BF861BEB87 isa PBXBuildFile DEED72002638D6535AFCE24C children D0254246A6B36709B3020FC2 BCEA3AD20EF58699A6D55E0B isa PBXGroup name Pods sourceTree <group> rootObject 4FB5CE7719421BB70051C6BD ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Applications.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Podfile ================================================ platform :ios, '6.0' pod 'DZNEmptyDataSet', :path => '../../' ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Local Podspecs/DZNEmptyDataSet.podspec.json ================================================ { "name": "DZNEmptyDataSet", "version": "1.8", "summary": "A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.", "description": "It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. The -reloadData call will be observed so the empty dataset will be configured whenever needed.", "homepage": "https://github.com/dzenbot/DZNEmptyDataSet", "license": { "type": "MIT", "file": "LICENSE" }, "authors": { "dzenbot": "iromero@dzen.cl" }, "platforms": { "ios": "6.0" }, "source": { "git": "https://github.com/dzenbot/DZNEmptyDataSet.git", "tag": "v1.8" }, "source_files": [ "Classes", "Source/**/*.{h,m}" ], "requires_arc": true, "frameworks": "UIKit" } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Pods.xcodeproj/project.pbxproj ================================================ archiveVersion 1 classes objectVersion 46 objects 0364FE89F5107F544DEC15166918E2A1 buildActionMask 2147483647 files 90B58C99D0054C74801A14D045CAB049 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 07016034693ADD6082E0FC107D5541BB includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.debug.xcconfig sourceTree <group> 0E0DE69C371E25639152D44D8FF0FCEF includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path DZNEmptyDataSet-prefix.pch sourceTree <group> 15A529C27057E4A57D259CBC6E6CE49C includeInIndex 1 isa PBXFileReference lastKnownFileType text path Pods-acknowledgements.markdown sourceTree <group> 1683F30D244E3EBCA51481C2EA5AFB16 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libPods.a path libPods.a sourceTree BUILT_PRODUCTS_DIR 182967A704469F086D39FBC4FB9D9DC5 buildConfigurations D9C91AF540C4BC50562F32E9295C50D3 2B06E9136153968901DA8E040421EC9C defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 19D3E3B802B3750E7D241CA1630453D5 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libDZNEmptyDataSet.a path libDZNEmptyDataSet.a sourceTree BUILT_PRODUCTS_DIR 207A3DD8C93C76F69D230273A3D535BC includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.release.xcconfig sourceTree <group> 2B06E9136153968901DA8E040421EC9C baseConfigurationReference 207A3DD8C93C76F69D230273A3D535BC buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 2D8E8EC45A3A1A1D94AE762CB5028504 buildConfigurations 6569F07DC21AD8B72752685013E3D9D8 A14E2444F162A20E3776820E0ADFFB52 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 3278CE15420555D48F10154A14C5B655 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet-Private.xcconfig sourceTree <group> 3B20E21A1888BC186989307F796F5F40 isa PBXFileReference lastKnownFileType wrapper.framework name UIKit.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework sourceTree DEVELOPER_DIR 3E3E0C63B7FD6CE243C36F309A040FFA includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet.xcconfig sourceTree <group> 433CD3331B6C3787F473C941B61FC68F children D0FB9306D21AF23A056944AE037CBFFF isa PBXGroup name Frameworks sourceTree <group> 43F17D633971EB29BA6C5502DAD478D7 baseConfigurationReference 3278CE15420555D48F10154A14C5B655 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug 442BD4C8DDFCAE23C8387F0A08123EFF buildConfigurations 43F17D633971EB29BA6C5502DAD478D7 EB16916CE352D525AC3D79A78438C6CE defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 5143F64FD6A46AC5BD9B40A9B140240C fileRef FDEBB061F02AE48FBB223A39053A1BE7 isa PBXBuildFile 5397B6189663A5BA5E185B54D0C57739 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path DZNEmptyDataSet-dummy.m sourceTree <group> 5DB666AC1070276A7247E3A017AB9DC3 children DDA77454C75886FD6C6750AD906F69A9 isa PBXGroup name Development Pods sourceTree <group> 641AE05DD55E5E6AC1590CD7B4A18F97 includeInIndex 1 isa PBXFileReference lastKnownFileType text.script.sh path Pods-resources.sh sourceTree <group> 6569F07DC21AD8B72752685013E3D9D8 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_DYNAMIC_NO_PIC NO 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 GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 6.0 ONLY_ACTIVE_ARCH YES STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build isa XCBuildConfiguration name Debug 70E3CB54A0C786DDC94ACA04CE36E38E fileRef 5397B6189663A5BA5E185B54D0C57739 isa PBXBuildFile 7DB346D0F39D3F0E887471402A8071AB children BA6428E9F66FD5A23C0A2E06ED26CD2F 5DB666AC1070276A7247E3A017AB9DC3 433CD3331B6C3787F473C941B61FC68F CCA510CFBEA2D207524CDA0D73C3B561 D2411A5FE7F7A004607BED49990C37F4 isa PBXGroup sourceTree <group> 7F56B7ACEFD13ED6610D9BA550FFFD25 buildActionMask 2147483647 files 5143F64FD6A46AC5BD9B40A9B140240C E10548CCEFDE86903CE46271A6E86A4F isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 8ACC91090BD54C33C91E6156D5D16427 fileRef A141BF8560DDFBF8BE6AB60B344A49A5 isa PBXBuildFile 90AA9AD5CC4EA1577D3B93BF9D78828D buildConfigurationList 182967A704469F086D39FBC4FB9D9DC5 buildPhases A77135A75ED791EDED04A7F4AB828570 FDDB5C012B7F0A01686E5424B494F675 buildRules dependencies A78F74E8A562DC9EFC1AD470B52D0158 isa PBXNativeTarget name Pods productName Pods productReference 1683F30D244E3EBCA51481C2EA5AFB16 productType com.apple.product-type.library.static 90B58C99D0054C74801A14D045CAB049 fileRef BAA614E6ADB92FB0CE1C0AE844115ED8 isa PBXBuildFile 952EEBFAF8F7E620423C9F156F25A506 children 15A529C27057E4A57D259CBC6E6CE49C BF59BC15D23E1E1912C8F334E7236813 A141BF8560DDFBF8BE6AB60B344A49A5 641AE05DD55E5E6AC1590CD7B4A18F97 07016034693ADD6082E0FC107D5541BB 207A3DD8C93C76F69D230273A3D535BC isa PBXGroup name Pods path Target Support Files/Pods sourceTree <group> 9D2C7F3CF97BF77B1F8C57E069E89C0C containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString C1F62CB4B07D4A5A9F058B60333193C9 remoteInfo DZNEmptyDataSet 9DE3D1892BCB4493894818443EC110AB fileRef C94101A52D858CC49788B3D52EACCA26 isa PBXBuildFile A141BF8560DDFBF8BE6AB60B344A49A5 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path Pods-dummy.m sourceTree <group> A14E2444F162A20E3776820E0ADFFB52 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP YES ENABLE_NS_ASSERTIONS NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_PREPROCESSOR_DEFINITIONS RELEASE=1 GCC_WARN_64_TO_32_BIT_CONVERSION YES GCC_WARN_ABOUT_RETURN_TYPE YES GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 6.0 STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build VALIDATE_PRODUCT YES isa XCBuildConfiguration name Release A77135A75ED791EDED04A7F4AB828570 buildActionMask 2147483647 files 8ACC91090BD54C33C91E6156D5D16427 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 A78F74E8A562DC9EFC1AD470B52D0158 isa PBXTargetDependency name DZNEmptyDataSet target C1F62CB4B07D4A5A9F058B60333193C9 targetProxy 9D2C7F3CF97BF77B1F8C57E069E89C0C BA5F2A74204C78BC49DB2B36B70C3D69 fileRef FDEBB061F02AE48FBB223A39053A1BE7 isa PBXBuildFile BA6428E9F66FD5A23C0A2E06ED26CD2F includeInIndex 1 isa PBXFileReference lastKnownFileType text name Podfile path ../Podfile sourceTree SOURCE_ROOT xcLanguageSpecificationIdentifier xcode.lang.ruby BAA614E6ADB92FB0CE1C0AE844115ED8 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path UIScrollView+EmptyDataSet.h sourceTree <group> BF59BC15D23E1E1912C8F334E7236813 includeInIndex 1 isa PBXFileReference lastKnownFileType text.plist.xml path Pods-acknowledgements.plist sourceTree <group> C1F62CB4B07D4A5A9F058B60333193C9 buildConfigurationList 442BD4C8DDFCAE23C8387F0A08123EFF buildPhases ECDC82CAD30C2BD977FD1707F2A78834 7F56B7ACEFD13ED6610D9BA550FFFD25 0364FE89F5107F544DEC15166918E2A1 buildRules dependencies isa PBXNativeTarget name DZNEmptyDataSet productName DZNEmptyDataSet productReference 19D3E3B802B3750E7D241CA1630453D5 productType com.apple.product-type.library.static C94101A52D858CC49788B3D52EACCA26 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path UIScrollView+EmptyDataSet.m sourceTree <group> CB006E9D382450967FBF69905841DE07 children 3E3E0C63B7FD6CE243C36F309A040FFA 3278CE15420555D48F10154A14C5B655 5397B6189663A5BA5E185B54D0C57739 0E0DE69C371E25639152D44D8FF0FCEF isa PBXGroup name Support Files path Examples/Applications/Pods/Target Support Files/DZNEmptyDataSet sourceTree <group> CCA510CFBEA2D207524CDA0D73C3B561 children 19D3E3B802B3750E7D241CA1630453D5 1683F30D244E3EBCA51481C2EA5AFB16 isa PBXGroup name Products sourceTree <group> D0FB9306D21AF23A056944AE037CBFFF children FDEBB061F02AE48FBB223A39053A1BE7 3B20E21A1888BC186989307F796F5F40 isa PBXGroup name iOS sourceTree <group> D2411A5FE7F7A004607BED49990C37F4 children 952EEBFAF8F7E620423C9F156F25A506 isa PBXGroup name Targets Support Files sourceTree <group> D41D8CD98F00B204E9800998ECF8427E attributes LastSwiftUpdateCheck 0700 LastUpgradeCheck 0700 buildConfigurationList 2D8E8EC45A3A1A1D94AE762CB5028504 compatibilityVersion Xcode 3.2 developmentRegion English hasScannedForEncodings 0 isa PBXProject knownRegions en mainGroup 7DB346D0F39D3F0E887471402A8071AB productRefGroup CCA510CFBEA2D207524CDA0D73C3B561 projectDirPath projectReferences projectRoot targets C1F62CB4B07D4A5A9F058B60333193C9 90AA9AD5CC4EA1577D3B93BF9D78828D D9C91AF540C4BC50562F32E9295C50D3 baseConfigurationReference 07016034693ADD6082E0FC107D5541BB buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug DDA77454C75886FD6C6750AD906F69A9 children F30778E92866A31BE97B2689605CA4C5 CB006E9D382450967FBF69905841DE07 isa PBXGroup name DZNEmptyDataSet path ../../.. sourceTree <group> E10548CCEFDE86903CE46271A6E86A4F fileRef 3B20E21A1888BC186989307F796F5F40 isa PBXBuildFile EB16916CE352D525AC3D79A78438C6CE baseConfigurationReference 3278CE15420555D48F10154A14C5B655 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release ECDC82CAD30C2BD977FD1707F2A78834 buildActionMask 2147483647 files 70E3CB54A0C786DDC94ACA04CE36E38E 9DE3D1892BCB4493894818443EC110AB isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 F30778E92866A31BE97B2689605CA4C5 children BAA614E6ADB92FB0CE1C0AE844115ED8 C94101A52D858CC49788B3D52EACCA26 isa PBXGroup name Source path Source sourceTree <group> FDDB5C012B7F0A01686E5424B494F675 buildActionMask 2147483647 files BA5F2A74204C78BC49DB2B36B70C3D69 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 FDEBB061F02AE48FBB223A39053A1BE7 isa PBXFileReference lastKnownFileType wrapper.framework name Foundation.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework sourceTree DEVELOPER_DIR rootObject D41D8CD98F00B204E9800998ECF8427E ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DZNEmptyDataSet.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-Private.xcconfig ================================================ #include "DZNEmptyDataSet.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_LDFLAGS = ${DZNEMPTYDATASET_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-dummy.m ================================================ #import @interface PodsDummy_DZNEmptyDataSet : NSObject @end @implementation PodsDummy_DZNEmptyDataSet @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.xcconfig ================================================ DZNEMPTYDATASET_OTHER_LDFLAGS = -framework "UIKit" ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## DZNEmptyDataSet The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. Generated by CocoaPods - http://cocoapods.org ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/Pods/Pods-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. Title DZNEmptyDataSet Type PSGroupSpecifier FooterText Generated by CocoaPods - http://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/Pods/Pods-dummy.m ================================================ #import @interface PodsDummy_Pods : NSObject @end @implementation PodsDummy_Pods @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/Pods/Pods-resources.sh ================================================ #!/bin/sh set -e mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" XCASSET_FILES=() realpath() { DIRECTORY="$(cd "${1%/*}" && pwd)" FILENAME="${1##*/}" echo "$DIRECTORY/$FILENAME" } install_resource() { case $1 in *.storyboard) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" ;; *.xcdatamodeld) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" ;; *.xcmappingmodel) echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" ;; *.xcassets) ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" echo "$1" >> "$RESOURCES_TO_COPY" ;; *) echo "${PODS_ROOT}/$1" echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" ;; esac } mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do if [[ $line != "`realpath $PODS_ROOT`*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/Pods/Pods.debug.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Target Support Files/Pods/Pods.release.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/AppDelegate.h ================================================ // // AppDelegate.h // Colors // // Created by Ignacio Romero Z. on 6/19/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/AppDelegate.m ================================================ // // AppDelegate.m // Colors // // Created by Ignacio Romero Z. on 6/19/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "AppDelegate.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window.backgroundColor = [UIColor whiteColor]; return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/CollectionViewController.h ================================================ // // CollectionViewController.h // Colors // // Created by Ignacio Romero Z. on 6/19/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import @interface CollectionViewController : UICollectionViewController - (IBAction)refreshColors:(id)sender; - (IBAction)removeColors:(id)sender; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/CollectionViewController.m ================================================ // // CollectionViewController.m // Colors // // Created by Ignacio Romero Z. on 6/19/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "CollectionViewController.h" #import "SearchViewController.h" #import "Palette.h" #import "UIScrollView+EmptyDataSet.h" #define kColumnCountMax 7 #define kColumnCountMin 5 static NSString *CellIdentifier = @"ColorViewCell"; @interface CollectionViewController () @property (nonatomic) NSInteger columnCount; @property (nonatomic, strong) NSMutableArray *filteredPalette; @end @implementation CollectionViewController #pragma mark - View lifecycle - (void)awakeFromNib { [super awakeFromNib]; self.title = @"Collection"; self.tabBarItem = [[UITabBarItem alloc] initWithTitle:self.title image:[UIImage imageNamed:@"tab_collection"] tag:self.title.hash]; } - (void)loadView { [super loadView]; UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionViewLayout; layout.minimumLineSpacing = 2.0; layout.minimumInteritemSpacing = 2; layout.scrollDirection = UICollectionViewScrollDirectionVertical; CGFloat inset = layout.minimumLineSpacing*1.5; self.collectionView.contentInset = UIEdgeInsetsMake(inset, 0.0, inset, 0.0); self.collectionView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0); [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.collectionView reloadData]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } #pragma mark - Getters - (NSInteger)columnCount { return UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation) ? kColumnCountMax : kColumnCountMin; } - (CGSize)cellSize { UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout; CGFloat size = (self.navigationController.view.bounds.size.width/self.columnCount) - flowLayout.minimumLineSpacing; return CGSizeMake(size, size); } - (NSMutableArray *)filteredPalette { // Randomly filtered palette if (!_filteredPalette) { _filteredPalette = [[NSMutableArray alloc] initWithArray:[[Palette sharedPalette] colors]]; for (NSInteger i = _filteredPalette.count-1; i > 0; i--) { [_filteredPalette exchangeObjectAtIndex:i withObjectAtIndex:arc4random_uniform(i+1.0)]; } } return _filteredPalette; } #pragma mark - Actions - (IBAction)refreshColors:(id)sender { [[Palette sharedPalette] reloadAll]; [self setFilteredPalette:nil]; [self.collectionView reloadData]; } - (IBAction)removeColors:(id)sender { [[Palette sharedPalette] removeAll]; [_filteredPalette removeAllObjects]; [self.collectionView reloadData]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"collection_push_detail"]) { SearchViewController *controller = [segue destinationViewController]; controller.selectedColor = sender; } } #pragma mark - DZNEmptyDataSetSource Methods - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"No colors loaded"; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"To show a list of random colors, tap on the refresh icon in the right top corner.\n\nTo clean the list, tap on the trash icon."; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { return nil; } - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { return [UIImage imageNamed:@"empty_placeholder"]; } - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor whiteColor]; } - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView { return nil; } - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView { return 0; } #pragma mark - DZNEmptyDataSetSource Methods - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return YES; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { NSLog(@"%s",__FUNCTION__); } - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { NSLog(@"%s",__FUNCTION__); } #pragma mark - UICollectionViewDataSource methods - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return [self.filteredPalette count]; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; cell.selectedBackgroundView = [UIView new]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.25]; Color *color = self.filteredPalette[indexPath.row]; cell.backgroundColor = color.color; return cell; } #pragma mark - UICollectionViewDataDelegate methods - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { Color *color = self.filteredPalette[indexPath.row]; if ([self shouldPerformSegueWithIdentifier:@"collection_push_detail" sender:color]) { [self performSegueWithIdentifier:@"collection_push_detail" sender:color]; } } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return [self cellSize]; } - (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { if ([NSStringFromSelector(action) isEqualToString:@"copy:"]) { return YES; } return NO; } - (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ if ([NSStringFromSelector(action) isEqualToString:@"copy:"]) { Color *color = self.filteredPalette[indexPath.row]; if (color.hex.length > 0) [[UIPasteboard generalPasteboard] setString:color.hex]; } }); } #pragma mark - View Auto-Rotation - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (![UIInputViewController class]) { [self.collectionView reloadData]; } } - (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id)coordinator { [self.collectionView reloadData]; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Colors-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIcons CFBundleIcons~ipad CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS UIMainStoryboardFile Storyboard UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Colors-Prefix.pch ================================================ // // Prefix header // // The contents of this file are implicitly included at the beginning of every source file. // #import #ifndef __IPHONE_3_0 #warning "This project uses features only available in iOS SDK 3.0 and later." #endif #ifdef __OBJC__ #import #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/Color.h ================================================ // // Palette.h // Colors // // Created by Ignacio Romero Z. on 7/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import @interface Color : NSObject @property (nonatomic, strong) NSString *hex; @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *rgb; @property (nonatomic, weak) UIColor *color; - (instancetype)initWithDictionary:(NSDictionary *)dict; + (UIImage *)roundThumbWithColor:(UIColor *)color; + (UIImage *)roundImageForSize:(CGSize)size withColor:(UIColor *)color; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/Color.m ================================================ // // Palette.m // Colors // // Created by Ignacio Romero Z. on 7/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "Color.h" #import "UIColor+Hex.h" @implementation Color - (instancetype)initWithDictionary:(NSDictionary *)dict { if (!dict) { return nil; } self = [super init]; if (self) { self.hex = [dict objectForKey:@"hex"]; self.name = [dict objectForKey:@"name"]; self.rgb = [dict objectForKey:@"rgb"]; } return self; } - (UIColor *)color { return [UIColor colorFromHex:self.hex]; } + (UIImage *)roundThumbWithColor:(UIColor *)color { return [self roundImageForSize:CGSizeMake(32.0, 32.0) withColor:color]; } + (UIImage *)roundImageForSize:(CGSize)size withColor:(UIColor *)color { if (!color) { return nil; } // Constants CGRect bounds = CGRectMake(0, 0, size.width, size.height); // Create the image context UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0); //// Oval Drawing UIBezierPath *ovalPath = [UIBezierPath bezierPathWithOvalInRect:bounds]; [color setFill]; [ovalPath fill]; //Create the image using the current context. UIImage *_image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return _image; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/Palette.h ================================================ // // ColorPalette.h // Colors // // Created by Ignacio Romero Z. on 7/1/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "Color.h" @interface Palette : NSObject @property (nonatomic, readonly) NSMutableArray *colors; + (instancetype)sharedPalette; - (void)reloadAll; - (void)removeColor:(Color *)color; - (void)removeAll; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/Palette.m ================================================ // // ColorSource.m // Colors // // Created by Ignacio Romero Z. on 7/1/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "Palette.h" @interface Palette () @end static Palette *_sharedPalette = nil; @implementation Palette @synthesize colors = _colors; + (instancetype)sharedPalette { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedPalette = [[Palette alloc] init]; [_sharedPalette loadColors]; }); return _sharedPalette; } - (void)loadColors { // A list of crayola colors in JSON by Jjdelc https://gist.github.com/jjdelc/1868136 NSString *path = [[NSBundle mainBundle] pathForResource:@"colors" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:path]; NSArray *objects = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions|NSJSONWritingPrettyPrinted error:nil] mutableCopy]; _colors = [[NSMutableArray alloc] initWithCapacity:objects.count]; for (NSDictionary *dictionary in objects) { Color *color = [[Color alloc] initWithDictionary:dictionary]; [_colors addObject:color]; } } - (void)reloadAll { [self removeAll]; [self loadColors]; } - (void)removeColor:(Color *)color { NSInteger idx = [_colors indexOfObject:color]; if (idx >= 0 && idx < _colors.count) { [_colors removeObjectAtIndex:idx]; } } - (void)removeAll { [_colors removeAllObjects]; _colors = nil; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/UIColor+Hex.h ================================================ // // UIColor+Hex.h // Colors // // Created by Ignacio Romero on 4/26/16. // Copyright © 2016 DZN Labs. All rights reserved. // #import @interface UIColor (Hex) + (UIColor *)colorFromHex:(NSString *)hex; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/UIColor+Hex.m ================================================ // // UIColor+Hex.m // Colors // // Created by Ignacio Romero on 4/26/16. // Copyright © 2016 DZN Labs. All rights reserved. // #import "UIColor+Hex.h" @implementation UIColor (Hex) + (UIColor *)colorFromHex:(NSString *)hex { return [self colorFromHex:hex alpha:1.0]; } + (UIColor *)colorFromHex:(NSString *)hex alpha:(CGFloat)alpha { NSUInteger offset = 0; if ([hex hasPrefix:@"#"]) { offset = 1; } NSString *string = [hex substringFromIndex:offset]; if (string.length == 3) { string = [NSString stringWithFormat:@"%@%@%@%@%@%@", [string substringWithRange:NSMakeRange(0, 1)], [string substringWithRange:NSMakeRange(0, 1)], [string substringWithRange:NSMakeRange(1, 1)], [string substringWithRange:NSMakeRange(1, 1)], [string substringWithRange:NSMakeRange(2, 1)], [string substringWithRange:NSMakeRange(2, 1)]]; } if (string.length == 6) { string = [string stringByAppendingString:@"ff"]; } if (string == nil) { return nil; } unsigned int baseValue; [[NSScanner scannerWithString:string] scanHexInt:&baseValue]; float red = ((baseValue >> 24) & 0xFF)/255.0f; float green = ((baseValue >> 16) & 0xFF)/255.0f; float blue = ((baseValue >> 8) & 0xFF)/255.0f; return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/DataSource/colors.json ================================================ [ { "hex": "EFDECD", "name": "Almond", "rgb": "(239, 222, 205)" }, { "hex": "CD9575", "name": "Antique Brass", "rgb": "(205, 149, 117)" }, { "hex": "FDD9B5", "name": "Apricot", "rgb": "(253, 217, 181)" }, { "hex": "78DBE2", "name": "Aquamarine", "rgb": "(120, 219, 226)" }, { "hex": "87A96B", "name": "Asparagus", "rgb": "(135, 169, 107)" }, { "hex": "FFA474", "name": "Atomic Tangerine", "rgb": "(255, 164, 116)" }, { "hex": "FAE7B5", "name": "Banana Mania", "rgb": "(250, 231, 181)" }, { "hex": "9F8170", "name": "Beaver", "rgb": "(159, 129, 112)" }, { "hex": "FD7C6E", "name": "Bittersweet", "rgb": "(253, 124, 110)" }, { "hex": "000000", "name": "Black", "rgb": "(0,0,0)" }, { "hex": "ACE5EE", "name": "Blizzard Blue", "rgb": "(172, 229, 238)" }, { "hex": "1F75FE", "name": "Blue", "rgb": "(31, 117, 254)" }, { "hex": "A2A2D0", "name": "Blue Bell", "rgb": "(162, 162, 208)" }, { "hex": "6699CC", "name": "Blue Gray", "rgb": "(102, 153, 204)" }, { "hex": "0D98BA", "name": "Blue Green", "rgb": "(13, 152, 186)" }, { "hex": "7366BD", "name": "Blue Violet", "rgb": "(115, 102, 189)" }, { "hex": "DE5D83", "name": "Blush", "rgb": "(222, 93, 131)" }, { "hex": "CB4154", "name": "Brick Red", "rgb": "(203, 65, 84)" }, { "hex": "B4674D", "name": "Brown", "rgb": "(180, 103, 77)" }, { "hex": "FF7F49", "name": "Burnt Orange", "rgb": "(255, 127, 73)" }, { "hex": "EA7E5D", "name": "Burnt Sienna", "rgb": "(234, 126, 93)" }, { "hex": "B0B7C6", "name": "Cadet Blue", "rgb": "(176, 183, 198)" }, { "hex": "FFFF99", "name": "Canary", "rgb": "(255, 255, 153)" }, { "hex": "1CD3A2", "name": "Caribbean Green", "rgb": "(28, 211, 162)" }, { "hex": "FFAACC", "name": "Carnation Pink", "rgb": "(255, 170, 204)" }, { "hex": "DD4492", "name": "Cerise", "rgb": "(221, 68, 146)" }, { "hex": "1DACD6", "name": "Cerulean", "rgb": "(29, 172, 214)" }, { "hex": "BC5D58", "name": "Chestnut", "rgb": "(188, 93, 88)" }, { "hex": "DD9475", "name": "Copper", "rgb": "(221, 148, 117)" }, { "hex": "9ACEEB", "name": "Cornflower", "rgb": "(154, 206, 235)" }, { "hex": "FFBCD9", "name": "Cotton Candy", "rgb": "(255, 188, 217)" }, { "hex": "FDDB6D", "name": "Dandelion", "rgb": "(253, 219, 109)" }, { "hex": "2B6CC4", "name": "Denim", "rgb": "(43, 108, 196)" }, { "hex": "EFCDB8", "name": "Desert Sand", "rgb": "(239, 205, 184)" }, { "hex": "6E5160", "name": "Eggplant", "rgb": "(110, 81, 96)" }, { "hex": "CEFF1D", "name": "Electric Lime", "rgb": "(206, 255, 29)" }, { "hex": "71BC78", "name": "Fern", "rgb": "(113, 188, 120)" }, { "hex": "6DAE81", "name": "Forest Green", "rgb": "(109, 174, 129)" }, { "hex": "C364C5", "name": "Fuchsia", "rgb": "(195, 100, 197)" }, { "hex": "CC6666", "name": "Fuzzy Wuzzy", "rgb": "(204, 102, 102)" }, { "hex": "E7C697", "name": "Gold", "rgb": "(231, 198, 151)" }, { "hex": "FCD975", "name": "Goldenrod", "rgb": "(252, 217, 117)" }, { "hex": "A8E4A0", "name": "Granny Smith Apple", "rgb": "(168, 228, 160)" }, { "hex": "95918C", "name": "Gray", "rgb": "(149, 145, 140)" }, { "hex": "1CAC78", "name": "Green", "rgb": "(28, 172, 120)" }, { "hex": "1164B4", "name": "Green Blue", "rgb": "(17, 100, 180)" }, { "hex": "F0E891", "name": "Green Yellow", "rgb": "(240, 232, 145)" }, { "hex": "FF1DCE", "name": "Hot Magenta", "rgb": "(255, 29, 206)" }, { "hex": "B2EC5D", "name": "Inchworm", "rgb": "(178, 236, 93)" }, { "hex": "5D76CB", "name": "Indigo", "rgb": "(93, 118, 203)" }, { "hex": "CA3767", "name": "Jazzberry Jam", "rgb": "(202, 55, 103)" }, { "hex": "3BB08F", "name": "Jungle Green", "rgb": "(59, 176, 143)" }, { "hex": "FEFE22", "name": "Laser Lemon", "rgb": "(254, 254, 34)" }, { "hex": "FCB4D5", "name": "Lavender", "rgb": "(252, 180, 213)" }, { "hex": "FFF44F", "name": "Lemon Yellow", "rgb": "(255, 244, 79)" }, { "hex": "FFBD88", "name": "Macaroni and Cheese", "rgb": "(255, 189, 136)" }, { "hex": "F664AF", "name": "Magenta", "rgb": "(246, 100, 175)" }, { "hex": "AAF0D1", "name": "Magic Mint", "rgb": "(170, 240, 209)" }, { "hex": "CD4A4C", "name": "Mahogany", "rgb": "(205, 74, 76)" }, { "hex": "EDD19C", "name": "Maize", "rgb": "(237, 209, 156)" }, { "hex": "979AAA", "name": "Manatee", "rgb": "(151, 154, 170)" }, { "hex": "FF8243", "name": "Mango Tango", "rgb": "(255, 130, 67)" }, { "hex": "C8385A", "name": "Maroon", "rgb": "(200, 56, 90)" }, { "hex": "EF98AA", "name": "Mauvelous", "rgb": "(239, 152, 170)" }, { "hex": "FDBCB4", "name": "Melon", "rgb": "(253, 188, 180)" }, { "hex": "1A4876", "name": "Midnight Blue", "rgb": "(26, 72, 118)" }, { "hex": "30BA8F", "name": "Mountain Meadow", "rgb": "(48, 186, 143)" }, { "hex": "C54B8C", "name": "Mulberry", "rgb": "(197, 75, 140)" }, { "hex": "1974D2", "name": "Navy Blue", "rgb": "(25, 116, 210)" }, { "hex": "FFA343", "name": "Neon Carrot", "rgb": "(255, 163, 67)" }, { "hex": "BAB86C", "name": "Olive Green", "rgb": "(186, 184, 108)" }, { "hex": "FF7538", "name": "Orange", "rgb": "(255, 117, 56)" }, { "hex": "FF2B2B", "name": "Orange Red", "rgb": "(255, 43, 43)" }, { "hex": "F8D568", "name": "Orange Yellow", "rgb": "(248, 213, 104)" }, { "hex": "E6A8D7", "name": "Orchid", "rgb": "(230, 168, 215)" }, { "hex": "414A4C", "name": "Outer Space", "rgb": "(65, 74, 76)" }, { "hex": "FF6E4A", "name": "Outrageous Orange", "rgb": "(255, 110, 74)" }, { "hex": "1CA9C9", "name": "Pacific Blue", "rgb": "(28, 169, 201)" }, { "hex": "FFCFAB", "name": "Peach", "rgb": "(255, 207, 171)" }, { "hex": "C5D0E6", "name": "Periwinkle", "rgb": "(197, 208, 230)" }, { "hex": "FDDDE6", "name": "Piggy Pink", "rgb": "(253, 221, 230)" }, { "hex": "158078", "name": "Pine Green", "rgb": "(21, 128, 120)" }, { "hex": "FC74FD", "name": "Pink Flamingo", "rgb": "(252, 116, 253)" }, { "hex": "F78FA7", "name": "Pink Sherbet", "rgb": "(247, 143, 167)" }, { "hex": "8E4585", "name": "Plum", "rgb": "(142, 69, 133)" }, { "hex": "7442C8", "name": "Purple Heart", "rgb": "(116, 66, 200)" }, { "hex": "9D81BA", "name": "Purple Mountain's Majesty", "rgb": "(157, 129, 186)" }, { "hex": "FE4EDA", "name": "Purple Pizzazz", "rgb": "(254, 78, 218)" }, { "hex": "FF496C", "name": "Radical Red", "rgb": "(255, 73, 108)" }, { "hex": "D68A59", "name": "Raw Sienna", "rgb": "(214, 138, 89)" }, { "hex": "714B23", "name": "Raw Umber", "rgb": "(113, 75, 35)" }, { "hex": "FF48D0", "name": "Razzle Dazzle Rose", "rgb": "(255, 72, 208)" }, { "hex": "E3256B", "name": "Razzmatazz", "rgb": "(227, 37, 107)" }, { "hex": "EE204D", "name": "Red", "rgb": "(238,32 ,77 )" }, { "hex": "FF5349", "name": "Red Orange", "rgb": "(255, 83, 73)" }, { "hex": "C0448F", "name": "Red Violet", "rgb": "(192, 68, 143)" }, { "hex": "1FCECB", "name": "Robin's Egg Blue", "rgb": "(31, 206, 203)" }, { "hex": "7851A9", "name": "Royal Purple", "rgb": "(120, 81, 169)" }, { "hex": "FF9BAA", "name": "Salmon", "rgb": "(255, 155, 170)" }, { "hex": "FC2847", "name": "Scarlet", "rgb": "(252, 40, 71)" }, { "hex": "76FF7A", "name": "Screamin' Green", "rgb": "(118, 255, 122)" }, { "hex": "9FE2BF", "name": "Sea Green", "rgb": "(159, 226, 191)" }, { "hex": "A5694F", "name": "Sepia", "rgb": "(165, 105, 79)" }, { "hex": "8A795D", "name": "Shadow", "rgb": "(138, 121, 93)" }, { "hex": "45CEA2", "name": "Shamrock", "rgb": "(69, 206, 162)" }, { "hex": "FB7EFD", "name": "Shocking Pink", "rgb": "(251, 126, 253)" }, { "hex": "CDC5C2", "name": "Silver", "rgb": "(205, 197, 194)" }, { "hex": "80DAEB", "name": "Sky Blue", "rgb": "(128, 218, 235)" }, { "hex": "ECEABE", "name": "Spring Green", "rgb": "(236, 234, 190)" }, { "hex": "FFCF48", "name": "Sunglow", "rgb": "(255, 207, 72)" }, { "hex": "FD5E53", "name": "Sunset Orange", "rgb": "(253, 94, 83)" }, { "hex": "FAA76C", "name": "Tan", "rgb": "(250, 167, 108)" }, { "hex": "18A7B5", "name": "Teal Blue", "rgb": "(24, 167, 181)" }, { "hex": "EBC7DF", "name": "Thistle", "rgb": "(235, 199, 223)" }, { "hex": "FC89AC", "name": "Tickle Me Pink", "rgb": "(252, 137, 172)" }, { "hex": "DBD7D2", "name": "Timberwolf", "rgb": "(219, 215, 210)" }, { "hex": "17806D", "name": "Tropical Rain Forest", "rgb": "(23, 128, 109)" }, { "hex": "DEAA88", "name": "Tumbleweed", "rgb": "(222, 170, 136)" }, { "hex": "77DDE7", "name": "Turquoise Blue", "rgb": "(119, 221, 231)" }, { "hex": "FFFF66", "name": "Unmellow Yellow", "rgb": "(255, 255, 102)" }, { "hex": "926EAE", "name": "Violet (Purple)", "rgb": "(146, 110, 174)" }, { "hex": "324AB2", "name": "Violet Blue", "rgb": "(50, 74, 178)" }, { "hex": "F75394", "name": "Violet Red", "rgb": "(247, 83, 148)" }, { "hex": "FFA089", "name": "Vivid Tangerine", "rgb": "(255, 160, 137)" }, { "hex": "8F509D", "name": "Vivid Violet", "rgb": "(143, 80, 157)" }, { "hex": "FFFFFF", "name": "White", "rgb": "(255, 255, 255)" }, { "hex": "A2ADD0", "name": "Wild Blue Yonder", "rgb": "(162, 173, 208)" }, { "hex": "FF43A4", "name": "Wild Strawberry", "rgb": "(255, 67, 164)" }, { "hex": "FC6C85", "name": "Wild Watermelon", "rgb": "(252, 108, 133)" }, { "hex": "CDA4DE", "name": "Wisteria", "rgb": "(205, 164, 222)" }, { "hex": "FCE883", "name": "Yellow", "rgb": "(252, 232, 131)" }, { "hex": "C5E384", "name": "Yellow Green", "rgb": "(197, 227, 132)" }, { "hex": "FFAE42", "name": "Yellow Orange", "rgb": "(255, 174, 66)" } ] ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Images.xcassets/empty_placeholder.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "empty_placeholder.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "empty_placeholder@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Images.xcassets/search_icon.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "search_icon.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "search_icon@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Images.xcassets/tab_collection.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tab_collection.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tab_collection@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Images.xcassets/tab_search.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tab_search.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tab_search@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Images.xcassets/tab_table.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tab_table.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tab_table@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/SearchViewController.h ================================================ // // SearchViewController.h // Colors // // Created by Ignacio Romero Z. on 7/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "Color.h" @interface SearchViewController : UIViewController @property (nonatomic, strong) Color *selectedColor; @property (nonatomic, weak) IBOutlet UIImageView *colorView; @property (nonatomic, weak) IBOutlet UILabel *nameLabel; @property (nonatomic, weak) IBOutlet UILabel *hexLabel; @property (nonatomic, weak) IBOutlet UILabel *rgbLabel; @property (nonatomic, weak) IBOutlet UILabel *hexLegend; @property (nonatomic, weak) IBOutlet UILabel *rgbLegend; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/SearchViewController.m ================================================ // // SearchViewController.m // Colors // // Created by Ignacio Romero Z. on 7/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "SearchViewController.h" #import "Palette.h" #import "UIScrollView+EmptyDataSet.h" @interface SearchViewController () @property (nonatomic, strong) NSArray *searchResult; @property (nonatomic, getter = isShowingLandscape) BOOL showingLandscape; @end @implementation SearchViewController #pragma mark - View lifecycle - (void)awakeFromNib { [super awakeFromNib]; self.title = @"Search"; self.tabBarItem = [[UITabBarItem alloc] initWithTitle:self.title image:[UIImage imageNamed:@"tab_search"] tag:self.title.hash]; } - (void)loadView { [super loadView]; if ([self.navigationController.viewControllers count] == 1) { self.searchDisplayController.displaysSearchBarInNavigationBar = YES; } else { self.title = @"Detail"; } self.searchDisplayController.searchResultsTableView.emptyDataSetSource = self; self.searchDisplayController.searchResultsTableView.emptyDataSetDelegate = self; self.searchDisplayController.searchBar.placeholder = @"Search color"; self.searchDisplayController.searchResultsTableView.tableFooterView = [UIView new]; [self.searchDisplayController setValue:@"" forKey:@"_noResultsMessage"]; for (UIView *subview in self.view.subviews) { subview.autoresizingMask = UIViewAutoresizingNone; } } - (void)viewDidLoad { [super viewDidLoad]; self.showingLandscape = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); [self updateLayoutAnimatedWithDuration:0.0]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self updateContent]; } #pragma mark - Getters - (NSArray *)searchResult { if (_searchResult) { return _searchResult; } NSString *searchString = self.searchDisplayController.searchBar.text; if (searchString.length == 0) { return nil; } NSArray *colors = [[Palette sharedPalette] colors]; NSPredicate *precidate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@ || hex CONTAINS[cd] %@", searchString, searchString]; _searchResult = [colors filteredArrayUsingPredicate:precidate]; return _searchResult; } #pragma mark - Actions - (void)updateLayoutAnimatedWithDuration:(NSTimeInterval)duration { [UIView beginAnimations:@"" context:nil]; [UIView setAnimationDuration:duration]; [UIView setAnimationBeginsFromCurrentState:YES]; if (self.showingLandscape) { self.colorView.frame = CGRectMake(45.0, 88.0, 160.0, 160.0); self.nameLabel.frame = CGRectMake(240.0, 114.0, 280.0, 35.0); self.hexLabel.frame = CGRectMake(300.0, 170.0, 140.0, 20.0); self.rgbLabel.frame = CGRectMake(300.0, 200.0, 140.0, 20.0); self.hexLegend.frame = CGRectMake(240.0, 170.0, 60.0, 20.0); self.rgbLegend.frame = CGRectMake(240.0, 200.0, 60.0, 20.0); self.nameLabel.textAlignment = NSTextAlignmentLeft; } else { self.colorView.frame = CGRectMake(60.0, 130.0, 200.0, 200.0); self.nameLabel.frame = CGRectMake(20.0, 350.0, 280.0, 35.0); self.hexLabel.frame = CGRectMake(120.0, 420.0, 140.0, 20.0); self.rgbLabel.frame = CGRectMake(120.0, 450.0, 140.0, 20.0); self.hexLegend.frame = CGRectMake(60.0, 420.0, 60.0, 20.0); self.rgbLegend.frame = CGRectMake(60.0, 450.0, 60.0, 20.0); self.nameLabel.textAlignment = NSTextAlignmentCenter; } [UIView commitAnimations]; } - (void)updateContent { BOOL hide = self.selectedColor ? NO : YES; self.colorView.hidden = hide; self.nameLabel.hidden = hide; self.hexLabel.hidden = hide; self.rgbLabel.hidden = hide; self.hexLegend.hidden = hide; self.rgbLegend.hidden = hide; self.colorView.image = [Color roundImageForSize:self.colorView.frame.size withColor:self.selectedColor.color]; self.nameLabel.text = self.selectedColor.name; self.hexLabel.text = [NSString stringWithFormat:@"#%@", self.selectedColor.hex]; self.rgbLabel.text = self.selectedColor.rgb; } - (void)adjustToDeviceOrientation { self.showingLandscape = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); [self updateLayoutAnimatedWithDuration:0.25]; [self.searchDisplayController.searchResultsTableView reloadEmptyDataSet]; } #pragma mark - DZNEmptyDataSetSource Methods - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"No colors Found"; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"Make sure that all words are\nspelled correctly."; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { NSString *text = @"Add a New Color"; UIColor *color = nil; if (state == UIControlStateNormal) color = [UIColor colorWithRed:44/255.0 green:137/255.0 blue:202/255.0 alpha:1.0]; if (state == UIControlStateHighlighted) color = [UIColor colorWithRed:106/255.0 green:187/255.0 blue:227/255.0 alpha:1.0]; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:14.0], NSForegroundColorAttributeName: color, NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { return nil; } return [UIImage imageNamed:@"search_icon"]; } - (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor grayColor]; } - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor whiteColor]; } - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView { return nil; } #pragma mark - DZNEmptyDataSetSource Methods - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return NO; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { [self.searchDisplayController setActive:NO animated:YES]; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { NSLog(@"%s",__FUNCTION__); } #pragma mark - UITableViewDataSource Methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.searchResult.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.selectionStyle = UITableViewCellSelectionStyleDefault; cell.selectedBackgroundView = [UIView new]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0]; cell.textLabel.textColor = [UIColor colorWithWhite:0.125 alpha:1.0]; cell.detailTextLabel.textColor = [UIColor colorWithWhite:0.5 alpha:1.0]; } Color *color = self.searchResult[indexPath.row]; cell.textLabel.text = color.name; cell.detailTextLabel.text = [NSString stringWithFormat:@"#%@", color.hex]; cell.imageView.image = [Color roundThumbWithColor:color.color]; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 56.0; } #pragma mark - UITableViewDelegate Methods - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { self.selectedColor = self.searchResult[indexPath.row]; [self updateContent]; [self.searchDisplayController setActive:NO animated:YES]; } #pragma mark - UISearchDisplayControllerDelegate Methods - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { _searchResult = nil; return YES; } - (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView { // Do something } - (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { // Do something } #pragma mark - View Auto-Rotation - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (![self respondsToSelector:@selector(willTransitionToTraitCollection:withTransitionCoordinator:)]) { [self adjustToDeviceOrientation]; } } - (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id)coordinator { [self adjustToDeviceOrientation]; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/Storyboard.storyboard ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/System.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "icon-40@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "icon-40@3x.png", "scale" : "3x" }, { "size" : "57x57", "idiom" : "iphone", "filename" : "icon-57.png", "scale" : "1x" }, { "size" : "57x57", "idiom" : "iphone", "filename" : "icon-57@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "icon-60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "icon-60@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "icon-29~ipad.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "icon-29@2x~ipad.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "icon-40~ipad.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "icon-40@2x~ipad.png", "scale" : "2x" }, { "size" : "50x50", "idiom" : "ipad", "filename" : "icon-50~ipad.png", "scale" : "1x" }, { "size" : "50x50", "idiom" : "ipad", "filename" : "icon-50@2x~ipad.png", "scale" : "2x" }, { "size" : "72x72", "idiom" : "ipad", "filename" : "icon-72~ipad.png", "scale" : "1x" }, { "size" : "72x72", "idiom" : "ipad", "filename" : "icon-72@2x~ipad.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "icon-76~ipad.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "icon-76@2x~ipad.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "icon-120~car.png", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/System.xcassets/LaunchImage.launchimage/Contents.json ================================================ { "images" : [ { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "736h", "filename" : "Default-hd-plus@2x.png", "minimum-system-version" : "8.0", "orientation" : "portrait", "scale" : "3x" }, { "orientation" : "landscape", "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "8.0", "subtype" : "736h", "scale" : "3x" }, { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "667h", "filename" : "Default-hd@2x.png", "minimum-system-version" : "8.0", "orientation" : "portrait", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "7.0", "filename" : "Default@2x.png", "scale" : "2x" }, { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "retina4", "filename" : "Default-568h@2x.png", "minimum-system-version" : "7.0", "orientation" : "portrait", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "subtype" : "retina4", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/TableViewController.h ================================================ // // TableViewController.h // Colors // // Created by Ignacio Romero Z. on 6/29/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import @interface TableViewController : UITableViewController - (IBAction)refreshColors:(id)sender; - (IBAction)removeColors:(id)sender; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/TableViewController.m ================================================ // // TableViewController.m // Colors // // Created by Ignacio Romero Z. on 6/29/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "TableViewController.h" #import "SearchViewController.h" #import "Palette.h" #import "UIScrollView+EmptyDataSet.h" @interface TableViewController () @end @implementation TableViewController #pragma mark - View lifecycle - (void)awakeFromNib { [super awakeFromNib]; self.title = @"Table"; self.tabBarItem = [[UITabBarItem alloc] initWithTitle:self.title image:[UIImage imageNamed:@"tab_table"] tag:self.title.hash]; } - (void)loadView { [super loadView]; self.tableView.tableFooterView = [UIView new]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.tableView reloadData]; } #pragma mark - Actions - (IBAction)refreshColors:(id)sender { [[Palette sharedPalette] reloadAll]; [self.tableView reloadData]; } - (IBAction)removeColors:(id)sender { [[Palette sharedPalette] removeAll]; [self.tableView reloadData]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"table_push_detail"]) { SearchViewController *controller = [segue destinationViewController]; controller.selectedColor = sender; } } #pragma mark - DZNEmptyDataSetSource Methods - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"No colors loaded"; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"To show a list of random colors, tap on the refresh icon in the right top corner.\n\nTo clean the list, tap on the trash icon."; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { return [UIImage imageNamed:@"empty_placeholder"]; } - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor whiteColor]; } - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView { return nil; } - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView { return 0; } #pragma mark - DZNEmptyDataSetSource Methods - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return NO; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { NSLog(@"%s",__FUNCTION__); } #pragma mark - UITableViewDataSource Methods - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[Palette sharedPalette] colors].count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.selectionStyle = UITableViewCellSelectionStyleDefault; cell.selectedBackgroundView = [UIView new]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0]; cell.textLabel.textColor = [UIColor colorWithWhite:0.125 alpha:1.0]; cell.detailTextLabel.textColor = [UIColor colorWithWhite:0.5 alpha:1.0]; } Color *color = [[Palette sharedPalette] colors][indexPath.row]; cell.textLabel.text = color.name; cell.detailTextLabel.text = [NSString stringWithFormat:@"#%@", color.hex]; cell.imageView.image = [Color roundThumbWithColor:color.color]; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 56.0; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { Color *color = [[Palette sharedPalette] colors][indexPath.row]; [[Palette sharedPalette] removeColor:color]; [tableView beginUpdates]; [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; [tableView endUpdates]; } } #pragma mark - UITableViewDelegate Methods - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Color *color = [[Palette sharedPalette] colors][indexPath.row]; if ([self shouldPerformSegueWithIdentifier:@"table_push_detail" sender:color]) { [self performSegueWithIdentifier:@"table_push_detail" sender:color]; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; } - (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { if ([NSStringFromSelector(action) isEqualToString:@"copy:"]) { return YES; } return NO; } - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ if ([NSStringFromSelector(action) isEqualToString:@"copy:"]) { Color *color = [[Palette sharedPalette] colors][indexPath.row]; if (color.hex.length > 0) [[UIPasteboard generalPasteboard] setString:color.hex]; } }); } #pragma mark - View Auto-Rotation - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/en.lproj/InfoPlist.strings ================================================ /* Localized versions of Info.plist keys */ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors/main.m ================================================ // // main.m // Colors // // Created by Ignacio Romero Z. on 6/19/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 4F3E129A1952AEFC00D8CB5A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E12991952AEFC00D8CB5A /* Foundation.framework */; }; 4F3E129C1952AEFC00D8CB5A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E129B1952AEFC00D8CB5A /* CoreGraphics.framework */; }; 4F3E129E1952AEFC00D8CB5A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E129D1952AEFC00D8CB5A /* UIKit.framework */; }; 4F3E12F21953EF1000D8CB5A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3E12E51953EF1000D8CB5A /* AppDelegate.m */; }; 4F3E12F51953EF1000D8CB5A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4F3E12EA1953EF1000D8CB5A /* InfoPlist.strings */; }; 4F3E12F61953EF1000D8CB5A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F3E12EC1953EF1000D8CB5A /* Images.xcassets */; }; 4F3E12F71953EF1000D8CB5A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3E12ED1953EF1000D8CB5A /* main.m */; }; 4F3E12F81953EF1000D8CB5A /* CollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3E12EF1953EF1000D8CB5A /* CollectionViewController.m */; }; 4F48AECE1960B21000576D9A /* TableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F48AECD1960B21000576D9A /* TableViewController.m */; }; 4F657CBE19CD18BB00347199 /* System.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F657CBD19CD18BB00347199 /* System.xcassets */; }; 4FCD9A7F196705E4004DEA1B /* Palette.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FCD9A7B196705E4004DEA1B /* Palette.m */; }; 4FCD9A80196705E4004DEA1B /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = 4FCD9A7C196705E4004DEA1B /* colors.json */; }; 4FCD9A81196705E4004DEA1B /* Color.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FCD9A7E196705E4004DEA1B /* Color.m */; }; 4FCD9A8419675090004DEA1B /* SearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FCD9A8319675090004DEA1B /* SearchViewController.m */; }; ACBAEAF1427842F28B7038B2 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42C4998538C64921AFBF1CB8 /* libPods.a */; }; CC5692A9196CA6D60018AF45 /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CC5692A8196CA6D60018AF45 /* Storyboard.storyboard */; }; F550F3091CD09366005B8756 /* UIColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = F550F3081CD09366005B8756 /* UIColor+Hex.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 42C4998538C64921AFBF1CB8 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 4F3E12961952AEFC00D8CB5A /* Colors.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Colors.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4F3E12991952AEFC00D8CB5A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 4F3E129B1952AEFC00D8CB5A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 4F3E129D1952AEFC00D8CB5A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 4F3E12B21952AEFC00D8CB5A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 4F3E12E41953EF1000D8CB5A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 4F3E12E51953EF1000D8CB5A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 4F3E12E61953EF1000D8CB5A /* Colors-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Colors-Info.plist"; sourceTree = ""; }; 4F3E12E71953EF1000D8CB5A /* Colors-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Colors-Prefix.pch"; sourceTree = ""; }; 4F3E12EB1953EF1000D8CB5A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 4F3E12EC1953EF1000D8CB5A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 4F3E12ED1953EF1000D8CB5A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 4F3E12EE1953EF1000D8CB5A /* CollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionViewController.h; sourceTree = ""; }; 4F3E12EF1953EF1000D8CB5A /* CollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionViewController.m; sourceTree = ""; }; 4F48AECC1960B21000576D9A /* TableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewController.h; sourceTree = ""; }; 4F48AECD1960B21000576D9A /* TableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewController.m; sourceTree = ""; }; 4F657CBD19CD18BB00347199 /* System.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = System.xcassets; sourceTree = ""; }; 4FCD9A7A196705E4004DEA1B /* Palette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Palette.h; sourceTree = ""; }; 4FCD9A7B196705E4004DEA1B /* Palette.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Palette.m; sourceTree = ""; }; 4FCD9A7C196705E4004DEA1B /* colors.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = colors.json; sourceTree = ""; }; 4FCD9A7D196705E4004DEA1B /* Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Color.h; sourceTree = ""; }; 4FCD9A7E196705E4004DEA1B /* Color.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Color.m; sourceTree = ""; }; 4FCD9A8219675090004DEA1B /* SearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchViewController.h; sourceTree = ""; }; 4FCD9A8319675090004DEA1B /* SearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchViewController.m; sourceTree = ""; }; 5EF80E7302D0E7F3AD46146E /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; CC5692A8196CA6D60018AF45 /* Storyboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard.storyboard; sourceTree = ""; }; F550F3071CD09366005B8756 /* UIColor+Hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Hex.h"; sourceTree = ""; }; F550F3081CD09366005B8756 /* UIColor+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Hex.m"; sourceTree = ""; }; F81A7192908AC188B637508D /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 4F3E12931952AEFC00D8CB5A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 4F3E129C1952AEFC00D8CB5A /* CoreGraphics.framework in Frameworks */, 4F3E129E1952AEFC00D8CB5A /* UIKit.framework in Frameworks */, 4F3E129A1952AEFC00D8CB5A /* Foundation.framework in Frameworks */, ACBAEAF1427842F28B7038B2 /* libPods.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 4F3E128D1952AEFC00D8CB5A = { isa = PBXGroup; children = ( 4F3E12E31953EF1000D8CB5A /* Colors */, 4F3E12981952AEFC00D8CB5A /* Frameworks */, 4F3E12971952AEFC00D8CB5A /* Products */, 75782675F4B18AD5410455F6 /* Pods */, ); sourceTree = ""; }; 4F3E12971952AEFC00D8CB5A /* Products */ = { isa = PBXGroup; children = ( 4F3E12961952AEFC00D8CB5A /* Colors.app */, ); name = Products; sourceTree = ""; }; 4F3E12981952AEFC00D8CB5A /* Frameworks */ = { isa = PBXGroup; children = ( 4F3E12991952AEFC00D8CB5A /* Foundation.framework */, 4F3E129B1952AEFC00D8CB5A /* CoreGraphics.framework */, 4F3E129D1952AEFC00D8CB5A /* UIKit.framework */, 4F3E12B21952AEFC00D8CB5A /* XCTest.framework */, 42C4998538C64921AFBF1CB8 /* libPods.a */, ); name = Frameworks; sourceTree = ""; }; 4F3E12E31953EF1000D8CB5A /* Colors */ = { isa = PBXGroup; children = ( 4F3E12E41953EF1000D8CB5A /* AppDelegate.h */, 4F3E12E51953EF1000D8CB5A /* AppDelegate.m */, 4F3E12EE1953EF1000D8CB5A /* CollectionViewController.h */, 4F3E12EF1953EF1000D8CB5A /* CollectionViewController.m */, 4F48AECC1960B21000576D9A /* TableViewController.h */, 4F48AECD1960B21000576D9A /* TableViewController.m */, 4FCD9A8219675090004DEA1B /* SearchViewController.h */, 4FCD9A8319675090004DEA1B /* SearchViewController.m */, CC5692A8196CA6D60018AF45 /* Storyboard.storyboard */, 4FCD9A79196705E4004DEA1B /* DataSource */, 4F3E12FA1953EF2300D8CB5A /* Supporting Files */, ); path = Colors; sourceTree = ""; }; 4F3E12FA1953EF2300D8CB5A /* Supporting Files */ = { isa = PBXGroup; children = ( 4F3E12E61953EF1000D8CB5A /* Colors-Info.plist */, 4F3E12E71953EF1000D8CB5A /* Colors-Prefix.pch */, 4F3E12EA1953EF1000D8CB5A /* InfoPlist.strings */, 4F657CBD19CD18BB00347199 /* System.xcassets */, 4F3E12EC1953EF1000D8CB5A /* Images.xcassets */, 4F3E12ED1953EF1000D8CB5A /* main.m */, ); name = "Supporting Files"; sourceTree = ""; }; 4FCD9A79196705E4004DEA1B /* DataSource */ = { isa = PBXGroup; children = ( 4FCD9A7A196705E4004DEA1B /* Palette.h */, 4FCD9A7B196705E4004DEA1B /* Palette.m */, 4FCD9A7D196705E4004DEA1B /* Color.h */, 4FCD9A7E196705E4004DEA1B /* Color.m */, F550F3071CD09366005B8756 /* UIColor+Hex.h */, F550F3081CD09366005B8756 /* UIColor+Hex.m */, 4FCD9A7C196705E4004DEA1B /* colors.json */, ); path = DataSource; sourceTree = ""; }; 75782675F4B18AD5410455F6 /* Pods */ = { isa = PBXGroup; children = ( 5EF80E7302D0E7F3AD46146E /* Pods.debug.xcconfig */, F81A7192908AC188B637508D /* Pods.release.xcconfig */, ); name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 4F3E12951952AEFC00D8CB5A /* Colors */ = { isa = PBXNativeTarget; buildConfigurationList = 4F3E12C21952AEFC00D8CB5A /* Build configuration list for PBXNativeTarget "Colors" */; buildPhases = ( 71891DBC90CF4689BBFA47DF /* Check Pods Manifest.lock */, 4F3E12921952AEFC00D8CB5A /* Sources */, 4F3E12931952AEFC00D8CB5A /* Frameworks */, 4F3E12941952AEFC00D8CB5A /* Resources */, E53958B8421148EF94747BF0 /* Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); name = Colors; productName = Photos; productReference = 4F3E12961952AEFC00D8CB5A /* Colors.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 4F3E128E1952AEFC00D8CB5A /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0730; ORGANIZATIONNAME = "DZN Labs"; }; buildConfigurationList = 4F3E12911952AEFC00D8CB5A /* Build configuration list for PBXProject "Colors" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 4F3E128D1952AEFC00D8CB5A; productRefGroup = 4F3E12971952AEFC00D8CB5A /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 4F3E12951952AEFC00D8CB5A /* Colors */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 4F3E12941952AEFC00D8CB5A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F3E12F61953EF1000D8CB5A /* Images.xcassets in Resources */, CC5692A9196CA6D60018AF45 /* Storyboard.storyboard in Resources */, 4F657CBE19CD18BB00347199 /* System.xcassets in Resources */, 4FCD9A80196705E4004DEA1B /* colors.json in Resources */, 4F3E12F51953EF1000D8CB5A /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 71891DBC90CF4689BBFA47DF /* Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; E53958B8421148EF94747BF0 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 4F3E12921952AEFC00D8CB5A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F48AECE1960B21000576D9A /* TableViewController.m in Sources */, 4FCD9A81196705E4004DEA1B /* Color.m in Sources */, 4F3E12F71953EF1000D8CB5A /* main.m in Sources */, 4F3E12F21953EF1000D8CB5A /* AppDelegate.m in Sources */, 4F3E12F81953EF1000D8CB5A /* CollectionViewController.m in Sources */, F550F3091CD09366005B8756 /* UIColor+Hex.m in Sources */, 4FCD9A8419675090004DEA1B /* SearchViewController.m in Sources */, 4FCD9A7F196705E4004DEA1B /* Palette.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 4F3E12EA1953EF1000D8CB5A /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 4F3E12EB1953EF1000D8CB5A /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 4F3E12C01952AEFC00D8CB5A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; 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 = 7.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 4F3E12C11952AEFC00D8CB5A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; 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 = 7.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; 4F3E12C31952AEFC00D8CB5A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5EF80E7302D0E7F3AD46146E /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Colors/Colors-Prefix.pch"; INFOPLIST_FILE = "$(SRCROOT)/Colors/Colors-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "com.dzn.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Colors; WRAPPER_EXTENSION = app; }; name = Debug; }; 4F3E12C41952AEFC00D8CB5A /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = F81A7192908AC188B637508D /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Colors/Colors-Prefix.pch"; INFOPLIST_FILE = "$(SRCROOT)/Colors/Colors-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "com.dzn.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Colors; WRAPPER_EXTENSION = app; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 4F3E12911952AEFC00D8CB5A /* Build configuration list for PBXProject "Colors" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F3E12C01952AEFC00D8CB5A /* Debug */, 4F3E12C11952AEFC00D8CB5A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4F3E12C21952AEFC00D8CB5A /* Build configuration list for PBXNativeTarget "Colors" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F3E12C31952AEFC00D8CB5A /* Debug */, 4F3E12C41952AEFC00D8CB5A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 4F3E128E1952AEFC00D8CB5A /* Project object */; } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Colors.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Podfile ================================================ platform :ios, '7.0' pod 'DZNEmptyDataSet', :path => '../../' ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Local Podspecs/DZNEmptyDataSet.podspec.json ================================================ { "name": "DZNEmptyDataSet", "version": "1.8", "summary": "A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.", "description": "It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. The -reloadData call will be observed so the empty dataset will be configured whenever needed.", "homepage": "https://github.com/dzenbot/DZNEmptyDataSet", "license": { "type": "MIT", "file": "LICENSE" }, "authors": { "dzenbot": "iromero@dzen.cl" }, "platforms": { "ios": "6.0" }, "source": { "git": "https://github.com/dzenbot/DZNEmptyDataSet.git", "tag": "v1.8" }, "source_files": [ "Classes", "Source/**/*.{h,m}" ], "requires_arc": true, "frameworks": "UIKit" } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Pods.xcodeproj/project.pbxproj ================================================ archiveVersion 1 classes objectVersion 46 objects 009A39758E49E9694A8E5C4EDD6DCE54 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path DZNEmptyDataSet-prefix.pch sourceTree <group> 052A17875CB827423D627183396CEB60 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP YES ENABLE_NS_ASSERTIONS NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_PREPROCESSOR_DEFINITIONS RELEASE=1 GCC_WARN_64_TO_32_BIT_CONVERSION YES GCC_WARN_ABOUT_RETURN_TYPE YES GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 7.0 STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build VALIDATE_PRODUCT YES isa XCBuildConfiguration name Release 15A529C27057E4A57D259CBC6E6CE49C includeInIndex 1 isa PBXFileReference lastKnownFileType text path Pods-acknowledgements.markdown sourceTree <group> 161F43458CFDF6C64FEAB3F6F7EDD18C baseConfigurationReference 9C78D73CC565C991FEF831295E798251 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 7.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 1683F30D244E3EBCA51481C2EA5AFB16 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libPods.a path libPods.a sourceTree BUILT_PRODUCTS_DIR 16B46B5DFF54576D32FDD9907A11B162 buildActionMask 2147483647 files 1F8B2978073D2F63F8CC40BC20EC3C77 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 182967A704469F086D39FBC4FB9D9DC5 buildConfigurations DC46BC3B1A941EE54A06B3B482F79146 5D760236A50D2FB911D43ABC60C26311 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 1F8B2978073D2F63F8CC40BC20EC3C77 fileRef 6444EDA65F2380D3C9F82977B6A20720 isa PBXBuildFile 2A3AE06CCD875B17B41EF081DDEB1A96 baseConfigurationReference 9C78D73CC565C991FEF831295E798251 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 7.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug 2D8E8EC45A3A1A1D94AE762CB5028504 buildConfigurations B37F0F91F85060E28F1DAAB522DC7EC1 052A17875CB827423D627183396CEB60 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 433CD3331B6C3787F473C941B61FC68F children D0FB9306D21AF23A056944AE037CBFFF isa PBXGroup name Frameworks sourceTree <group> 498FA250C09408AC4152D23F64B6961A includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.debug.xcconfig sourceTree <group> 4CA7750C256B63FAB80B50EE2C46D216 fileRef 8114143C63FE34687D49DAAD0D59A116 isa PBXBuildFile 5473F25810E19AF29BD6BCB49FEDF703 isa PBXFileReference lastKnownFileType wrapper.framework name Foundation.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework sourceTree DEVELOPER_DIR 5D760236A50D2FB911D43ABC60C26311 baseConfigurationReference B557207A4B0600E8A5A91C708CA37940 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 7.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 5DB666AC1070276A7247E3A017AB9DC3 children BF2D7941834A9E7C490E51010404EA9A isa PBXGroup name Development Pods sourceTree <group> 5E0809F99EE5DA7A05A9BF3DF7146094 containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString E2598F99F53BD9E4E332CE8185C45536 remoteInfo DZNEmptyDataSet 641AE05DD55E5E6AC1590CD7B4A18F97 includeInIndex 1 isa PBXFileReference lastKnownFileType text.script.sh path Pods-resources.sh sourceTree <group> 6444EDA65F2380D3C9F82977B6A20720 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path UIScrollView+EmptyDataSet.h sourceTree <group> 655B9776F79777DA4B3C98CA0E9993BC buildActionMask 2147483647 files 7ADC549F8CBB02AA85CE170209FA8A1E E26D41C28286976FBF8BB5B8D3C82F9E isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 6FBD738EB3306B3DFAB49EBD5322EF20 children 6444EDA65F2380D3C9F82977B6A20720 F4E0C0ED87A13E9206052584395B1EF1 isa PBXGroup name Source path Source sourceTree <group> 72717A199A99A57DEE132B59DE2FD8C7 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libDZNEmptyDataSet.a path libDZNEmptyDataSet.a sourceTree BUILT_PRODUCTS_DIR 7ADC549F8CBB02AA85CE170209FA8A1E fileRef 5473F25810E19AF29BD6BCB49FEDF703 isa PBXBuildFile 7CA50C7ADF77CA24129903AE8AFCBF6C children B0064BBFC9E44A443611997FF63932A7 9C78D73CC565C991FEF831295E798251 8114143C63FE34687D49DAAD0D59A116 009A39758E49E9694A8E5C4EDD6DCE54 isa PBXGroup name Support Files path Examples/Colors/Pods/Target Support Files/DZNEmptyDataSet sourceTree <group> 7DB346D0F39D3F0E887471402A8071AB children BA6428E9F66FD5A23C0A2E06ED26CD2F 5DB666AC1070276A7247E3A017AB9DC3 433CD3331B6C3787F473C941B61FC68F CCA510CFBEA2D207524CDA0D73C3B561 D2411A5FE7F7A004607BED49990C37F4 isa PBXGroup sourceTree <group> 8114143C63FE34687D49DAAD0D59A116 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path DZNEmptyDataSet-dummy.m sourceTree <group> 8ACC91090BD54C33C91E6156D5D16427 fileRef A141BF8560DDFBF8BE6AB60B344A49A5 isa PBXBuildFile 90AA9AD5CC4EA1577D3B93BF9D78828D buildConfigurationList 182967A704469F086D39FBC4FB9D9DC5 buildPhases A77135A75ED791EDED04A7F4AB828570 FDDB5C012B7F0A01686E5424B494F675 buildRules dependencies CB4B5CE8708764DE7D713908A0CAF788 isa PBXNativeTarget name Pods productName Pods productReference 1683F30D244E3EBCA51481C2EA5AFB16 productType com.apple.product-type.library.static 952EEBFAF8F7E620423C9F156F25A506 children 15A529C27057E4A57D259CBC6E6CE49C BF59BC15D23E1E1912C8F334E7236813 A141BF8560DDFBF8BE6AB60B344A49A5 641AE05DD55E5E6AC1590CD7B4A18F97 498FA250C09408AC4152D23F64B6961A B557207A4B0600E8A5A91C708CA37940 isa PBXGroup name Pods path Target Support Files/Pods sourceTree <group> 9C78D73CC565C991FEF831295E798251 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet-Private.xcconfig sourceTree <group> A141BF8560DDFBF8BE6AB60B344A49A5 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path Pods-dummy.m sourceTree <group> A77135A75ED791EDED04A7F4AB828570 buildActionMask 2147483647 files 8ACC91090BD54C33C91E6156D5D16427 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 B0064BBFC9E44A443611997FF63932A7 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet.xcconfig sourceTree <group> B37F0F91F85060E28F1DAAB522DC7EC1 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_DYNAMIC_NO_PIC NO 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 GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 7.0 ONLY_ACTIVE_ARCH YES STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build isa XCBuildConfiguration name Debug B557207A4B0600E8A5A91C708CA37940 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.release.xcconfig sourceTree <group> B9811A8EB69F3AAF06F64CFC685A7CD1 fileRef F4E0C0ED87A13E9206052584395B1EF1 isa PBXBuildFile BA5F2A74204C78BC49DB2B36B70C3D69 fileRef 5473F25810E19AF29BD6BCB49FEDF703 isa PBXBuildFile BA6428E9F66FD5A23C0A2E06ED26CD2F includeInIndex 1 isa PBXFileReference lastKnownFileType text name Podfile path ../Podfile sourceTree SOURCE_ROOT xcLanguageSpecificationIdentifier xcode.lang.ruby BF2D7941834A9E7C490E51010404EA9A children 6FBD738EB3306B3DFAB49EBD5322EF20 7CA50C7ADF77CA24129903AE8AFCBF6C isa PBXGroup name DZNEmptyDataSet path ../../.. sourceTree <group> BF59BC15D23E1E1912C8F334E7236813 includeInIndex 1 isa PBXFileReference lastKnownFileType text.plist.xml path Pods-acknowledgements.plist sourceTree <group> C74B530738BBA17F6823E2396C6B0B1E buildConfigurations 2A3AE06CCD875B17B41EF081DDEB1A96 161F43458CFDF6C64FEAB3F6F7EDD18C defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList CB4B5CE8708764DE7D713908A0CAF788 isa PBXTargetDependency name DZNEmptyDataSet target E2598F99F53BD9E4E332CE8185C45536 targetProxy 5E0809F99EE5DA7A05A9BF3DF7146094 CCA510CFBEA2D207524CDA0D73C3B561 children 72717A199A99A57DEE132B59DE2FD8C7 1683F30D244E3EBCA51481C2EA5AFB16 isa PBXGroup name Products sourceTree <group> D0FB9306D21AF23A056944AE037CBFFF children 5473F25810E19AF29BD6BCB49FEDF703 F208D70DB209C0FFE5F1ABA89FA0988B isa PBXGroup name iOS sourceTree <group> D2411A5FE7F7A004607BED49990C37F4 children 952EEBFAF8F7E620423C9F156F25A506 isa PBXGroup name Targets Support Files sourceTree <group> D41D8CD98F00B204E9800998ECF8427E attributes LastSwiftUpdateCheck 0700 LastUpgradeCheck 0700 buildConfigurationList 2D8E8EC45A3A1A1D94AE762CB5028504 compatibilityVersion Xcode 3.2 developmentRegion English hasScannedForEncodings 0 isa PBXProject knownRegions en mainGroup 7DB346D0F39D3F0E887471402A8071AB productRefGroup CCA510CFBEA2D207524CDA0D73C3B561 projectDirPath projectReferences projectRoot targets E2598F99F53BD9E4E332CE8185C45536 90AA9AD5CC4EA1577D3B93BF9D78828D D9FF17FD4B8AC0085FEB3216E95427AE buildActionMask 2147483647 files 4CA7750C256B63FAB80B50EE2C46D216 B9811A8EB69F3AAF06F64CFC685A7CD1 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 DC46BC3B1A941EE54A06B3B482F79146 baseConfigurationReference 498FA250C09408AC4152D23F64B6961A buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 7.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug E2598F99F53BD9E4E332CE8185C45536 buildConfigurationList C74B530738BBA17F6823E2396C6B0B1E buildPhases D9FF17FD4B8AC0085FEB3216E95427AE 655B9776F79777DA4B3C98CA0E9993BC 16B46B5DFF54576D32FDD9907A11B162 buildRules dependencies isa PBXNativeTarget name DZNEmptyDataSet productName DZNEmptyDataSet productReference 72717A199A99A57DEE132B59DE2FD8C7 productType com.apple.product-type.library.static E26D41C28286976FBF8BB5B8D3C82F9E fileRef F208D70DB209C0FFE5F1ABA89FA0988B isa PBXBuildFile F208D70DB209C0FFE5F1ABA89FA0988B isa PBXFileReference lastKnownFileType wrapper.framework name UIKit.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework sourceTree DEVELOPER_DIR F4E0C0ED87A13E9206052584395B1EF1 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path UIScrollView+EmptyDataSet.m sourceTree <group> FDDB5C012B7F0A01686E5424B494F675 buildActionMask 2147483647 files BA5F2A74204C78BC49DB2B36B70C3D69 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 rootObject D41D8CD98F00B204E9800998ECF8427E ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DZNEmptyDataSet.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-Private.xcconfig ================================================ #include "DZNEmptyDataSet.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_LDFLAGS = ${DZNEMPTYDATASET_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-dummy.m ================================================ #import @interface PodsDummy_DZNEmptyDataSet : NSObject @end @implementation PodsDummy_DZNEmptyDataSet @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.xcconfig ================================================ DZNEMPTYDATASET_OTHER_LDFLAGS = -framework "UIKit" ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## DZNEmptyDataSet The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. Generated by CocoaPods - http://cocoapods.org ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/Pods/Pods-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. Title DZNEmptyDataSet Type PSGroupSpecifier FooterText Generated by CocoaPods - http://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/Pods/Pods-dummy.m ================================================ #import @interface PodsDummy_Pods : NSObject @end @implementation PodsDummy_Pods @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/Pods/Pods-resources.sh ================================================ #!/bin/sh set -e mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" XCASSET_FILES=() realpath() { DIRECTORY="$(cd "${1%/*}" && pwd)" FILENAME="${1##*/}" echo "$DIRECTORY/$FILENAME" } install_resource() { case $1 in *.storyboard) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" ;; *.xcdatamodeld) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" ;; *.xcmappingmodel) echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" ;; *.xcassets) ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" echo "$1" >> "$RESOURCES_TO_COPY" ;; *) echo "${PODS_ROOT}/$1" echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" ;; esac } mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do if [[ $line != "`realpath $PODS_ROOT`*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/Pods/Pods.debug.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Target Support Files/Pods/Pods.release.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/AppDelegate.h ================================================ // // AppDelegate.h // Countries // // Created by Ignacio on 6/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; - (void)saveContext; - (NSURL *)applicationDocumentsDirectory; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/AppDelegate.m ================================================ // // AppDelegate.m // Countries // // Created by Ignacio on 6/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "AppDelegate.h" #import "MainViewController.h" #import "NSManagedObjectContext+Hydrate.h" @implementation AppDelegate @synthesize managedObjectContext = _managedObjectContext; @synthesize managedObjectModel = _managedObjectModel; @synthesize persistentStoreCoordinator = _persistentStoreCoordinator; - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [NSManagedObjectContext setSharedContext:self.managedObjectContext]; return YES; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[MainViewController new]]; [self.window makeKeyAndVisible]; return YES; } #pragma mark - Core Data stack - (void)saveContext { NSError *error = nil; NSManagedObjectContext *managedObjectContext = self.managedObjectContext; if (managedObjectContext) { if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { // Replace this implementation with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } } } - (NSManagedObjectContext *)managedObjectContext { if (!_managedObjectContext) { NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator; if (coordinator) { _managedObjectContext = [[NSManagedObjectContext alloc] init]; [_managedObjectContext setPersistentStoreCoordinator:coordinator]; } } return _managedObjectContext; } - (NSManagedObjectModel *)managedObjectModel { if (!_managedObjectModel) { NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; } return _managedObjectModel; } - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (!_persistentStoreCoordinator) { NSError *error = nil; _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"com.dzn.countries.sqlite"]; if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } } return _persistentStoreCoordinator; } #pragma mark - Application's Documents directory - (NSURL *)applicationDocumentsDirectory { return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Country.h ================================================ // // Country.h // Countries // // Created by Ignacio Romero Z. on 6/22/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import @interface Country : NSManagedObject @property (nonatomic, retain) NSString * name; @property (nonatomic, retain) NSString * code; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Country.m ================================================ // // Country.m // Countries // // Created by Ignacio Romero Z. on 6/22/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "Country.h" @implementation Country @dynamic name; @dynamic code; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ad.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ad.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ad@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ae.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ae.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ae@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/af.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "af.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "af@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ag.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ag.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ag@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/al.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "al.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "al@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/am.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "am.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "am@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ar.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ar.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ar@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/at.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "at.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "at@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/au.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "au.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "au@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/az.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "az.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "az@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ba.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ba.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ba@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bd.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bd.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bd@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/be.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "be.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "be@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bf.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bf.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bf@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bh.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bh.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bh@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bi.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bi.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bi@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bj.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bj.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bj@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bo.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bo.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bo@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/br.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "br.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "br@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bs.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bs.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bs@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bt.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bt.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bt@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/by.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "by.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "by@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/bz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "bz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "bz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ca.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ca.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ca@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cd.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cd.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cd@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cf.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cf.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cf@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ch.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ch.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ch@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ci.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ci.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ci@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cl.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cl.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cl@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/co.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "co.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "co@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cu.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cu.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cu@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cv.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cv.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cv@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/cz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "cz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "cz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/de.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "de.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "de@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/dj.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "dj.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "dj@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/dk.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "dk.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "dk@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/dm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "dm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "dm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/do.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "do.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "do@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/dz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "dz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "dz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ec.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ec.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ec@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ee.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ee.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ee@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/eg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "eg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "eg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/er.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "er.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "er@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/es.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "es.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "es@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/et.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "et.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "et@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/fi.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "fi.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "fi@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/fj.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "fj.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "fj@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/fm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "fm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "fm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/fr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "fr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "fr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ga.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ga.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ga@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gd.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gd.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gd@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ge.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ge.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ge@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gh.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gh.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gh@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gq.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gq.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gq@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gt.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gt.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gt@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/gy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "gy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "gy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/hn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "hn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "hn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/hr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "hr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "hr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ht.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ht.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ht@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/hu.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "hu.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "hu@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/id.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "id.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "id@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ie.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ie.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ie@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/il.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "il.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "il@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/in.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "in.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "in@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/iq.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "iq.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "iq@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ir.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ir.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ir@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/is.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "is.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "is@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/it.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "it.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "it@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/jm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "jm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "jm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/jo.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "jo.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "jo@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/jp.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "jp.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "jp@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ke.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ke.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ke@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kh.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kh.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kh@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ki.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ki.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ki@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/km.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "km.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "km@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kp.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kp.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kp@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kv.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kv.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kv@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/kz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "kz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "kz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/la.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "la.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "la@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lc.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lc.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lc@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/li.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "li.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "li@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lk.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lk.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lk@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ls.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ls.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ls@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lt.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lt.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lt@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lu.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lu.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lu@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/lv.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "lv.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "lv@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ly.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ly.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ly@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ma.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ma.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ma@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mc.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mc.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mc@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/md.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "md.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "md@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/me.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "me.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "me@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mh.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mh.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mh@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mk.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mk.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mk@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ml.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ml.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ml@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mt.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mt.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mt@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mu.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mu.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mu@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mv.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mv.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mv@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mx.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mx.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mx@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/my.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "my.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "my@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/mz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "mz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "mz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/na.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "na.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "na@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ne.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ne.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ne@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ng.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ng.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ng@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ni.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ni.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ni@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/nl.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "nl.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "nl@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/no.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "no.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "no@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/np.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "np.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "np@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/nr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "nr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "nr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/nz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "nz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "nz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/om.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "om.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "om@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pa.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pa.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pa@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pe.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pe.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pe@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ph.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ph.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ph@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pk.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pk.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pk@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pl.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pl.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pl@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pt.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pt.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pt@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/pw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "pw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "pw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/py.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "py.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "py@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/qa.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "qa.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "qa@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ro.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ro.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ro@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/rs.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "rs.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "rs@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ru.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ru.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ru@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/rw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "rw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "rw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sa.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sa.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sa@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sb.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sb.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sb@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sc.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sc.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sc@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sd.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sd.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sd@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/se.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "se.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "se@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/search_icon.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "search_icon.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "search_icon@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/si.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "si.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "si@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sk.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sk.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sk@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sl.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sl.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sl@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/so.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "so.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "so@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ss.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ss.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ss@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/st.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "st.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "st@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sv.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sv.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sv@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/sz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "sz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "sz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/td.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "td.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "td@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tg.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tg.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tg@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/th.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "th.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "th@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tj.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tj.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tj@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tl.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tl.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tl@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/to.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "to.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "to@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tr.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tr.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tr@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tt.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tt.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tt@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tv.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tv.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tv@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/tz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "tz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "tz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ua.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ua.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ua@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ug.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ug.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ug@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/unknown.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "unknown.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "unknown@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/us.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "us.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "us@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/uy.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "uy.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "uy@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/uz.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "uz.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "uz@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/va.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "va.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "va@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/vc.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "vc.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "vc@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ve.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ve.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ve@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/vn.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "vn.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "vn@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/vu.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "vu.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "vu@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ws.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ws.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ws@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/ye.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "ye.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "ye@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/za.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "za.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "za@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/zm.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "zm.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "zm@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Images.xcassets/zw.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "zw.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "zw@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/MainViewController.h ================================================ // // ViewController.h // Countries // // Created by Ignacio on 6/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "Country.h" @interface MainViewController : UIViewController @property (nonatomic, strong) UITableView *tableView; @property (nonatomic, strong) UISearchBar *searchBar; @property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/MainViewController.m ================================================ // // ViewController.m // Countries // // Created by Ignacio on 6/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import "MainViewController.h" #import "NSManagedObjectContext+Hydrate.h" #import "UIScrollView+EmptyDataSet.h" @interface MainViewController () { UIView *_loadingView; } @property (nonatomic) BOOL loading; @property (nonatomic) BOOL loaded; @property (nonatomic) BOOL searching; @property (nonatomic) BOOL beganUpdates; @property (nonatomic, strong) NSLayoutConstraint *keyboardHC; @end @implementation MainViewController - (id)init { self = [super init]; if (self) { [self populateContent]; } return self; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; self.title = @"Countries of the World"; self.automaticallyAdjustsScrollViewInsets = NO; self.edgesForExtendedLayout = UIRectEdgeNone; self.view.backgroundColor = [UIColor whiteColor]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadContent:)]; self.loading = YES; [self.view addSubview:self.tableView]; [self.view addSubview:self.searchBar]; [self setupViewConstraints]; } #pragma mark - Getter Methods - (UITableView *)tableView { if (!_tableView) { _tableView = [UITableView new]; _tableView.translatesAutoresizingMaskIntoConstraints = NO; _tableView.delegate = self; _tableView.dataSource = self; _tableView.emptyDataSetSource = self; _tableView.emptyDataSetDelegate = self; _tableView.tableFooterView = [UIView new]; } return _tableView; } - (UISearchBar *)searchBar { if (!_searchBar) { _searchBar = [UISearchBar new]; _searchBar.translatesAutoresizingMaskIntoConstraints = NO; _searchBar.delegate = self; _searchBar.placeholder = @"Search Country"; _searchBar.searchBarStyle = UISearchBarStyleMinimal; } return _searchBar; } #pragma mark - MainViewController Methods - (void)populateContent { // A list of countries in JSON by Félix Bellanger https://gist.github.com/Keeguon/2310008 NSString *path = [[NSBundle mainBundle] pathForResource:@"countries" ofType:@"json"]; [[NSManagedObjectContext sharedContext] hydrateStoreWithJSONAtPath:path attributeMappings:nil forEntityName:@"Country"]; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); } - (void)reloadContent:(id)sender { self.loading = !self.loading; self.searchBar.userInteractionEnabled = !self.loading; self.searchBar.alpha = self.loading ? 0.5 : 1.0; [self.tableView reloadData]; } #pragma mark - DZNEmptyDataSetSource Methods - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { return nil; } - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { if (self.loading) { return nil; } NSString *text = [NSString stringWithFormat:@"No countries found matching\n%@.", self.searchBar.text]; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:17.0], NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], NSParagraphStyleAttributeName: paragraphStyle}; NSMutableAttributedString *attributedTitle = [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; [attributedTitle addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:17.0] range:[text rangeOfString:self.searchBar.text]]; return attributedTitle; } - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { if (self.loading || ([self.searchBar isFirstResponder] && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))) { return nil; } NSString *text = @"Search in Wikipedia"; UIColor *textColor = (state == UIControlStateNormal) ? [UIColor colorWithRed:0/255.0 green:122/255.0 blue:255/255.0 alpha:1.0] : [UIColor colorWithRed:204/255.0 green:228/255.0 blue:255/255.0 alpha:1.0]; NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:16.0], NSForegroundColorAttributeName: textColor}; NSMutableAttributedString *attributedTitle = [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; return attributedTitle; } - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { if (self.loading || ([self.searchBar isFirstResponder] && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))) { return nil; } return [UIImage imageNamed:@"search_icon"]; } - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor whiteColor]; } - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView { if (self.loading) { UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; [activityView startAnimating]; return activityView; } return nil; } - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView { return 0; } #pragma mark - DZNEmptyDataSetSource Methods - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return YES; } - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { if ([self.searchBar isFirstResponder]) { [self.searchBar resignFirstResponder]; } } - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { if ([self.searchBar isFirstResponder] && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { return; } NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://en.wikipedia.org/wiki/%@", self.searchBar.text]]; if ([[UIApplication sharedApplication] canOpenURL:URL]) { [[UIApplication sharedApplication] openURL:URL]; } } - (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView { return CGPointZero; } #pragma mark - UITableViewDataSource Methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [[self.fetchedResultsController sections] count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (self.loading) { return 0; } id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; return [sectionInfo numberOfObjects]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; cell.accessoryType = UITableViewCellAccessoryNone; cell.textLabel.textColor = [UIColor darkGrayColor]; cell.detailTextLabel.textColor = [UIColor grayColor]; cell.imageView.layer.shadowColor = [UIColor blackColor].CGColor; cell.imageView.layer.shadowOpacity = 0.4; cell.imageView.layer.shadowRadius = 1.5; cell.imageView.layer.shadowOffset = CGSizeZero; cell.imageView.layer.shouldRasterize = YES; cell.imageView.layer.rasterizationScale = [UIScreen mainScreen].scale; } [self configureCell:cell atIndexPath:indexPath]; return cell; } - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { Country *country = [self.fetchedResultsController objectAtIndexPath:indexPath]; cell.textLabel.text = country.name; cell.detailTextLabel.text = country.code; UIImage *image = [UIImage imageNamed:[country.code lowercaseString]]; if (!image) image = [UIImage imageNamed:@"unknown"]; cell.imageView.image = image; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 44.0; } #pragma mark - NSFetchedResultsControllerDelegate Methods - (NSFetchedResultsController *)fetchedResultsController { if (!_fetchedResultsController) { NSManagedObjectContext *context = [NSManagedObjectContext sharedContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([Country class])]; fetchRequest.sortDescriptors = @[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]]; _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil]; _fetchedResultsController.delegate = self; NSError *error = nil; if (![_fetchedResultsController performFetch:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); } } if (self.searching && self.searchBar.text.length > 0) { _fetchedResultsController.fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@ || code CONTAINS[cd] %@", self.searchBar.text, self.searchBar.text]; } else { _fetchedResultsController.fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name != nil"]; } NSError *error = nil; if (![_fetchedResultsController performFetch:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); } return _fetchedResultsController; } - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { if (![self beganUpdates] && self.loaded) { [self.tableView beginUpdates]; [self setBeganUpdates:YES]; } } - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type { if (!self.loaded) { return; } switch(type) { case NSFetchedResultsChangeInsert: [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationAutomatic]; break; case NSFetchedResultsChangeDelete: [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationAutomatic]; break; default: return; } } - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { if (!self.loaded) { return; } switch(type) { case NSFetchedResultsChangeInsert: [self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; break; case NSFetchedResultsChangeDelete: [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; break; case NSFetchedResultsChangeUpdate: [self configureCell:[self.tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath]; break; case NSFetchedResultsChangeMove: [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; [self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; break; } } - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { if ([self beganUpdates]) { [self.tableView endUpdates]; [self setBeganUpdates:NO]; } } #pragma mark - UISearchBarDelegate Methods - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { return YES; } - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { return YES; } - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { [searchBar setShowsCancelButton:YES animated:YES]; } - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { if (searchBar.text.length > 0) { return; } [searchBar setShowsCancelButton:NO animated:YES]; self.searching = NO; [self.tableView reloadData]; } - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { searchBar.text = nil; [searchBar resignFirstResponder]; } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.searching = YES; [self.tableView reloadData]; } #pragma mark - Auto-Layout Methods - (void)setupViewConstraints { NSDictionary *views = @{@"searchBar": self.searchBar, @"tableView": self.tableView}; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[searchBar]|" options:0 metrics:nil views:views]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tableView]|" options:0 metrics:nil views:views]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[searchBar(==44)]-0@999-[tableView(>=0@750)]|" options:0 metrics:nil views:views]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", NSLayoutAttributeBottom]; self.keyboardHC = [[self.view.constraints filteredArrayUsingPredicate:predicate] firstObject]; } - (void)updateViewConstraintsAnimated:(NSNotification *)note { CGFloat duration = [[note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; CGFloat curve = [[note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] floatValue]; CGRect endFrame = CGRectZero; [[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&endFrame]; CGFloat minY = CGRectGetMinY(endFrame); CGFloat keyboardHeight = endFrame.size.height; // Invert values when landscape, for iOS7 or prior // In iOS8, Apple finally fixed the keyboard endframe values by returning the correct height in landscape orientation if (![UIInputViewController class] && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { keyboardHeight = endFrame.size.width; } if (keyboardHeight == CGRectGetHeight([UIScreen mainScreen].bounds)) keyboardHeight = 0; self.keyboardHC.constant = (minY == [UIScreen mainScreen].bounds.size.height) ? 0.0 : keyboardHeight; [UIView animateWithDuration:duration delay:0.0 options:curve animations:^{ [self.view layoutIfNeeded]; } completion:NULL]; } #pragma mark - Keyboard Events - (void)keyboardWillShow:(NSNotification *)note { [self updateViewConstraintsAnimated:note]; } - (void)keyboardWillHide:(NSNotification *)note { [self updateViewConstraintsAnimated:note]; } #pragma mark - View Auto-Rotation - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (![UIInputViewController class]) { [self.tableView reloadEmptyDataSet]; } } - (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id)coordinator { [self.tableView reloadEmptyDataSet]; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return YES; } #pragma mark - View lifeterm - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Model.xcdatamodeld/Model.xcdatamodel/contents ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Supporting Files/Countries-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Supporting Files/Countries-Prefix.pch ================================================ // // Prefix header // // The contents of this file are implicitly included at the beginning of every source file. // #import #ifndef __IPHONE_5_0 #warning "This project uses features only available in iOS SDK 5.0 and later." #endif #ifdef __OBJC__ #import #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/Supporting Files/main.m ================================================ // // main.m // Countries // // Created by Ignacio on 6/4/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/System.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "icon-29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "icon-40@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "icon-40@3x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "icon-60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "icon-60@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "icon-29~ipad.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "icon-29@2x~ipad.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "icon-40~ipad.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "icon-40@2x~ipad.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "icon-76~ipad.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "icon-76@2x~ipad.png", "scale" : "2x" }, { "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/System.xcassets/LaunchImage.launchimage/Contents.json ================================================ { "images" : [ { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "736h", "filename" : "Default-hd-plus@2x.png", "minimum-system-version" : "8.0", "orientation" : "portrait", "scale" : "3x" }, { "orientation" : "landscape", "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "8.0", "subtype" : "736h", "scale" : "3x" }, { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "667h", "filename" : "Default-hd@2x.png", "minimum-system-version" : "8.0", "orientation" : "portrait", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "7.0", "filename" : "default@2x.png", "scale" : "2x" }, { "extent" : "full-screen", "idiom" : "iphone", "subtype" : "retina4", "filename" : "default-568@2x.png", "minimum-system-version" : "7.0", "orientation" : "portrait", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "subtype" : "retina4", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "ipad", "extent" : "full-screen", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "to-status-bar", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", "extent" : "full-screen", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/countries.json ================================================ [ {"name": "Afghanistan", "code": "AF"}, {"name": "Åland Islands", "code": "AX"}, {"name": "Albania", "code": "AL"}, {"name": "Algeria", "code": "DZ"}, {"name": "American Samoa", "code": "AS"}, {"name": "AndorrA", "code": "AD"}, {"name": "Angola", "code": "AO"}, {"name": "Anguilla", "code": "AI"}, {"name": "Antarctica", "code": "AQ"}, {"name": "Antigua and Barbuda", "code": "AG"}, {"name": "Argentina", "code": "AR"}, {"name": "Armenia", "code": "AM"}, {"name": "Aruba", "code": "AW"}, {"name": "Australia", "code": "AU"}, {"name": "Austria", "code": "AT"}, {"name": "Azerbaijan", "code": "AZ"}, {"name": "Bahamas", "code": "BS"}, {"name": "Bahrain", "code": "BH"}, {"name": "Bangladesh", "code": "BD"}, {"name": "Barbados", "code": "BB"}, {"name": "Belarus", "code": "BY"}, {"name": "Belgium", "code": "BE"}, {"name": "Belize", "code": "BZ"}, {"name": "Benin", "code": "BJ"}, {"name": "Bermuda", "code": "BM"}, {"name": "Bhutan", "code": "BT"}, {"name": "Bolivia", "code": "BO"}, {"name": "Bosnia and Herzegovina", "code": "BA"}, {"name": "Botswana", "code": "BW"}, {"name": "Bouvet Island", "code": "BV"}, {"name": "Brazil", "code": "BR"}, {"name": "British Indian Ocean Territory", "code": "IO"}, {"name": "Brunei Darussalam", "code": "BN"}, {"name": "Bulgaria", "code": "BG"}, {"name": "Burkina Faso", "code": "BF"}, {"name": "Burundi", "code": "BI"}, {"name": "Cambodia", "code": "KH"}, {"name": "Cameroon", "code": "CM"}, {"name": "Canada", "code": "CA"}, {"name": "Cape Verde", "code": "CV"}, {"name": "Cayman Islands", "code": "KY"}, {"name": "Central African Republic", "code": "CF"}, {"name": "Chad", "code": "TD"}, {"name": "Chile", "code": "CL"}, {"name": "China", "code": "CN"}, {"name": "Christmas Island", "code": "CX"}, {"name": "Cocos (Keeling) Islands", "code": "CC"}, {"name": "Colombia", "code": "CO"}, {"name": "Comoros", "code": "KM"}, {"name": "Congo", "code": "CG"}, {"name": "Congo, The Democratic Republic of the", "code": "CD"}, {"name": "Cook Islands", "code": "CK"}, {"name": "Costa Rica", "code": "CR"}, {"name": "Cote D\"Ivoire", "code": "CI"}, {"name": "Croatia", "code": "HR"}, {"name": "Cuba", "code": "CU"}, {"name": "Cyprus", "code": "CY"}, {"name": "Czech Republic", "code": "CZ"}, {"name": "Denmark", "code": "DK"}, {"name": "Djibouti", "code": "DJ"}, {"name": "Dominica", "code": "DM"}, {"name": "Dominican Republic", "code": "DO"}, {"name": "Ecuador", "code": "EC"}, {"name": "Egypt", "code": "EG"}, {"name": "El Salvador", "code": "SV"}, {"name": "Equatorial Guinea", "code": "GQ"}, {"name": "Eritrea", "code": "ER"}, {"name": "Estonia", "code": "EE"}, {"name": "Ethiopia", "code": "ET"}, {"name": "Falkland Islands (Malvinas)", "code": "FK"}, {"name": "Faroe Islands", "code": "FO"}, {"name": "Fiji", "code": "FJ"}, {"name": "Finland", "code": "FI"}, {"name": "France", "code": "FR"}, {"name": "French Guiana", "code": "GF"}, {"name": "French Polynesia", "code": "PF"}, {"name": "French Southern Territories", "code": "TF"}, {"name": "Gabon", "code": "GA"}, {"name": "Gambia", "code": "GM"}, {"name": "Georgia", "code": "GE"}, {"name": "Germany", "code": "DE"}, {"name": "Ghana", "code": "GH"}, {"name": "Gibraltar", "code": "GI"}, {"name": "Greece", "code": "GR"}, {"name": "Greenland", "code": "GL"}, {"name": "Grenada", "code": "GD"}, {"name": "Guadeloupe", "code": "GP"}, {"name": "Guam", "code": "GU"}, {"name": "Guatemala", "code": "GT"}, {"name": "Guernsey", "code": "GG"}, {"name": "Guinea", "code": "GN"}, {"name": "Guinea-Bissau", "code": "GW"}, {"name": "Guyana", "code": "GY"}, {"name": "Haiti", "code": "HT"}, {"name": "Heard Island and Mcdonald Islands", "code": "HM"}, {"name": "Holy See (Vatican City State)", "code": "VA"}, {"name": "Honduras", "code": "HN"}, {"name": "Hong Kong", "code": "HK"}, {"name": "Hungary", "code": "HU"}, {"name": "Iceland", "code": "IS"}, {"name": "India", "code": "IN"}, {"name": "Indonesia", "code": "ID"}, {"name": "Iran, Islamic Republic Of", "code": "IR"}, {"name": "Iraq", "code": "IQ"}, {"name": "Ireland", "code": "IE"}, {"name": "Isle of Man", "code": "IM"}, {"name": "Israel", "code": "IL"}, {"name": "Italy", "code": "IT"}, {"name": "Jamaica", "code": "JM"}, {"name": "Japan", "code": "JP"}, {"name": "Jersey", "code": "JE"}, {"name": "Jordan", "code": "JO"}, {"name": "Kazakhstan", "code": "KZ"}, {"name": "Kenya", "code": "KE"}, {"name": "Kiribati", "code": "KI"}, {"name": "Korea, Democratic People\"S Republic of", "code": "KP"}, {"name": "Korea, Republic of", "code": "KR"}, {"name": "Kuwait", "code": "KW"}, {"name": "Kyrgyzstan", "code": "KG"}, {"name": "Lao People\"S Democratic Republic", "code": "LA"}, {"name": "Latvia", "code": "LV"}, {"name": "Lebanon", "code": "LB"}, {"name": "Lesotho", "code": "LS"}, {"name": "Liberia", "code": "LR"}, {"name": "Libyan Arab Jamahiriya", "code": "LY"}, {"name": "Liechtenstein", "code": "LI"}, {"name": "Lithuania", "code": "LT"}, {"name": "Luxembourg", "code": "LU"}, {"name": "Macao", "code": "MO"}, {"name": "Macedonia, The Former Yugoslav Republic of", "code": "MK"}, {"name": "Madagascar", "code": "MG"}, {"name": "Malawi", "code": "MW"}, {"name": "Malaysia", "code": "MY"}, {"name": "Maldives", "code": "MV"}, {"name": "Mali", "code": "ML"}, {"name": "Malta", "code": "MT"}, {"name": "Marshall Islands", "code": "MH"}, {"name": "Martinique", "code": "MQ"}, {"name": "Mauritania", "code": "MR"}, {"name": "Mauritius", "code": "MU"}, {"name": "Mayotte", "code": "YT"}, {"name": "Mexico", "code": "MX"}, {"name": "Micronesia, Federated States of", "code": "FM"}, {"name": "Moldova, Republic of", "code": "MD"}, {"name": "Monaco", "code": "MC"}, {"name": "Mongolia", "code": "MN"}, {"name": "Montserrat", "code": "MS"}, {"name": "Morocco", "code": "MA"}, {"name": "Mozambique", "code": "MZ"}, {"name": "Myanmar", "code": "MM"}, {"name": "Namibia", "code": "NA"}, {"name": "Nauru", "code": "NR"}, {"name": "Nepal", "code": "NP"}, {"name": "Netherlands", "code": "NL"}, {"name": "Netherlands Antilles", "code": "AN"}, {"name": "New Caledonia", "code": "NC"}, {"name": "New Zealand", "code": "NZ"}, {"name": "Nicaragua", "code": "NI"}, {"name": "Niger", "code": "NE"}, {"name": "Nigeria", "code": "NG"}, {"name": "Niue", "code": "NU"}, {"name": "Norfolk Island", "code": "NF"}, {"name": "Northern Mariana Islands", "code": "MP"}, {"name": "Norway", "code": "NO"}, {"name": "Oman", "code": "OM"}, {"name": "Pakistan", "code": "PK"}, {"name": "Palau", "code": "PW"}, {"name": "Palestinian Territory, Occupied", "code": "PS"}, {"name": "Panama", "code": "PA"}, {"name": "Papua New Guinea", "code": "PG"}, {"name": "Paraguay", "code": "PY"}, {"name": "Peru", "code": "PE"}, {"name": "Philippines", "code": "PH"}, {"name": "Pitcairn", "code": "PN"}, {"name": "Poland", "code": "PL"}, {"name": "Portugal", "code": "PT"}, {"name": "Puerto Rico", "code": "PR"}, {"name": "Qatar", "code": "QA"}, {"name": "Reunion", "code": "RE"}, {"name": "Romania", "code": "RO"}, {"name": "Russian Federation", "code": "RU"}, {"name": "RWANDA", "code": "RW"}, {"name": "Saint Helena", "code": "SH"}, {"name": "Saint Kitts and Nevis", "code": "KN"}, {"name": "Saint Lucia", "code": "LC"}, {"name": "Saint Pierre and Miquelon", "code": "PM"}, {"name": "Saint Vincent and the Grenadines", "code": "VC"}, {"name": "Samoa", "code": "WS"}, {"name": "San Marino", "code": "SM"}, {"name": "Sao Tome and Principe", "code": "ST"}, {"name": "Saudi Arabia", "code": "SA"}, {"name": "Senegal", "code": "SN"}, {"name": "Serbia and Montenegro", "code": "CS"}, {"name": "Seychelles", "code": "SC"}, {"name": "Sierra Leone", "code": "SL"}, {"name": "Singapore", "code": "SG"}, {"name": "Slovakia", "code": "SK"}, {"name": "Slovenia", "code": "SI"}, {"name": "Solomon Islands", "code": "SB"}, {"name": "Somalia", "code": "SO"}, {"name": "South Africa", "code": "ZA"}, {"name": "South Georgia and the South Sandwich Islands", "code": "GS"}, {"name": "Spain", "code": "ES"}, {"name": "Sri Lanka", "code": "LK"}, {"name": "Sudan", "code": "SD"}, {"name": "Suriname", "code": "SR"}, {"name": "Svalbard and Jan Mayen", "code": "SJ"}, {"name": "Swaziland", "code": "SZ"}, {"name": "Sweden", "code": "SE"}, {"name": "Switzerland", "code": "CH"}, {"name": "Syrian Arab Republic", "code": "SY"}, {"name": "Taiwan, Province of China", "code": "TW"}, {"name": "Tajikistan", "code": "TJ"}, {"name": "Tanzania, United Republic of", "code": "TZ"}, {"name": "Thailand", "code": "TH"}, {"name": "Timor-Leste", "code": "TL"}, {"name": "Togo", "code": "TG"}, {"name": "Tokelau", "code": "TK"}, {"name": "Tonga", "code": "TO"}, {"name": "Trinidad and Tobago", "code": "TT"}, {"name": "Tunisia", "code": "TN"}, {"name": "Turkey", "code": "TR"}, {"name": "Turkmenistan", "code": "TM"}, {"name": "Turks and Caicos Islands", "code": "TC"}, {"name": "Tuvalu", "code": "TV"}, {"name": "Uganda", "code": "UG"}, {"name": "Ukraine", "code": "UA"}, {"name": "United Arab Emirates", "code": "AE"}, {"name": "United Kingdom", "code": "GB"}, {"name": "United States", "code": "US"}, {"name": "United States Minor Outlying Islands", "code": "UM"}, {"name": "Uruguay", "code": "UY"}, {"name": "Uzbekistan", "code": "UZ"}, {"name": "Vanuatu", "code": "VU"}, {"name": "Venezuela", "code": "VE"}, {"name": "Viet Nam", "code": "VN"}, {"name": "Virgin Islands, British", "code": "VG"}, {"name": "Virgin Islands, U.S.", "code": "VI"}, {"name": "Wallis and Futuna", "code": "WF"}, {"name": "Western Sahara", "code": "EH"}, {"name": "Yemen", "code": "YE"}, {"name": "Zambia", "code": "ZM"}, {"name": "Zimbabwe", "code": "ZW"} ] ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries/en.lproj/InfoPlist.strings ================================================ /* Localized versions of Info.plist keys */ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 02814654A00E4227802251C5 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AED14F1ABCD94E898178FF50 /* libPods.a */; }; 4F44C93E193FD8B000E34052 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F44C93D193FD8B000E34052 /* Foundation.framework */; }; 4F44C940193FD8B000E34052 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F44C93F193FD8B000E34052 /* CoreGraphics.framework */; }; 4F44C942193FD8B000E34052 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F44C941193FD8B000E34052 /* UIKit.framework */; }; 4F4C75BC1957ABB200C32957 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F4C75BB1957ABB200C32957 /* CoreData.framework */; }; 4F4C75F11957AD7B00C32957 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F4C75E21957AD7B00C32957 /* AppDelegate.m */; }; 4F4C75F21957AD7B00C32957 /* countries.json in Resources */ = {isa = PBXBuildFile; fileRef = 4F4C75E31957AD7B00C32957 /* countries.json */; }; 4F4C75F31957AD7B00C32957 /* Country.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F4C75E51957AD7B00C32957 /* Country.m */; }; 4F4C75F41957AD7B00C32957 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4F4C75E61957AD7B00C32957 /* InfoPlist.strings */; }; 4F4C75F51957AD7B00C32957 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F4C75E81957AD7B00C32957 /* Images.xcassets */; }; 4F4C75F61957AD7B00C32957 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F4C75EA1957AD7B00C32957 /* MainViewController.m */; }; 4F4C75F71957AD7B00C32957 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 4F4C75EB1957AD7B00C32957 /* Model.xcdatamodeld */; }; 4F4C75F91957AD7B00C32957 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F4C75F01957AD7B00C32957 /* main.m */; }; 4F657CC219CD4A8700347199 /* System.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F657CC119CD4A8700347199 /* System.xcassets */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 27AF644AB604AEC96EE0DBE6 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 4F44C93A193FD8B000E34052 /* Countries.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Countries.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4F44C93D193FD8B000E34052 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 4F44C93F193FD8B000E34052 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 4F44C941193FD8B000E34052 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 4F44C95C193FD8B200E34052 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 4F4C75BB1957ABB200C32957 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 4F4C75E11957AD7B00C32957 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 4F4C75E21957AD7B00C32957 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 4F4C75E31957AD7B00C32957 /* countries.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = countries.json; sourceTree = ""; }; 4F4C75E41957AD7B00C32957 /* Country.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Country.h; sourceTree = ""; }; 4F4C75E51957AD7B00C32957 /* Country.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Country.m; sourceTree = ""; }; 4F4C75E71957AD7B00C32957 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 4F4C75E81957AD7B00C32957 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ../Images.xcassets; sourceTree = ""; }; 4F4C75E91957AD7B00C32957 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; 4F4C75EA1957AD7B00C32957 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; 4F4C75EC1957AD7B00C32957 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; 4F4C75EE1957AD7B00C32957 /* Countries-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Countries-Info.plist"; sourceTree = ""; }; 4F4C75EF1957AD7B00C32957 /* Countries-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Countries-Prefix.pch"; sourceTree = ""; }; 4F4C75F01957AD7B00C32957 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 4F657CC119CD4A8700347199 /* System.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = System.xcassets; path = Countries/System.xcassets; sourceTree = SOURCE_ROOT; }; AED14F1ABCD94E898178FF50 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; D2421B3CF1B527EDF568FAB8 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 4F44C937193FD8B000E34052 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 4F4C75BC1957ABB200C32957 /* CoreData.framework in Frameworks */, 4F44C940193FD8B000E34052 /* CoreGraphics.framework in Frameworks */, 4F44C942193FD8B000E34052 /* UIKit.framework in Frameworks */, 4F44C93E193FD8B000E34052 /* Foundation.framework in Frameworks */, 02814654A00E4227802251C5 /* libPods.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 4F44C931193FD8B000E34052 = { isa = PBXGroup; children = ( 4F4C75E01957AD7B00C32957 /* Countries */, 4F44C93C193FD8B000E34052 /* Frameworks */, 4F44C93B193FD8B000E34052 /* Products */, 725D668220685F6554F26A22 /* Pods */, ); sourceTree = ""; }; 4F44C93B193FD8B000E34052 /* Products */ = { isa = PBXGroup; children = ( 4F44C93A193FD8B000E34052 /* Countries.app */, ); name = Products; sourceTree = ""; }; 4F44C93C193FD8B000E34052 /* Frameworks */ = { isa = PBXGroup; children = ( 4F4C75BB1957ABB200C32957 /* CoreData.framework */, 4F44C93D193FD8B000E34052 /* Foundation.framework */, 4F44C93F193FD8B000E34052 /* CoreGraphics.framework */, 4F44C941193FD8B000E34052 /* UIKit.framework */, 4F44C95C193FD8B200E34052 /* XCTest.framework */, AED14F1ABCD94E898178FF50 /* libPods.a */, ); name = Frameworks; sourceTree = ""; }; 4F4C75E01957AD7B00C32957 /* Countries */ = { isa = PBXGroup; children = ( 4F4C75E11957AD7B00C32957 /* AppDelegate.h */, 4F4C75E21957AD7B00C32957 /* AppDelegate.m */, 4F4C75E91957AD7B00C32957 /* MainViewController.h */, 4F4C75EA1957AD7B00C32957 /* MainViewController.m */, 4F4C75E41957AD7B00C32957 /* Country.h */, 4F4C75E51957AD7B00C32957 /* Country.m */, 4F4C75EB1957AD7B00C32957 /* Model.xcdatamodeld */, 4F4C75E31957AD7B00C32957 /* countries.json */, 4F4C75ED1957AD7B00C32957 /* Supporting Files */, ); path = Countries; sourceTree = ""; }; 4F4C75ED1957AD7B00C32957 /* Supporting Files */ = { isa = PBXGroup; children = ( 4F4C75E81957AD7B00C32957 /* Images.xcassets */, 4F657CC119CD4A8700347199 /* System.xcassets */, 4F4C75E61957AD7B00C32957 /* InfoPlist.strings */, 4F4C75EE1957AD7B00C32957 /* Countries-Info.plist */, 4F4C75EF1957AD7B00C32957 /* Countries-Prefix.pch */, 4F4C75F01957AD7B00C32957 /* main.m */, ); path = "Supporting Files"; sourceTree = ""; }; 725D668220685F6554F26A22 /* Pods */ = { isa = PBXGroup; children = ( D2421B3CF1B527EDF568FAB8 /* Pods.debug.xcconfig */, 27AF644AB604AEC96EE0DBE6 /* Pods.release.xcconfig */, ); name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 4F44C939193FD8B000E34052 /* Countries */ = { isa = PBXNativeTarget; buildConfigurationList = 4F44C96C193FD8B200E34052 /* Build configuration list for PBXNativeTarget "Countries" */; buildPhases = ( 4F44C936193FD8B000E34052 /* Sources */, 4F44C937193FD8B000E34052 /* Frameworks */, 4F44C938193FD8B000E34052 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = Countries; productName = ScrollTest; productReference = 4F44C93A193FD8B000E34052 /* Countries.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 4F44C932193FD8B000E34052 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0710; ORGANIZATIONNAME = "DZN Labs"; }; buildConfigurationList = 4F44C935193FD8B000E34052 /* Build configuration list for PBXProject "Countries" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 4F44C931193FD8B000E34052; productRefGroup = 4F44C93B193FD8B000E34052 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 4F44C939193FD8B000E34052 /* Countries */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 4F44C938193FD8B000E34052 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F4C75F21957AD7B00C32957 /* countries.json in Resources */, 4F657CC219CD4A8700347199 /* System.xcassets in Resources */, 4F4C75F51957AD7B00C32957 /* Images.xcassets in Resources */, 4F4C75F41957AD7B00C32957 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 4F44C936193FD8B000E34052 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F4C75F11957AD7B00C32957 /* AppDelegate.m in Sources */, 4F4C75F31957AD7B00C32957 /* Country.m in Sources */, 4F4C75F71957AD7B00C32957 /* Model.xcdatamodeld in Sources */, 4F4C75F91957AD7B00C32957 /* main.m in Sources */, 4F4C75F61957AD7B00C32957 /* MainViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 4F4C75E61957AD7B00C32957 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 4F4C75E71957AD7B00C32957 /* en */, ); name = InfoPlist.strings; path = ..; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 4F44C96A193FD8B200E34052 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; 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 = 7.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 4F44C96B193FD8B200E34052 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; 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 = 7.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; 4F44C96D193FD8B200E34052 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D2421B3CF1B527EDF568FAB8 /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Countries/Supporting Files/Countries-Prefix.pch"; INFOPLIST_FILE = "$(SRCROOT)/Countries/Supporting Files/Countries-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; PRODUCT_BUNDLE_IDENTIFIER = "com.dzn.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Countries; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Debug; }; 4F44C96E193FD8B200E34052 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 27AF644AB604AEC96EE0DBE6 /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Countries/Supporting Files/Countries-Prefix.pch"; INFOPLIST_FILE = "$(SRCROOT)/Countries/Supporting Files/Countries-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; PRODUCT_BUNDLE_IDENTIFIER = "com.dzn.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Countries; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 4F44C935193FD8B000E34052 /* Build configuration list for PBXProject "Countries" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F44C96A193FD8B200E34052 /* Debug */, 4F44C96B193FD8B200E34052 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4F44C96C193FD8B200E34052 /* Build configuration list for PBXNativeTarget "Countries" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F44C96D193FD8B200E34052 /* Debug */, 4F44C96E193FD8B200E34052 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ 4F4C75EB1957AD7B00C32957 /* Model.xcdatamodeld */ = { isa = XCVersionGroup; children = ( 4F4C75EC1957AD7B00C32957 /* Model.xcdatamodel */, ); currentVersion = 4F4C75EC1957AD7B00C32957 /* Model.xcdatamodel */; path = Model.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; }; /* End XCVersionGroup section */ }; rootObject = 4F44C932193FD8B000E34052 /* Project object */; } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Countries.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Podfile ================================================ platform :ios, '6.0' pod 'DZNEmptyDataSet', :path => '../../' pod 'NSManagedObjectContext-Hydrate', '~> 1.0.4' ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Local Podspecs/DZNEmptyDataSet.podspec.json ================================================ { "name": "DZNEmptyDataSet", "version": "1.8", "summary": "A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.", "description": "It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. The -reloadData call will be observed so the empty dataset will be configured whenever needed.", "homepage": "https://github.com/dzenbot/DZNEmptyDataSet", "license": { "type": "MIT", "file": "LICENSE" }, "authors": { "dzenbot": "iromero@dzen.cl" }, "platforms": { "ios": "6.0" }, "source": { "git": "https://github.com/dzenbot/DZNEmptyDataSet.git", "tag": "v1.8" }, "source_files": [ "Classes", "Source/**/*.{h,m}" ], "requires_arc": true, "frameworks": "UIKit" } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/NSManagedObjectContext-Hydrate/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2012 Ignacio Romero Zurbuchen, DZN Labs, iromero@dzen.cl 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: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/NSManagedObjectContext-Hydrate/README.md ================================================ NSManagedObjectContext-Hydrate ============================== Have you ever wanted to preload an application's CoreData store?
If you did, you must know then that it's a real painful and undocumented process. You probably tried different techniques like using Python or Ruby scripts, but it should be easier than that!

This category class helps you by parsing and saving automagically every object from a JSON or CSV data structure into a persistent store with no effort. ## Installation Available in [Cocoa Pods](http://cocoapods.org/?q=NSManagedObjectContext-Hydrate) ``` pod 'NSManagedObjectContext-Hydrate', '~> 1.0.3' ``` ## How to use [Check out the Doc Set](http://cocoadocs.org/docsets/NSManagedObjectContext-Hydrate/1.0.3/) ### Step 1 ``` #import #import "NSManagedObjectContext+Hydrate.h" ``` ### Step 2 After initialising your Managed Object Context, you are ready to preload your JSON content into the store. Call the following method: ``` NSString *path = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"json"]; NSDictionary *attributes = @{@"firstName":@"first_name", @"lastName":@"last_name", @"age":@"age", @"height":@"height", @"weight":@"weight"}; [_managedObjectContext hydrateStoreWithJSONAtPath:path attributeMappings:attributes forEntityName:@"Person"]; ``` Or your CSV content: ``` NSString *path = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"csv"]; NSDictionary *attributes = @{@"firstName":@"first_name", @"lastName":@"last_name", @"age":@"age", @"height":@"height", @"weight":@"weight"}; [_managedObjectContext hydrateStoreWithCSVAtPath:path attributeMappings:attributes forEntityName:@"Person"]; ``` ### Sample project Take a look into the sample project. Everything is there.
Enjoy and collaborate if you feel this library could be improved. (Check the to-do list) ## To-Do's - Multiple-hydrations at a time. - Update values for existent entities. - Refactor Refactor Refactor! ## License (The MIT License) Copyright (c) 2012 Ignacio Romero Zurbuchen 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: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/NSManagedObjectContext-Hydrate/Source/NSManagedObjectContext+Hydrate.h ================================================ // // NSManagedObjectContext+Hydrate.m // // Created by Ignacio Romero Zurbuchen on 7/9/13. // Copyright (c) 2013 DZN Labs. // Licence: MIT-Licence // #import /** A NSManagedObjectContext category class for preload a CoreData persistent store with JSON data. IMPORTANT: Parsing is done automagically if the JSON key paths are identical to the entity attribute names. If not, you must provide a dictionary with attribute mappings matching the source key paths. */ @interface NSManagedObjectContext (Hydrate) /** A custom date format that will be used for all date mappings that have not been configured specifically. If not set, the default format will be used instead "yyyy-MM-dd'T'HH:mm:ss'Z'" */ @property (nonatomic, strong) NSString *preferredDateFormat; /** Returns the singleton managedObjectContext instance. @return The shared managedObjectContext. */ + (NSManagedObjectContext *)sharedContext; /** Sets a managedObjectContext static instance. @param context The managedObjectContext to be set. */ + (void)setSharedContext:(NSManagedObjectContext *)context; /** Preloads an entity table into the persistent store based on a CSV file's data. @param path The CSV file's path. @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path. @param entityName The name of an entity to be stored. @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works). Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithJSONAtPath:forEntityName: method. */ - (void)hydrateStoreWithCSVAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName; /** Preloads an entity table into the persistent store based on a JSON file's data. @param path The JSON file's path. @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path. @param entityName The name of an entity to be stored. @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works). Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithJSONAtPath:forEntityName: method. */ - (void)hydrateStoreWithJSONAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName; /** Preloads an entity table into the persistent store. @param objects A list of parsed objects (preferable, NSDictionary instances). @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path. @param entityName The name of an entity to be stored. @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works). Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithObjects:forEntityName: method. */ - (void)hydrateStoreWithObjects:(NSArray *)objects attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName; /** Checks if there isn't already an entity table preloaded with content. @param entityName The entity name to check. @returns YES if the store's table is empty. NO if the store is already preloaded with content. */ - (BOOL)isEmptyStoreForEntityName:(NSString *)entityName; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/NSManagedObjectContext-Hydrate/Source/NSManagedObjectContext+Hydrate.m ================================================ // // NSManagedObjectContext+Hydrate.m // // Created by Ignacio Romero Zurbuchen on 7/9/13. // Copyright (c) 2013 DZN Labs. // Licence: MIT-Licence // #import "NSManagedObjectContext+Hydrate.h" #define kNSManagedObjectContextDefaultDateFormat @"yyyy-MM-dd'T'HH:mm:ss" static NSManagedObjectContext *_sharedContext = nil; static NSDateFormatter *_defaultDateFormatter = nil; static NSString *_preferredDateFormat = nil; @implementation NSManagedObjectContext (Hydrate) #pragma mark - NSManagedObjectContext Getter Methods + (NSManagedObjectContext *)sharedContext { return _sharedContext; } - (NSDateFormatter *)defaultDateFormatter { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehaviorDefault]; _defaultDateFormatter = [[NSDateFormatter alloc] init]; }); if (![_defaultDateFormatter.dateFormat isEqualToString:self.preferredDateFormat]) { [_defaultDateFormatter setDateFormat:self.preferredDateFormat]; } return _defaultDateFormatter; } - (NSString *)preferredDateFormat { if (_preferredDateFormat == nil) { return kNSManagedObjectContextDefaultDateFormat; } return _preferredDateFormat; } #pragma mark - NSManagedObjectContext Setter Methods + (void)setSharedContext:(NSManagedObjectContext *)context { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedContext = context; }); } - (void)setPreferredDateFormat:(NSString *)format { _preferredDateFormat = format; } #pragma mark - Hydrate from CSV data - (void)hydrateStoreWithCSVAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName { // Check first if the bundle file path is valid if (!path || ![[NSFileManager defaultManager] fileExistsAtPath:path]) { NSLog(@"Sorry, the file at path %@ doesn't seem the exist.",path); return; } NSString *JSON = [self JSONStringFromCSVAtPath:path]; NSData *data = [JSON dataUsingEncoding:NSUTF8StringEncoding]; [self hydrateStoreWithJSONData:data attributeMappings:attributes forEntityName:entityName]; } #pragma mark - Hydrate from JSON data - (void)hydrateStoreWithJSONAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName { // Check first if the bundle file path is valid if (!path || ![[NSFileManager defaultManager] fileExistsAtPath:path]) { NSLog(@"Sorry, the file at path %@ doesn't seem the exist.",path); return; } [self hydrateStoreWithJSONData:[NSData dataWithContentsOfFile:path] attributeMappings:attributes forEntityName:entityName]; } - (void)hydrateStoreWithJSONData:(NSData *)data attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName { NSError *error = nil; // Serializes the JSON data structure into arrays and collections NSArray *objects = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions|NSJSONWritingPrettyPrinted error:&error]; if (!error) { [self hydrateStoreWithObjects:objects attributeMappings:attributes forEntityName:entityName]; } else { NSLog(@"%s ERROR : %@",__FUNCTION__, error.localizedDescription); } } #pragma mark - Hydrate from native objects - (void)hydrateStoreWithObjects:(NSArray *)objects attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName { // We verify that there isn't already an entity table filled with content if (objects.count == 0) { NSLog(@"The array seems to be empty. Please set a non-nil array with objects."); return; } if (![self isEmptyStoreForEntityName:entityName]) { NSLog(@"A table with the entity name '%@' is already populated.", entityName); return; } [objects enumerateObjectsUsingBlock:^(NSDictionary *node, NSUInteger idx, BOOL *stop) { // First we insert a new object to the managed object context NSObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self]; // Then we retrieve all the entity's attributes, to specially be aware about its properties name NSEntityDescription *entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:self]; for (NSAttributeDescription *attributeDescription in entityDescription.properties) { NSString *sourceKey = attributes ? [attributes objectForKey:attributeDescription.name] : attributeDescription.name; if (!sourceKey) continue; id obj = [node objectForKey:sourceKey]; id value = nil; // We verify if the object is supposed to be parsed as a date. If YES, a default date formatter does the conversion automatically. if ([[attributeDescription attributeValueClassName] isEqualToString:NSStringFromClass([NSDate class])]) { if ([obj isKindOfClass:[NSString class]]) { value = [self.defaultDateFormatter dateFromString:(NSString *)obj]; } } else { value = obj; } // We set the value from the parsed collection, to the entity's attribute name. // It is important that the both, the JSON key and the property name match. // An exception will be raised in case that a key doesn't match to its property. [newObject setValue:value forKey:attributeDescription.name]; } }]; } #pragma mark - Testing and validation methods - (NSArray *)testByFetchingEntity:(NSString *)entityName { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self]; [fetchRequest setEntity:entity]; NSError *error = nil; NSArray *fetchedObjects = [self executeFetchRequest:fetchRequest error:&error]; if (!error) { return fetchedObjects; } else { NSLog(@"%s ERROR : %@",__FUNCTION__, [error localizedDescription]); return nil; } } - (BOOL)isEmptyStoreForEntityName:(NSString *)entityName { NSArray *fetchedObjects = [self testByFetchingEntity:entityName]; return (fetchedObjects.count == 0) ? YES : NO; } #pragma mark - CSV tool methods - (NSString *)JSONStringFromCSVAtPath:(NSString *)path { NSError *error = nil; // Gets the CSV string at path NSString *string = [[NSString alloc] initWithContentsOfFile:path encoding:NSStringEncodingConversionAllowLossy error:&error]; if (error) { NSLog(@"%s ERROR : %@",__FUNCTION__, [error localizedDescription]); return nil; } // Splits the CSV string into several lines NSMutableArray *contentComponents = [NSMutableArray arrayWithArray:[string componentsSeparatedByString:@"\n"]]; // Retrieves the key paths of the objects, and removes it from the content NSArray *keyPaths = [[contentComponents objectAtIndex:0] componentsSeparatedByString:@","]; [contentComponents removeObjectAtIndex:0]; // The string that will wrap every object NSMutableString *JSONData = [NSMutableString new]; // Loops trought the CSV content and wraps each found entity [contentComponents enumerateObjectsUsingBlock:^(id obj, NSUInteger i, BOOL *stop) { NSArray *itemComponents = [obj componentsSeparatedByString:@","]; NSMutableString *object = [[NSMutableString alloc] initWithString:@"{"]; [itemComponents enumerateObjectsUsingBlock:^(id obj, NSUInteger j, BOOL *stop) { NSString *attribute = [itemComponents objectAtIndex:j]; NSString *key = [keyPaths objectAtIndex:j]; NSString *value = ([self isNumeric:attribute]) ? [NSString stringWithFormat:@"%@",attribute] : [NSString stringWithFormat:@"\"%@\"",attribute]; [object appendString:[NSString stringWithFormat:@"\"%@\":%@",key,value]]; if (j < keyPaths.count-1) [object appendString:@","]; }]; [object appendString:@"}"]; if (i < contentComponents.count-1) [object appendString:@","]; [JSONData appendString:object]; }]; // Return the newly created JSON string return [NSString stringWithFormat:@"[%@]",JSONData]; } - (BOOL)isNumeric:(NSString *)string { NSCharacterSet *alphaNums = [[NSCharacterSet characterSetWithCharactersInString:@".0987654321."] invertedSet]; NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:string]; return ![alphaNums isSupersetOfSet:inStringSet]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Pods.xcodeproj/project.pbxproj ================================================ archiveVersion 1 classes objectVersion 46 objects 01ABAEFB57742B588074804A3A93D28F buildActionMask 2147483647 files 67CFD7043E5A189B674C9764F25C3075 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 122DA2E5084A4393C29BE363C764795C children E3778F5362B3FDFC4A95AAEF09C26B55 isa PBXGroup name Frameworks sourceTree <group> 15A529C27057E4A57D259CBC6E6CE49C includeInIndex 1 isa PBXFileReference lastKnownFileType text path Pods-acknowledgements.markdown sourceTree <group> 186AAD8459D537D28AF6F70D7A92E799 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path NSManagedObjectContext-Hydrate.xcconfig sourceTree <group> 1EE66377D2316EF3A97B5FDFA02D5D1F baseConfigurationReference 696EBA38F9231D68AA2A783FA457442D buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/NSManagedObjectContext-Hydrate/NSManagedObjectContext-Hydrate-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug 1FD3480879A570ED1EDAB49728DEF4CB isa PBXFileReference lastKnownFileType wrapper.framework name Foundation.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework sourceTree DEVELOPER_DIR 25FEA6FA6762D28FC88B9E831F0FAB4E isa PBXFileReference lastKnownFileType wrapper.framework name CoreData.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreData.framework sourceTree DEVELOPER_DIR 2ADBC2DBE027595FDD0CFD7C423FB3B7 containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString E971A26A3F152625A2E9587160C17A91 remoteInfo NSManagedObjectContext-Hydrate 2CB8A018971E0D943D4C211B49560871 buildConfigurationList 5757E2891B65C3CEE46B4BF57D9F2192 buildPhases C7ACE4D52ABBDE4A01034ACE64FF09D4 2D4AF077985CD6A9E601ECD6711B71DA 94A4E4DEBCD09FB2353DFBC1F62D921C buildRules dependencies isa PBXNativeTarget name DZNEmptyDataSet productName DZNEmptyDataSet productReference A20BCD0FBC6A9DD8AAEAC01B7F297CE6 productType com.apple.product-type.library.static 2D4AF077985CD6A9E601ECD6711B71DA buildActionMask 2147483647 files 90DC74D91298A1DED182E05349D01859 CDC5BA7AA813ED3F255F1BE118491F7D isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 2D8E8EC45A3A1A1D94AE762CB5028504 buildConfigurations 6569F07DC21AD8B72752685013E3D9D8 A14E2444F162A20E3776820E0ADFFB52 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 3243687F2F61DDD248C5EE2F609C74A2 isa PBXTargetDependency name DZNEmptyDataSet target 2CB8A018971E0D943D4C211B49560871 targetProxy 3CA7BDBB00FA4C333BD5A63E84DE7077 399377487C7F551E9E5E38D4B384C6C3 buildConfigurations 1EE66377D2316EF3A97B5FDFA02D5D1F 43D26B6C014AF1A514F0049BBF1A3C6F defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 3CA7BDBB00FA4C333BD5A63E84DE7077 containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString 2CB8A018971E0D943D4C211B49560871 remoteInfo DZNEmptyDataSet 3E4D787385F1490E0A40CB61234215BF includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.release.xcconfig sourceTree <group> 41DC8B5409E3EDEDCF7821B7D7A0A46F buildActionMask 2147483647 files 59014FEFA453A9C1E1A77D736C067608 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 43D26B6C014AF1A514F0049BBF1A3C6F baseConfigurationReference 696EBA38F9231D68AA2A783FA457442D buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/NSManagedObjectContext-Hydrate/NSManagedObjectContext-Hydrate-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 45669D954CA533A3F02B5B0FAA4DD25C includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc name NSManagedObjectContext+Hydrate.m path Source/NSManagedObjectContext+Hydrate.m sourceTree <group> 4906E021DE97CEDDBFF6FD26F33214D1 fileRef AF27CD50497D850A8A171725FEDE8119 isa PBXBuildFile 494D366A9D5523948CA05AD02BE1B3C5 children 5160E6F72E7030EA9B722EB4A8B64972 45669D954CA533A3F02B5B0FAA4DD25C 66C91E429F307F8E6236B8F007DF1FD4 isa PBXGroup name NSManagedObjectContext-Hydrate path NSManagedObjectContext-Hydrate sourceTree <group> 4966DA635CFEE8CA20FF04FA021893EB isa PBXTargetDependency name NSManagedObjectContext-Hydrate target E971A26A3F152625A2E9587160C17A91 targetProxy 2ADBC2DBE027595FDD0CFD7C423FB3B7 4AB3F642DF75EA5A6A0F9394824948BA buildActionMask 2147483647 files 5701846EB1B6C4657C07FCEEC302DA1B isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 5160E6F72E7030EA9B722EB4A8B64972 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h name NSManagedObjectContext+Hydrate.h path Source/NSManagedObjectContext+Hydrate.h sourceTree <group> 520E3BEF80CA01E9E0AC8C98A53A7797 fileRef 9217295504D65CA7345A95E788086031 isa PBXBuildFile 54F2D891D54896FBD0974D87A20D8ED9 fileRef D808ED96D2B88939187E960723031DFB isa PBXBuildFile 5701846EB1B6C4657C07FCEEC302DA1B fileRef E8B09CD16713437C02F3D9728E43BF7F isa PBXBuildFile 5757E2891B65C3CEE46B4BF57D9F2192 buildConfigurations D70B00D702B361A016C60A6609C5D3C3 E31A7378EB593EB11B5CFA85446DA2C9 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 59014FEFA453A9C1E1A77D736C067608 fileRef 1FD3480879A570ED1EDAB49728DEF4CB isa PBXBuildFile 5DB666AC1070276A7247E3A017AB9DC3 children C4ADF11DE4E348424E8F71F20FD64F1D isa PBXGroup name Development Pods sourceTree <group> 63F41FC835058C0B2DACE5EA3770FF76 isa PBXFileReference lastKnownFileType wrapper.framework name UIKit.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework sourceTree DEVELOPER_DIR 641AE05DD55E5E6AC1590CD7B4A18F97 includeInIndex 1 isa PBXFileReference lastKnownFileType text.script.sh path Pods-resources.sh sourceTree <group> 6569F07DC21AD8B72752685013E3D9D8 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_DYNAMIC_NO_PIC NO 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 GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 6.0 ONLY_ACTIVE_ARCH YES STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build isa XCBuildConfiguration name Debug 65C11C09F95534E26643C27D4E0F3B23 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path UIScrollView+EmptyDataSet.h sourceTree <group> 66C91E429F307F8E6236B8F007DF1FD4 children 186AAD8459D537D28AF6F70D7A92E799 696EBA38F9231D68AA2A783FA457442D AF27CD50497D850A8A171725FEDE8119 B27801872526B1CCD4E25210B3B38F60 isa PBXGroup name Support Files path ../Target Support Files/NSManagedObjectContext-Hydrate sourceTree <group> 67CFA17F7ECE29BE0E66F54E6238E1A4 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path DZNEmptyDataSet-prefix.pch sourceTree <group> 67CFD7043E5A189B674C9764F25C3075 fileRef 5160E6F72E7030EA9B722EB4A8B64972 isa PBXBuildFile 696EBA38F9231D68AA2A783FA457442D includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path NSManagedObjectContext-Hydrate-Private.xcconfig sourceTree <group> 6D584B9243620FBEA877976E560EE856 children 65C11C09F95534E26643C27D4E0F3B23 9217295504D65CA7345A95E788086031 isa PBXGroup name Source path Source sourceTree <group> 79ED337A280116F96991390387AFE15C includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet-Private.xcconfig sourceTree <group> 7DB346D0F39D3F0E887471402A8071AB children BA6428E9F66FD5A23C0A2E06ED26CD2F 5DB666AC1070276A7247E3A017AB9DC3 122DA2E5084A4393C29BE363C764795C 9B1F0785B45C56C6091DF2FD8AF7149E CCA510CFBEA2D207524CDA0D73C3B561 D2411A5FE7F7A004607BED49990C37F4 isa PBXGroup sourceTree <group> 89498BCE6F1C690CE8CDA12B7AC52CF5 fileRef 65C11C09F95534E26643C27D4E0F3B23 isa PBXBuildFile 8D3C299AFFF2966D07FA02C13276972F includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet.xcconfig sourceTree <group> 90DC74D91298A1DED182E05349D01859 fileRef 1FD3480879A570ED1EDAB49728DEF4CB isa PBXBuildFile 9217295504D65CA7345A95E788086031 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path UIScrollView+EmptyDataSet.m sourceTree <group> 94A4E4DEBCD09FB2353DFBC1F62D921C buildActionMask 2147483647 files 89498BCE6F1C690CE8CDA12B7AC52CF5 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 952EEBFAF8F7E620423C9F156F25A506 children 15A529C27057E4A57D259CBC6E6CE49C BF59BC15D23E1E1912C8F334E7236813 E8B09CD16713437C02F3D9728E43BF7F 641AE05DD55E5E6AC1590CD7B4A18F97 F1C148C8783505C2D2036DD90E68A489 3E4D787385F1490E0A40CB61234215BF isa PBXGroup name Pods path Target Support Files/Pods sourceTree <group> 99BA97A5A6A4BEE6D513B51836AF1D5C fileRef 1FD3480879A570ED1EDAB49728DEF4CB isa PBXBuildFile 9AA767A9C19815C48C22749BB06740BC baseConfigurationReference 3E4D787385F1490E0A40CB61234215BF buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 9B1F0785B45C56C6091DF2FD8AF7149E children 494D366A9D5523948CA05AD02BE1B3C5 isa PBXGroup name Pods sourceTree <group> 9F7E894E3BBEEA81C68E6C61E80ACE85 baseConfigurationReference F1C148C8783505C2D2036DD90E68A489 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug A14E2444F162A20E3776820E0ADFFB52 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP YES ENABLE_NS_ASSERTIONS NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_PREPROCESSOR_DEFINITIONS RELEASE=1 GCC_WARN_64_TO_32_BIT_CONVERSION YES GCC_WARN_ABOUT_RETURN_TYPE YES GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 6.0 STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build VALIDATE_PRODUCT YES isa XCBuildConfiguration name Release A1E482DBFEE1FD3B01F7CFD8255C2556 fileRef 45669D954CA533A3F02B5B0FAA4DD25C isa PBXBuildFile A20BCD0FBC6A9DD8AAEAC01B7F297CE6 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libDZNEmptyDataSet.a path libDZNEmptyDataSet.a sourceTree BUILT_PRODUCTS_DIR A6FAECE1815F0F2EAFB1C40E50B36CDD explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libPods.a path libPods.a sourceTree BUILT_PRODUCTS_DIR AF27CD50497D850A8A171725FEDE8119 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path NSManagedObjectContext-Hydrate-dummy.m sourceTree <group> B27801872526B1CCD4E25210B3B38F60 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path NSManagedObjectContext-Hydrate-prefix.pch sourceTree <group> B34DA4ABD3190E8CE77C574AF58BF590 fileRef 25FEA6FA6762D28FC88B9E831F0FAB4E isa PBXBuildFile BA6428E9F66FD5A23C0A2E06ED26CD2F includeInIndex 1 isa PBXFileReference lastKnownFileType text name Podfile path ../Podfile sourceTree SOURCE_ROOT xcLanguageSpecificationIdentifier xcode.lang.ruby BB11F90A7070C3100D33630C7C2D2425 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libNSManagedObjectContext-Hydrate.a path libNSManagedObjectContext-Hydrate.a sourceTree BUILT_PRODUCTS_DIR BCFADFAE64D7AAADE713C814896F206A buildActionMask 2147483647 files B34DA4ABD3190E8CE77C574AF58BF590 99BA97A5A6A4BEE6D513B51836AF1D5C isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 BF59BC15D23E1E1912C8F334E7236813 includeInIndex 1 isa PBXFileReference lastKnownFileType text.plist.xml path Pods-acknowledgements.plist sourceTree <group> C087C4EE0083616FA5282C6B88FA56CE children 8D3C299AFFF2966D07FA02C13276972F 79ED337A280116F96991390387AFE15C D808ED96D2B88939187E960723031DFB 67CFA17F7ECE29BE0E66F54E6238E1A4 isa PBXGroup name Support Files path Examples/Countries/Pods/Target Support Files/DZNEmptyDataSet sourceTree <group> C49348DC2C6BD703370686D890F45F5E buildConfigurations 9F7E894E3BBEEA81C68E6C61E80ACE85 9AA767A9C19815C48C22749BB06740BC defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList C4ADF11DE4E348424E8F71F20FD64F1D children 6D584B9243620FBEA877976E560EE856 C087C4EE0083616FA5282C6B88FA56CE isa PBXGroup name DZNEmptyDataSet path ../../.. sourceTree <group> C7ACE4D52ABBDE4A01034ACE64FF09D4 buildActionMask 2147483647 files 54F2D891D54896FBD0974D87A20D8ED9 520E3BEF80CA01E9E0AC8C98A53A7797 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 CCA510CFBEA2D207524CDA0D73C3B561 children A20BCD0FBC6A9DD8AAEAC01B7F297CE6 BB11F90A7070C3100D33630C7C2D2425 A6FAECE1815F0F2EAFB1C40E50B36CDD isa PBXGroup name Products sourceTree <group> CDC5BA7AA813ED3F255F1BE118491F7D fileRef 63F41FC835058C0B2DACE5EA3770FF76 isa PBXBuildFile D2411A5FE7F7A004607BED49990C37F4 children 952EEBFAF8F7E620423C9F156F25A506 isa PBXGroup name Targets Support Files sourceTree <group> D41D8CD98F00B204E9800998ECF8427E attributes LastSwiftUpdateCheck 0700 LastUpgradeCheck 0700 buildConfigurationList 2D8E8EC45A3A1A1D94AE762CB5028504 compatibilityVersion Xcode 3.2 developmentRegion English hasScannedForEncodings 0 isa PBXProject knownRegions en mainGroup 7DB346D0F39D3F0E887471402A8071AB productRefGroup CCA510CFBEA2D207524CDA0D73C3B561 projectDirPath projectReferences projectRoot targets 2CB8A018971E0D943D4C211B49560871 E971A26A3F152625A2E9587160C17A91 E03DD8C366760E8AEB6C748E2452200A D70B00D702B361A016C60A6609C5D3C3 baseConfigurationReference 79ED337A280116F96991390387AFE15C buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug D808ED96D2B88939187E960723031DFB includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path DZNEmptyDataSet-dummy.m sourceTree <group> E03DD8C366760E8AEB6C748E2452200A buildConfigurationList C49348DC2C6BD703370686D890F45F5E buildPhases 4AB3F642DF75EA5A6A0F9394824948BA 41DC8B5409E3EDEDCF7821B7D7A0A46F buildRules dependencies 3243687F2F61DDD248C5EE2F609C74A2 4966DA635CFEE8CA20FF04FA021893EB isa PBXNativeTarget name Pods productName Pods productReference A6FAECE1815F0F2EAFB1C40E50B36CDD productType com.apple.product-type.library.static E31A7378EB593EB11B5CFA85446DA2C9 baseConfigurationReference 79ED337A280116F96991390387AFE15C buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 6.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release E3778F5362B3FDFC4A95AAEF09C26B55 children 25FEA6FA6762D28FC88B9E831F0FAB4E 1FD3480879A570ED1EDAB49728DEF4CB 63F41FC835058C0B2DACE5EA3770FF76 isa PBXGroup name iOS sourceTree <group> E829635C99F3A93762B2950474C51569 buildActionMask 2147483647 files A1E482DBFEE1FD3B01F7CFD8255C2556 4906E021DE97CEDDBFF6FD26F33214D1 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 E8B09CD16713437C02F3D9728E43BF7F includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path Pods-dummy.m sourceTree <group> E971A26A3F152625A2E9587160C17A91 buildConfigurationList 399377487C7F551E9E5E38D4B384C6C3 buildPhases E829635C99F3A93762B2950474C51569 BCFADFAE64D7AAADE713C814896F206A 01ABAEFB57742B588074804A3A93D28F buildRules dependencies isa PBXNativeTarget name NSManagedObjectContext-Hydrate productName NSManagedObjectContext-Hydrate productReference BB11F90A7070C3100D33630C7C2D2425 productType com.apple.product-type.library.static F1C148C8783505C2D2036DD90E68A489 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.debug.xcconfig sourceTree <group> rootObject D41D8CD98F00B204E9800998ECF8427E ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-Private.xcconfig ================================================ #include "DZNEmptyDataSet.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/NSManagedObjectContext-Hydrate" OTHER_LDFLAGS = ${DZNEMPTYDATASET_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-dummy.m ================================================ #import @interface PodsDummy_DZNEmptyDataSet : NSObject @end @implementation PodsDummy_DZNEmptyDataSet @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.xcconfig ================================================ DZNEMPTYDATASET_OTHER_LDFLAGS = -framework "UIKit" ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/NSManagedObjectContext-Hydrate/NSManagedObjectContext-Hydrate-Private.xcconfig ================================================ #include "NSManagedObjectContext-Hydrate.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/NSManagedObjectContext-Hydrate" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/NSManagedObjectContext-Hydrate" OTHER_LDFLAGS = ${NSMANAGEDOBJECTCONTEXT_HYDRATE_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/NSManagedObjectContext-Hydrate/NSManagedObjectContext-Hydrate-dummy.m ================================================ #import @interface PodsDummy_NSManagedObjectContext_Hydrate : NSObject @end @implementation PodsDummy_NSManagedObjectContext_Hydrate @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/NSManagedObjectContext-Hydrate/NSManagedObjectContext-Hydrate-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/NSManagedObjectContext-Hydrate/NSManagedObjectContext-Hydrate.xcconfig ================================================ NSMANAGEDOBJECTCONTEXT_HYDRATE_OTHER_LDFLAGS = -framework "CoreData" ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## DZNEmptyDataSet The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. ## NSManagedObjectContext-Hydrate The MIT License (MIT) Copyright (c) 2012 Ignacio Romero Zurbuchen, DZN Labs, iromero@dzen.cl 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. Generated by CocoaPods - http://cocoapods.org ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/Pods/Pods-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. Title DZNEmptyDataSet Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2012 Ignacio Romero Zurbuchen, DZN Labs, iromero@dzen.cl 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. Title NSManagedObjectContext-Hydrate Type PSGroupSpecifier FooterText Generated by CocoaPods - http://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/Pods/Pods-dummy.m ================================================ #import @interface PodsDummy_Pods : NSObject @end @implementation PodsDummy_Pods @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/Pods/Pods-resources.sh ================================================ #!/bin/sh set -e mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" XCASSET_FILES=() realpath() { DIRECTORY="$(cd "${1%/*}" && pwd)" FILENAME="${1##*/}" echo "$DIRECTORY/$FILENAME" } install_resource() { case $1 in *.storyboard) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" ;; *.xcdatamodeld) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" ;; *.xcmappingmodel) echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" ;; *.xcassets) ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" echo "$1" >> "$RESOURCES_TO_COPY" ;; *) echo "${PODS_ROOT}/$1" echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" ;; esac } mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do if [[ $line != "`realpath $PODS_ROOT`*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/Pods/Pods.debug.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/NSManagedObjectContext-Hydrate" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/NSManagedObjectContext-Hydrate" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -l"NSManagedObjectContext-Hydrate" -framework "CoreData" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Target Support Files/Pods/Pods.release.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/NSManagedObjectContext-Hydrate" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/NSManagedObjectContext-Hydrate" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -l"NSManagedObjectContext-Hydrate" -framework "CoreData" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Podfile ================================================ platform :ios, '8.0' pod 'DZNEmptyDataSet', :path => '../../' pod 'DZNWebViewController', '2.0' ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Ignacio Romero Zurbuchen, DZN Labs, iromero@dzen.cl 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: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/README.md ================================================ # DZWebBrowser An iPhone/iPad simple web browser controller with navigation controls and sharing features: * Progress bar embeded on the navigation bar (optional). * Navigation bar shows title animated, à la Twitter official app. * Sharing options like posting on Twitter, Facebook, Mail, etc. (optional). * Long press gesture for capturing links and images (optional). * Customizable toolbar icons. * Localization support. * NSURLCache support. ![DZWebBrowser](https://dl.dropboxusercontent.com/u/2452151/Permalink/DZWebBrowser.png) DZWebBrowser uses ARC and supports iOS6 and superior. Also support multiple orientations. Some additonal feature ideas: - iOS7 support - Hide NavigationBar & ToolBar for larger screen real estate (à la Safari App). - Optional way of searching a custom URL from the NavigationBar. - Keywords auto-completion when searching on bar. - Reload page. Feel free to fork it and make it more interesting! ## Installation Available in [Cocoa Pods](http://cocoapods.org/?q=DZWebBrowser) ``` pod 'DZWebBrowser', '~> 0.0.1' ``` ## How to use It is very easy to add DZWebBrowser to your projects. Take a look into the sample project. Hopefully you saved a couple of hours! ### Step 1 ``` Import "DZWebBrowser.h" to your view controller subclass. ``` ### Step 2 If not installed with Cocoa Pods: ``` Import Apple's SystemConfiguration, CFNetwork, MessageUI and Social frameworks. ``` ### Step 3 Create a new instance of DZWebBrowser and initialize with a NSURL. You also need to embed the view controller into a UINavigationController. ``` NSURL *URL = [NSURL URLWithString:@"http://www.google.com/"]; DZWebBrowser *webBrowser = [[DZWebBrowser alloc] initBrowserWithURL:URL]; webBrowser.showProgress = YES; webBrowser.allowSharing = YES; webBrowser.resourceBundleName = @"custom-controls"; UINavigationController *webBrowserNC = [[UINavigationController alloc] initWithRootViewController:webBrowser]; [self presentViewController:webBrowserNC animated:YES completion:NULL]; ``` ## Third party Frameworks DZWebBrowser requires third party frameworks, if not installed with Cocoa Pods you must add them as submodules: - Apple's [Reachability](https://github.com/tonymillion/Reachability), but the ARC version from [Tony Million](https://github.com/tonymillion). - [NJKWebViewProgress](https://github.com/ninjinkun/NJKWebViewProgress) from [Satoshi Asano](https://github.com/ninjinkun). - [SDURLCache](https://github.com/rs/SDURLCache) from [Olivier Poitrey](https://github.com/rs) ## License (The MIT License) Copyright (c) 2012 Ignacio Romero Zurbuchen 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: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/Source/Classes/DZNPolyActivity.h ================================================ // // DZNPolyActivity.h // DZNWebViewController // https://github.com/dzenbot/DZNWebViewController // // Created by Ignacio Romero Zurbuchen on 3/28/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // Licence: MIT-Licence // #import /** * Types of activity kind, used for polymorphic creation. */ typedef NS_OPTIONS(NSUInteger, DZNPolyActivityType) { DZNPolyActivityTypeLink, DZNPolyActivityTypeSafari, DZNPolyActivityTypeChrome, DZNPolyActivityTypeOpera, DZNPolyActivityTypeDolphin }; /** * The DZNPolyActivity class is an abstract subclass of UIActivity allowing to easily create polymorphic instances by assigning different activity types. Each type will render a different icon and title, and will perform different actions too. */ @interface DZNPolyActivity : UIActivity /** * Initializes and returns a newly created activity with a specific type. * * @param type The type of the activity to be created. * @returns The initialized activity. */ - (instancetype)initWithActivityType:(DZNPolyActivityType)type; /** * Allocates a new instance of the receiving class, sends it an init message, and returns the initialized object. * This method implements the same logic than initWithActivityType: but is just shorter to call. * * @param type The type of the activity to be created. */ + (instancetype)activityWithType:(DZNPolyActivityType)type; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/Source/Classes/DZNPolyActivity.m ================================================ // // DZNPolyActivity.m // DZNWebViewController // https://github.com/dzenbot/DZNWebViewController // // Created by Ignacio Romero Zurbuchen on 3/28/14. // Copyright (c) 2014 DZN Labs. All rights reserved. // Licence: MIT-Licence // #import "DZNPolyActivity.h" @implementation DZNPolyActivity { DZNPolyActivityType _type; NSURL *_URL; } + (instancetype)activityWithType:(DZNPolyActivityType)type { return [[DZNPolyActivity alloc] initWithActivityType:type]; } - (instancetype)initWithActivityType:(DZNPolyActivityType)type { self = [super init]; if (self) { _type = type; } return self; } #pragma mark - Getter methods + (UIActivityCategory)activityCategory { return UIActivityCategoryAction; } - (NSString *)activityType { switch (_type) { case DZNPolyActivityTypeLink: return @"com.dzn.DZNWebViewController.activity.CopyLink"; case DZNPolyActivityTypeSafari: return @"com.dzn.DZNWebViewController.activity.OpenInSafari"; case DZNPolyActivityTypeChrome: return @"com.dzn.DZNWebViewController.activity.OpenInChrome"; case DZNPolyActivityTypeOpera: return @"com.dzn.DZNWebViewController.activity.OpenInOperaMini"; case DZNPolyActivityTypeDolphin: return @"com.dzn.DZNWebViewController.activity.OpenInDolphin"; } } - (NSString *)activityTitle { switch (_type) { case DZNPolyActivityTypeLink: return NSLocalizedString(@"Copy Link", nil); case DZNPolyActivityTypeSafari: return NSLocalizedString(@"Open in Safari", nil); case DZNPolyActivityTypeChrome: return NSLocalizedString(@"Open in Chrome", nil); case DZNPolyActivityTypeOpera: return NSLocalizedString(@"Open in Opera", nil); case DZNPolyActivityTypeDolphin: return NSLocalizedString(@"Open in Dolphin", nil); } } - (UIImage *)activityImage { switch (_type) { case DZNPolyActivityTypeLink: return [UIImage imageNamed:@"Link7"]; case DZNPolyActivityTypeSafari: return [UIImage imageNamed:@"Safari7"]; case DZNPolyActivityTypeChrome: return [UIImage imageNamed:@"Chrome7"]; case DZNPolyActivityTypeOpera: return [UIImage imageNamed:@"Opera7"]; case DZNPolyActivityTypeDolphin: return [UIImage imageNamed:@"Dolphin7"]; default: return nil; } } - (NSURL *)chromeURLWithURL:(NSURL *)URL { return [self customURLWithURL:URL andType:DZNPolyActivityTypeChrome]; } - (NSURL *)operaURLWithURL:(NSURL *)URL { return [self customURLWithURL:URL andType:DZNPolyActivityTypeOpera]; } - (NSURL *)dolphinURLWithURL:(NSURL *)URL { return [self customURLWithURL:URL andType:DZNPolyActivityTypeDolphin]; } - (NSURL *)customURLWithURL:(NSURL *)URL andType:(DZNPolyActivityType)type { // Replaces the URL Scheme with the type equivalent. NSString *scheme = nil; if ([URL.scheme isEqualToString:@"http"]) { if (type == DZNPolyActivityTypeChrome) scheme = @"googlechrome"; if (type == DZNPolyActivityTypeOpera) scheme = @"ohttp"; if (type == DZNPolyActivityTypeDolphin) scheme = @"dolphin"; } else if ([URL.scheme isEqualToString:@"https"]) { if (type == DZNPolyActivityTypeChrome) scheme = @"googlechromes"; if (type == DZNPolyActivityTypeOpera) scheme = @"ohttps"; if (type == DZNPolyActivityTypeDolphin) scheme = @"dolphin"; } // Proceeds only if a valid URI Scheme is available. if (scheme) { NSRange range = [[URL absoluteString] rangeOfString:@":"]; NSString *urlNoScheme = [[URL absoluteString] substringFromIndex:range.location]; return [NSURL URLWithString:[scheme stringByAppendingString:urlNoScheme]]; } return nil; } - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { for (UIActivity *item in activityItems) { if ([item isKindOfClass:[NSString class]]) { NSURL *URL = [NSURL URLWithString:(NSString *)item]; if (!URL) continue; if (_type == DZNPolyActivityTypeLink) { return URL ? YES : NO; } if (_type == DZNPolyActivityTypeSafari) { return [[UIApplication sharedApplication] canOpenURL:URL]; } if (_type == DZNPolyActivityTypeChrome) { return [[UIApplication sharedApplication] canOpenURL:[self chromeURLWithURL:URL]]; } if (_type == DZNPolyActivityTypeOpera) { return [[UIApplication sharedApplication] canOpenURL:[self operaURLWithURL:URL]]; } if (_type == DZNPolyActivityTypeDolphin) { return [[UIApplication sharedApplication] canOpenURL:[self dolphinURLWithURL:URL]]; } break; } } return NO; } - (void)prepareWithActivityItems:(NSArray *)activityItems { for (id item in activityItems) { if ([item isKindOfClass:[NSString class]]) { _URL = [NSURL URLWithString:(NSString *)item]; if (!_URL) continue; else break; } } } - (void)performActivity { BOOL completed = NO; if (!_URL) { [self activityDidFinish:completed]; return; } switch (_type) { case DZNPolyActivityTypeLink: [[UIPasteboard generalPasteboard] setURL:_URL]; completed = YES; break; case DZNPolyActivityTypeSafari: completed = [[UIApplication sharedApplication] openURL:_URL]; break; case DZNPolyActivityTypeChrome: completed = [[UIApplication sharedApplication] openURL:[self chromeURLWithURL:_URL]]; break; case DZNPolyActivityTypeOpera: completed = [[UIApplication sharedApplication] openURL:[self operaURLWithURL:_URL]]; break; case DZNPolyActivityTypeDolphin: completed = [[UIApplication sharedApplication] openURL:[self dolphinURLWithURL:_URL]]; break; } [self activityDidFinish:completed]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/Source/Classes/DZNWebViewController.h ================================================ // // DZNWebViewController.h // DZNWebViewController // https://github.com/dzenbot/DZNWebViewController // // Created by Ignacio Romero Zurbuchen on 10/25/13. // Copyright (c) 2014 DZN Labs. All rights reserved. // Licence: MIT-Licence // #import /** * Types of supported actions (i.e. Share & Copy link, Add to Reading List, Open in Safari/Chrome/Opera/Dolphin). */ typedef NS_OPTIONS(NSUInteger, DZNWebViewControllerActions) { DZNWebViewControllerActionAll = -1, DZNWebViewControllerActionNone = 0, DZNWebViewControllerActionShareLink = (1 << 0), DZNWebViewControllerActionCopyLink = (1 << 1), DZNWebViewControllerActionReadLater = (1 << 2), DZNWebViewControllerActionOpenSafari = (1 << 3), DZNWebViewControllerActionOpenChrome = (1 << 4), DZNWebViewControllerActionOpenOperaMini = (1 << 5), DZNWebViewControllerActionOpenDolphin = (1 << 6) }; /** * Types of network loading style. */ typedef NS_OPTIONS(NSUInteger, DZNWebViewControllerLoadingStyle) { DZNWebViewControllerLoadingStyleNone, DZNWebViewControllerLoadingStyleProgressView, DZNWebViewControllerLoadingStyleActivityIndicator }; /** * A very simple web browser with useful navigation and exportation tools. */ @interface DZNWebViewController : UIViewController /** The web view that the controller manages. */ @property (nonatomic, strong) UIWebView *webView; /** The URL identifying the location of the content to load. */ @property (nonatomic, readonly) NSURL *URL; /** The loading visual style, using a progress bar or a network activity indicator. Default is DZNWebViewControllerLoadingStyleProgressView. */ @property (nonatomic) DZNWebViewControllerLoadingStyle loadingStyle; /** The supported actions like sharing and copy link, add to reading list, open in Safari, etc. Default is DZNWebViewControllerActionAll. */ @property (nonatomic) DZNWebViewControllerActions supportedActions; /** The toolbar background color. Default is black, translucent. */ @property (nonatomic, strong) UIColor *toolbarBackgroundColor; /** The toolbar item's tint color. Default is white. */ @property (nonatomic, strong) UIColor *toolbarTintColor; /** The navigation bar's title font. Default uses UINavigation's appearance title text attributes with key NSFontAttributeName. */ @property (nonatomic, strong) UIFont *titleFont; /** The navigation bar's title custom font. Default uses UINavigation's appearance title text attributes with key NSForegroundColorAttributeName. */ @property (nonatomic, strong) UIColor *titleColor; /** * Initializes and returns a newly created webview controller with an initial HTTP URL to be requested as soon as the view appears. * * @param URL The HTTP URL to be requested. * @returns The initialized webview controller. */ - (id)initWithURL:(NSURL *)URL; /** * Initializes and returns a newly created webview controller for local HTML navigation. * * @param URL The file URL of the main html. * @returns The initialized webview controller. */ - (id)initWithFileURL:(NSURL *)URL; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/Source/Classes/DZNWebViewController.m ================================================ // // DZNWebViewController.m // DZNWebViewController // https://github.com/dzenbot/DZNWebViewController // // Created by Ignacio Romero Zurbuchen on 10/25/13. // Copyright (c) 2014 DZN Labs. All rights reserved. // Licence: MIT-Licence // #import "DZNWebViewController.h" #import "DZNPolyActivity.h" #import #import #define kDZNWebViewControllerContentTypeImage @"image" #define kDZNWebViewControllerContentTypeLink @"link" @interface DZNLongPressGestureRecognizer : UILongPressGestureRecognizer @end @implementation DZNLongPressGestureRecognizer - (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer { return NO; } @end @interface DZNWebViewController () { NJKWebViewProgress *_progressProxy; UIBarButtonItem *_actionBarItem; UIBarButtonItem *_backwardBarItem; UIBarButtonItem *_forwardBarItem; UIBarButtonItem *_loadingBarItem; int _loadBalance; BOOL _didLoadContent; BOOL _presentingActivities; } @property (nonatomic, strong) NJKWebViewProgressView *progressView; @property (nonatomic, strong) UIActivityIndicatorView *activityIndicatorView; @end @implementation DZNWebViewController @synthesize URL = _URL; - (id)init { self = [super init]; if (self) { _loadingStyle = DZNWebViewControllerLoadingStyleProgressView; _supportedActions = DZNWebViewControllerActionAll; _toolbarBackgroundColor = [UIColor blackColor]; _toolbarTintColor = [UIColor whiteColor]; } return self; } - (id)initWithURL:(NSURL *)URL { NSParameterAssert(URL); NSAssert(URL != nil, @"Invalid URL"); NSAssert(URL.scheme != nil, @"URL has no scheme"); self = [self init]; if (self) { _URL = URL; } return self; } - (id)initWithFileURL:(NSURL *)URL { return [self initWithURL:URL]; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; if (self.supportedActions > 0) { _actionBarItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(presentActivityController:)]; [self.navigationItem setRightBarButtonItem:_actionBarItem]; } self.view = self.webView; self.automaticallyAdjustsScrollViewInsets = YES; [self setToolbarItems:self.navigationItems animated:NO]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setToolbarHidden:NO]; self.navigationController.toolbar.barTintColor = _toolbarBackgroundColor; self.navigationController.toolbar.tintColor = _toolbarTintColor; self.navigationController.toolbar.translucent = NO; [self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(handleInteractivePopGesture:)]; self.navigationController.view.backgroundColor = [UIColor whiteColor]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (!_didLoadContent) { [self startRequestWithURL:_URL]; } } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self clearProgressViewAnimated:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [self stopLoading]; } #pragma mark - Getter methods - (UIWebView *)webView { if (!_webView) { _webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; _webView.autoresizingMask = UIViewAutoresizingFlexibleHeight; _webView.backgroundColor = [UIColor whiteColor]; if (_loadingStyle == DZNWebViewControllerLoadingStyleProgressView) { _progressProxy = [[NJKWebViewProgress alloc] init]; _webView.delegate = _progressProxy; _progressProxy.webViewProxyDelegate = self; _progressProxy.progressDelegate = self; } else { _webView.delegate = self; } DZNLongPressGestureRecognizer *gesture = [[DZNLongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)]; gesture.allowableMovement = 20; gesture.delegate = self; [_webView addGestureRecognizer:gesture]; } return _webView; } - (NJKWebViewProgressView *)progressView { if (!_progressView && _loadingStyle == DZNWebViewControllerLoadingStyleProgressView) { CGFloat progressBarHeight = 2.5f; CGSize navigationBarSize = self.navigationController.navigationBar.bounds.size; CGRect barFrame = CGRectMake(0, navigationBarSize.height - progressBarHeight, navigationBarSize.width, progressBarHeight); _progressView = [[NJKWebViewProgressView alloc] initWithFrame:barFrame]; [self.navigationController.navigationBar addSubview:_progressView]; } return _progressView; } - (UIActivityIndicatorView *)activityIndicatorView { if (!_activityIndicatorView) { _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; _activityIndicatorView.hidesWhenStopped = YES; _activityIndicatorView.color = _toolbarTintColor; } return _activityIndicatorView; } - (NSArray *)navigationItems { _backwardBarItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"toolbar_backward"] style:UIBarButtonItemStylePlain target:self action:@selector(goBack:)]; _backwardBarItem.enabled = NO; _forwardBarItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"toolbar_forward"] style:UIBarButtonItemStylePlain target:self action:@selector(goForward:)]; _forwardBarItem.enabled = NO; if (_loadingStyle == DZNWebViewControllerLoadingStyleActivityIndicator) { _loadingBarItem = [[UIBarButtonItem alloc] initWithCustomView:self.activityIndicatorView]; } UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:NULL]; UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL]; fixedSpace.width = 20.0; NSMutableArray *items = [NSMutableArray arrayWithArray:@[_backwardBarItem,fixedSpace,_forwardBarItem,flexibleSpace]]; if (_loadingBarItem) { [items addObject:_loadingBarItem]; } return items; } - (UIFont *)titleFont { if (!_titleFont) { return [[UINavigationBar appearance].titleTextAttributes objectForKey:NSFontAttributeName]; } return _titleFont; } - (UIColor *)titleColor { if (!_titleColor) { return [[UINavigationBar appearance].titleTextAttributes objectForKey:NSForegroundColorAttributeName]; } return _titleColor; } - (NSString *)pageTitle { NSString *js = @"document.body.style.webkitTouchCallout = 'none'; document.getElementsByTagName('title')[0].textContent;"; NSString *title = [_webView stringByEvaluatingJavaScriptFromString:js]; return [title stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; } - (NSURL *)URL { return _webView.request.URL; } - (CGSize)HTLMWindowSize { CGSize size = CGSizeZero; size.width = [[_webView stringByEvaluatingJavaScriptFromString:@"window.innerWidth"] floatValue]; size.height = [[_webView stringByEvaluatingJavaScriptFromString:@"window.innerHeight"] floatValue]; return size; } - (CGPoint)convertPointToHTMLSystem:(CGPoint)point { CGSize viewSize = _webView.frame.size; CGSize windowSize = [self HTLMWindowSize]; CGPoint scaledPoint = CGPointZero; CGFloat factor = windowSize.width / viewSize.width; scaledPoint.x = point.x * factor; scaledPoint.y = point.y * factor; return scaledPoint; } - (NSArray *)excludedActivityTypesForItem:(id)item { NSMutableArray *types = [NSMutableArray new]; if (![item isKindOfClass:[UIImage class]]) { [types addObjectsFromArray:@[UIActivityTypeCopyToPasteboard, UIActivityTypeSaveToCameraRoll, UIActivityTypePostToFlickr, UIActivityTypePrint, UIActivityTypeAssignToContact]]; } if (self.supportsAllActions) { return types; } if ((_supportedActions & DZNWebViewControllerActionShareLink) == 0) { [types addObjectsFromArray:@[UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypePostToTencentWeibo, UIActivityTypeAirDrop]]; } if ((_supportedActions & DZNWebViewControllerActionReadLater) == 0 && [item isKindOfClass:[UIImage class]]) { [types addObject:UIActivityTypeAddToReadingList]; } return types; } - (NSArray *)applicationActivitiesForItem:(id)item { NSMutableArray *activities = [NSMutableArray new]; if ([item isKindOfClass:[UIImage class]]) { return activities; } if ((_supportedActions & DZNWebViewControllerActionCopyLink) > 0 || self.supportsAllActions) { [activities addObject:[DZNPolyActivity activityWithType:DZNPolyActivityTypeLink]]; } if ((_supportedActions & DZNWebViewControllerActionOpenSafari) > 0 || self.supportsAllActions) { [activities addObject:[DZNPolyActivity activityWithType:DZNPolyActivityTypeSafari]]; } if ((_supportedActions & DZNWebViewControllerActionOpenChrome) > 0 || self.supportsAllActions) { [activities addObject:[DZNPolyActivity activityWithType:DZNPolyActivityTypeChrome]]; } if ((_supportedActions & DZNWebViewControllerActionOpenOperaMini) > 0 || self.supportsAllActions) { [activities addObject:[DZNPolyActivity activityWithType:DZNPolyActivityTypeOpera]]; } if ((_supportedActions & DZNWebViewControllerActionOpenDolphin) > 0 || self.supportsAllActions) { [activities addObject:[DZNPolyActivity activityWithType:DZNPolyActivityTypeDolphin]]; } return activities; } - (BOOL)supportsAllActions { return (_supportedActions == DZNWebViewControllerActionAll) ? YES : NO; } #pragma mark - Setter methods - (void)setURL:(NSURL *)URL { [self startRequestWithURL:URL]; } - (void)setViewTitle:(NSString *)title { UILabel *label = (UILabel *)self.navigationItem.titleView; if (!label || ![label isKindOfClass:[UILabel class]]) { label = [UILabel new]; label.numberOfLines = 2; label.textAlignment = NSTextAlignmentCenter; label.font = self.titleFont; label.textColor = self.titleColor; self.navigationItem.titleView = label; } if (title) { label.text = title; [label sizeToFit]; CGRect frame = label.frame; frame.size.height = self.navigationController.navigationBar.frame.size.height; label.frame = frame; } } /* * Sets the request errors with an alert view. */ - (void)setLoadingError:(NSError *)error { switch (error.code) { // case NSURLErrorTimedOut: case NSURLErrorUnknown: case NSURLErrorCancelled: return; } [self setActivityIndicatorsVisible:NO]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:error.localizedDescription delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles: nil]; [alert show]; } /* * Toggles the activity indicators on the status bar & footer view. */ - (void)setActivityIndicatorsVisible:(BOOL)visible { [UIApplication sharedApplication].networkActivityIndicatorVisible = visible; if (_loadingStyle != DZNWebViewControllerLoadingStyleActivityIndicator) { return; } if (visible) [_activityIndicatorView startAnimating]; else [_activityIndicatorView stopAnimating]; } #pragma mark - DZNWebViewController methods - (void)startRequestWithURL:(NSURL *)URL { _loadBalance = 0; if (![self.webView.request.URL isFileURL]) { [_webView loadRequest:[[NSURLRequest alloc] initWithURL:URL]]; } else { NSData *data = [[NSData alloc] initWithContentsOfURL:URL]; NSString *HTMLString = [[NSString alloc] initWithData:data encoding:NSStringEncodingConversionAllowLossy]; [_webView loadHTMLString:HTMLString baseURL:nil]; } } - (void)goBack:(id)sender { if ([_webView canGoBack]) { [_webView goBack]; } } - (void)goForward:(id)sender { if ([_webView canGoForward]) { [_webView goForward]; } } - (void)presentActivityController:(id)sender { NSLog(@"%s",__FUNCTION__); NSString *type = kDZNWebViewControllerContentTypeLink; NSString *title = [self pageTitle]; NSString *url = [self URL].absoluteString; NSLog(@"type : %@", type); NSLog(@"title : %@", title); NSLog(@"url : %@", url); NSDictionary *content = @{@"title": [self pageTitle], @"url": [self URL].absoluteString, @"type": kDZNWebViewControllerContentTypeLink}; [self presentActivityControllerWithContent:content]; } - (void)presentActivityControllerWithContent:(NSDictionary *)content { if (!content) { return; } NSString *type = [content objectForKey:@"type"]; NSString *title = [content objectForKey:@"title"]; NSString *url = [content objectForKey:@"url"]; NSLog(@"type : %@", type); NSLog(@"title : %@", title); NSLog(@"url : %@", url); if ([type isEqualToString:kDZNWebViewControllerContentTypeLink]) { [self presentActivityControllerWithItem:url andTitle:title]; } if ([type isEqualToString:kDZNWebViewControllerContentTypeImage]) { [self setActivityIndicatorsVisible:YES]; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0ul); dispatch_async(queue, ^{ NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; UIImage *image = [UIImage imageWithData:data]; dispatch_sync(dispatch_get_main_queue(), ^{ [self presentActivityControllerWithItem:image andTitle:title]; [self setActivityIndicatorsVisible:NO]; }); }); } } - (void)presentActivityControllerWithItem:(id)item andTitle:(NSString *)title { if (!item) { return; } _presentingActivities = YES; UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[title, item] applicationActivities:[self applicationActivitiesForItem:item]]; controller.excludedActivityTypes = [self excludedActivityTypesForItem:item]; if (title) { [controller setValue:title forKey:@"subject"]; } [self presentViewController:controller animated:YES completion:nil]; controller.completionHandler = ^(NSString *activityType, BOOL completed) { NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed); _presentingActivities = NO; }; } - (void)handleLongPressGesture:(UIGestureRecognizer *)gesture { if (gesture.state == UIGestureRecognizerStateBegan) { [self injectJavaScript]; CGPoint point = [self convertPointToHTMLSystem:[gesture locationInView:_webView]]; //// Get the URL link at the touch location NSString *function = [NSString stringWithFormat:@"script.getElement(%d,%d);", (int)point.x, (int)point.y]; NSString *result = [_webView stringByEvaluatingJavaScriptFromString:function]; NSData *data = [result dataUsingEncoding:NSStringEncodingConversionAllowLossy|NSStringEncodingConversionExternalRepresentation]; if (!data) { return; } NSMutableDictionary *content = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]]; if (content.allValues.count > 0) { [content setObject:[NSValue valueWithCGPoint:point] forKey:@"location"]; [self presentActivityControllerWithContent:content]; } } } - (void)injectJavaScript { NSString *path = [[NSBundle mainBundle] pathForResource:@"inpector-script" ofType:@"js"]; NSString *script = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; [_webView stringByEvaluatingJavaScriptFromString:script]; } - (void)handleInteractivePopGesture:(UIGestureRecognizer *)gesture { NSLog(@"%s : %@",__FUNCTION__, gesture); } - (void)clearProgressViewAnimated:(BOOL)animated { if (!_progressView) { return; } [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ _progressView.alpha = 0; } completion:^(BOOL finished) { [_progressView removeFromSuperview]; }]; } - (void)stopLoading { [self.webView stopLoading]; [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; } #pragma mark - UIWebViewDelegate methods - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (request.URL && !_presentingActivities) { return YES; } return NO; } - (void)webViewDidStartLoad:(UIWebView *)webView { // load balance is use to see if the load was completed end of the site _loadBalance++; if (_loadBalance == 1) { [self setActivityIndicatorsVisible:YES]; } _backwardBarItem.enabled = [_webView canGoBack]; _forwardBarItem.enabled = [_webView canGoForward]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { if (_loadBalance >= 1) _loadBalance--; else if (_loadBalance < 0) _loadBalance = 0; if (_loadBalance == 0) { _didLoadContent = YES; [self setActivityIndicatorsVisible:NO]; } _backwardBarItem.enabled = [_webView canGoBack]; _forwardBarItem.enabled = [_webView canGoForward]; [self setViewTitle:[self pageTitle]]; if ([webView.request.URL isFileURL] && _loadingStyle == DZNWebViewControllerLoadingStyleProgressView) { [_progressView setProgress:1.0 animated:YES]; } } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { _loadBalance = 0; [self setLoadingError:error]; } #pragma mark - UIGestureRecognizerDelegate methods - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { return YES; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([gestureRecognizer isKindOfClass:[DZNLongPressGestureRecognizer class]]) { return YES; } return NO; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { Class class = [DZNLongPressGestureRecognizer class]; if ([gestureRecognizer isKindOfClass:class] || [otherGestureRecognizer isKindOfClass:class]) { return NO; } return YES; } #pragma mark - NJKWebViewProgressDelegate methods - (void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress { [self.progressView setProgress:progress animated:YES]; } #pragma mark - View lifeterm - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)dealloc { _actionBarItem = nil; _backwardBarItem = nil; _forwardBarItem = nil; _loadingBarItem = nil; _activityIndicatorView = nil; _webView = nil; _URL = nil; } #pragma mark - View Auto-Rotation - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return NO; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/DZNWebViewController/Source/Scripts/inpector-script.js ================================================ var script = new function() { this.getElement = function(x,y) { var img = getImage(x,y); if (img == null) return getLink(x,y); else return img; } getLink = function(x,y) { var tags = ""; var e = ""; var offset = 0; while ((tags.length == 0) && (offset < 20)) { e = document.elementFromPoint(x,y+offset); while (e) { if (e.href) { tags += e.href; break; } e = e.parentNode; } if (tags.length == 0) { e = document.elementFromPoint(x,y-offset); while (e) { if (e.href) { tags += e.href; break; } e = e.parentNode; } } offset++; } if (tags != null && tags.length > 0) return '{ "type" : "link" , "url" : "'+ tags +'", "title" : "'+ e.innerHTML +'"}'; else return null; } getImage = function(x,y) { var tags = ""; var title = ""; var e = ""; var offset = 0; while ((tags.length == 0) && (offset < 20)) { e = document.elementFromPoint(x,y+offset); while (e) { if (e.src) { tags += e.src; title += e.alt; break; } e = e.parentNode; } if (tags.length == 0) { e = document.elementFromPoint(x,y-offset); while (e) { if (e.src) { tags += e.src; title += e.alt; break; } e = e.parentNode; } } offset++; } if (tags != null && tags.length > 0) return '{ "type" : "image" , "url" : "'+ tags +'" , "title" : "'+ title +'"}'; else return null; } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Local Podspecs/DZNEmptyDataSet.podspec.json ================================================ { "name": "DZNEmptyDataSet", "version": "1.8", "summary": "A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.", "description": "It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. The -reloadData call will be observed so the empty dataset will be configured whenever needed.", "homepage": "https://github.com/dzenbot/DZNEmptyDataSet", "license": { "type": "MIT", "file": "LICENSE" }, "authors": { "dzenbot": "iromero@dzen.cl" }, "platforms": { "ios": "6.0" }, "source": { "git": "https://github.com/dzenbot/DZNEmptyDataSet.git", "tag": "v1.8" }, "source_files": [ "Classes", "Source/**/*.{h,m}" ], "requires_arc": true, "frameworks": "UIKit" } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/NJKWebViewProgress/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2013 Satoshi Asano 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: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgress.h ================================================ // // NJKWebViewProgress.h // // Created by Satoshi Aasano on 4/20/13. // Copyright (c) 2013 Satoshi Asano. All rights reserved. // #import #undef njk_weak #if __has_feature(objc_arc_weak) #define njk_weak weak #else #define njk_weak unsafe_unretained #endif extern const float NJKInitialProgressValue; extern const float NJKInteractiveProgressValue; extern const float NJKFinalProgressValue; typedef void (^NJKWebViewProgressBlock)(float progress); @protocol NJKWebViewProgressDelegate; @interface NJKWebViewProgress : NSObject @property (nonatomic, njk_weak) idprogressDelegate; @property (nonatomic, njk_weak) idwebViewProxyDelegate; @property (nonatomic, copy) NJKWebViewProgressBlock progressBlock; @property (nonatomic, readonly) float progress; // 0.0..1.0 - (void)reset; @end @protocol NJKWebViewProgressDelegate - (void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgress.m ================================================ // // NJKWebViewProgress.m // // Created by Satoshi Aasano on 4/20/13. // Copyright (c) 2013 Satoshi Asano. All rights reserved. // #import "NJKWebViewProgress.h" NSString *completeRPCURL = @"webviewprogressproxy:///complete"; const float NJKInitialProgressValue = 0.1f; const float NJKInteractiveProgressValue = 0.5f; const float NJKFinalProgressValue = 0.9f; @implementation NJKWebViewProgress { NSUInteger _loadingCount; NSUInteger _maxLoadCount; NSURL *_currentURL; BOOL _interactive; } - (id)init { self = [super init]; if (self) { _maxLoadCount = _loadingCount = 0; _interactive = NO; } return self; } - (void)startProgress { if (_progress < NJKInitialProgressValue) { [self setProgress:NJKInitialProgressValue]; } } - (void)incrementProgress { float progress = self.progress; float maxProgress = _interactive ? NJKFinalProgressValue : NJKInteractiveProgressValue; float remainPercent = (float)_loadingCount / (float)_maxLoadCount; float increment = (maxProgress - progress) * remainPercent; progress += increment; progress = fmin(progress, maxProgress); [self setProgress:progress]; } - (void)completeProgress { [self setProgress:1.0]; } - (void)setProgress:(float)progress { // progress should be incremental only if (progress > _progress || progress == 0) { _progress = progress; if ([_progressDelegate respondsToSelector:@selector(webViewProgress:updateProgress:)]) { [_progressDelegate webViewProgress:self updateProgress:progress]; } if (_progressBlock) { _progressBlock(progress); } } } - (void)reset { _maxLoadCount = _loadingCount = 0; _interactive = NO; [self setProgress:0.0]; } #pragma mark - #pragma mark UIWebViewDelegate - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([request.URL.absoluteString isEqualToString:completeRPCURL]) { [self completeProgress]; return NO; } BOOL ret = YES; if ([_webViewProxyDelegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) { ret = [_webViewProxyDelegate webView:webView shouldStartLoadWithRequest:request navigationType:navigationType]; } BOOL isFragmentJump = NO; if (request.URL.fragment) { NSString *nonFragmentURL = [request.URL.absoluteString stringByReplacingOccurrencesOfString:[@"#" stringByAppendingString:request.URL.fragment] withString:@""]; isFragmentJump = [nonFragmentURL isEqualToString:webView.request.URL.absoluteString]; } BOOL isTopLevelNavigation = [request.mainDocumentURL isEqual:request.URL]; BOOL isHTTP = [request.URL.scheme isEqualToString:@"http"] || [request.URL.scheme isEqualToString:@"https"]; if (ret && !isFragmentJump && isHTTP && isTopLevelNavigation) { _currentURL = request.URL; [self reset]; } return ret; } - (void)webViewDidStartLoad:(UIWebView *)webView { if ([_webViewProxyDelegate respondsToSelector:@selector(webViewDidStartLoad:)]) { [_webViewProxyDelegate webViewDidStartLoad:webView]; } _loadingCount++; _maxLoadCount = fmax(_maxLoadCount, _loadingCount); [self startProgress]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { if ([_webViewProxyDelegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { [_webViewProxyDelegate webViewDidFinishLoad:webView]; } _loadingCount--; [self incrementProgress]; NSString *readyState = [webView stringByEvaluatingJavaScriptFromString:@"document.readyState"]; BOOL interactive = [readyState isEqualToString:@"interactive"]; if (interactive) { _interactive = YES; NSString *waitForCompleteJS = [NSString stringWithFormat:@"window.addEventListener('load',function() { var iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.src = '%@'; document.body.appendChild(iframe); }, false);", completeRPCURL]; [webView stringByEvaluatingJavaScriptFromString:waitForCompleteJS]; } BOOL isNotRedirect = _currentURL && [_currentURL isEqual:webView.request.mainDocumentURL]; BOOL complete = [readyState isEqualToString:@"complete"]; if (complete && isNotRedirect) { [self completeProgress]; } } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { if ([_webViewProxyDelegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { [_webViewProxyDelegate webView:webView didFailLoadWithError:error]; } _loadingCount--; [self incrementProgress]; NSString *readyState = [webView stringByEvaluatingJavaScriptFromString:@"document.readyState"]; BOOL interactive = [readyState isEqualToString:@"interactive"]; if (interactive) { _interactive = YES; NSString *waitForCompleteJS = [NSString stringWithFormat:@"window.addEventListener('load',function() { var iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.src = '%@'; document.body.appendChild(iframe); }, false);", completeRPCURL]; [webView stringByEvaluatingJavaScriptFromString:waitForCompleteJS]; } BOOL isNotRedirect = _currentURL && [_currentURL isEqual:webView.request.mainDocumentURL]; BOOL complete = [readyState isEqualToString:@"complete"]; if (complete && isNotRedirect) { [self completeProgress]; } } #pragma mark - #pragma mark Method Forwarding // for future UIWebViewDelegate impl - (BOOL)respondsToSelector:(SEL)aSelector { if ( [super respondsToSelector:aSelector] ) return YES; if ([self.webViewProxyDelegate respondsToSelector:aSelector]) return YES; return NO; } - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { NSMethodSignature *signature = [super methodSignatureForSelector:selector]; if(!signature) { if([_webViewProxyDelegate respondsToSelector:selector]) { return [(NSObject *)_webViewProxyDelegate methodSignatureForSelector:selector]; } } return signature; } - (void)forwardInvocation:(NSInvocation*)invocation { if ([_webViewProxyDelegate respondsToSelector:[invocation selector]]) { [invocation invokeWithTarget:_webViewProxyDelegate]; } } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgressView.h ================================================ // // NJKWebViewProgressView.h // iOS 7 Style WebView Progress Bar // // Created by Satoshi Aasano on 11/16/13. // Copyright (c) 2013 Satoshi Asano. All rights reserved. // #import @interface NJKWebViewProgressView : UIView @property (nonatomic) float progress; @property (nonatomic) UIView *progressBarView; @property (nonatomic) NSTimeInterval barAnimationDuration; // default 0.1 @property (nonatomic) NSTimeInterval fadeAnimationDuration; // default 0.27 @property (nonatomic) NSTimeInterval fadeOutDelay; // default 0.1 - (void)setProgress:(float)progress animated:(BOOL)animated; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgressView.m ================================================ // // NJKWebViewProgressView.m // // Created by Satoshi Aasanoon 11/16/13. // Copyright (c) 2013 Satoshi Asano. All rights reserved. // #import "NJKWebViewProgressView.h" @implementation NJKWebViewProgressView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self configureViews]; } return self; } - (void)awakeFromNib { [super awakeFromNib]; [self configureViews]; } -(void)configureViews { self.userInteractionEnabled = NO; self.autoresizingMask = UIViewAutoresizingFlexibleWidth; _progressBarView = [[UIView alloc] initWithFrame:self.bounds]; _progressBarView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; UIColor *tintColor = [UIColor colorWithRed:22.f / 255.f green:126.f / 255.f blue:251.f / 255.f alpha:1.0]; // iOS7 Safari bar color if ([UIApplication.sharedApplication.delegate.window respondsToSelector:@selector(setTintColor:)] && UIApplication.sharedApplication.delegate.window.tintColor) { tintColor = UIApplication.sharedApplication.delegate.window.tintColor; } _progressBarView.backgroundColor = tintColor; [self addSubview:_progressBarView]; _barAnimationDuration = 0.27f; _fadeAnimationDuration = 0.27f; _fadeOutDelay = 0.1f; } -(void)setProgress:(float)progress { [self setProgress:progress animated:NO]; } - (void)setProgress:(float)progress animated:(BOOL)animated { BOOL isGrowing = progress > 0.0; [UIView animateWithDuration:(isGrowing && animated) ? _barAnimationDuration : 0.0 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ CGRect frame = _progressBarView.frame; frame.size.width = progress * self.bounds.size.width; _progressBarView.frame = frame; } completion:nil]; if (progress >= 1.0) { [UIView animateWithDuration:animated ? _fadeAnimationDuration : 0.0 delay:_fadeOutDelay options:UIViewAnimationOptionCurveEaseInOut animations:^{ _progressBarView.alpha = 0.0; } completion:^(BOOL completed){ CGRect frame = _progressBarView.frame; frame.size.width = 0; _progressBarView.frame = frame; }]; } else { [UIView animateWithDuration:animated ? _fadeAnimationDuration : 0.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ _progressBarView.alpha = 1.0; } completion:nil]; } } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/NJKWebViewProgress/README.md ================================================ # NJKWebViewProgress NJKWebViewProgress is a progress interface library for UIWebView. Currently, UIWebView doesn't have official progress interface. You can implement progress bar for your in-app browser using this module. iOS ScreenShot 1 NJKWebViewProgress doesn't use CocoaTouch's private methods. It's AppStore safe. # Used in Production - [Yahoo! JAPAN](https://itunes.apple.com/app/yahoo!-japan/id299147843?mt=8) - [Facebook](https://itunes.apple.com/app/facebook/id284882215?mt=8‎) # Requirements - iOS 4.3 or later - ARC # Usage Instance `NJKWebViewProgress` and set `UIWebViewDelegate`. If you set `webViewProxyDelegate`, `NJKWebViewProgress` should perform as a proxy object. ```objc _progressProxy = [[NJKWebViewProgress alloc] init]; // instance variable webView.delegate = _progressProxy; _progressProxy.webViewProxyDelegate = self; _progressProxy.progressDelegate = self; ``` When UIWebView start loading, `NJKWebViewProgress` call delegate method and block with progress. ```objc -(void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress { [progressView setProgress:progress animated:NO]; } ``` ```objc progressProxy.progressBlock = ^(float progress) { [progressView setProgress:progress animated:NO]; }; ``` You can determine the current state of the document by comparing the `progress` value to one of the provided constants: ```objc -(void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress { if (progress == NJKInteractiveProgressValue) { // The web view has finished parsing the document, // but is still loading sub-resources } } ``` This repository contains iOS 7 Safari style bar `NJKWebViewProgressView`. You can choose `NJKWebViewProgressView`, `UIProgressView` or your custom bar. # Install ## CocoaPods ``` pod 'NJKWebViewProgress' ``` # License [Apache]: http://www.apache.org/licenses/LICENSE-2.0 [MIT]: http://www.opensource.org/licenses/mit-license.php [GPL]: http://www.gnu.org/licenses/gpl.html [BSD]: http://opensource.org/licenses/bsd-license.php [MIT license][MIT]. ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Pods.xcodeproj/project.pbxproj ================================================ archiveVersion 1 classes objectVersion 46 objects 0073E62095A55A1F04431C64E8DB6061 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc name DZNWebViewController.m path Source/Classes/DZNWebViewController.m sourceTree <group> 00D64622331244D48CEF8CE7FF8F7EAB children 4CB917E13EFB8E8A77A9DFB54A094700 3285B9E793F3F681BD81989693DB7FDB isa PBXGroup name Core sourceTree <group> 01D849F61E9CC095AA77BAE56F346986 fileRef 488BDE8C22466D3528798E30AE6B5402 isa PBXBuildFile 02A8E618E310DC8260866C0A176B8856 buildActionMask 2147483647 files 7DEC2641EE544FF8108497D2D83AD8BB D0DB248CCEF8BC38702BB8F452FD5050 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 0413937F6D6F601B38AC993CF871B9D4 buildActionMask 2147483647 files 40FCDC44E85DE5BD85AF2850D2806CEE EBC06BB5E21023F73D6F1CA0BE30E89F isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 066718DC0ECEFF52EB0A0C806917569C includeInIndex 1 isa PBXFileReference name toolbar_backward@2x.png path Source/Resources/toolbar_backward@2x.png sourceTree <group> 087B0E4C776D6EFC2671C4206717E79B includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc name NJKWebViewProgressView.m path NJKWebViewProgress/NJKWebViewProgressView.m sourceTree <group> 09B2E8DCC807ED54CF44E15C7959D22A includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path DZNWebViewController-prefix.pch sourceTree <group> 0A95F74CB955C77DD2BDC6D29C5F3770 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path DZNWebViewController-dummy.m sourceTree <group> 0D64CC4711BF078F371F23487E9BF068 includeInIndex 1 isa PBXFileReference name Link7@2x.png path Source/Resources/Link7@2x.png sourceTree <group> 0DD91045976DDAD683B1C7CAD39F8AE5 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path NJKWebViewProgress-dummy.m sourceTree <group> 0E289E1A078FE239BA061FB854977182 children C6397BB480ED559EC8C4D23E5609C595 B005BE0EC46301ED8CCFDE3E1C4A92A1 6724C6F09F10BF9DB297DDCC4DF74370 0073E62095A55A1F04431C64E8DB6061 93A488956ED8CAEBF9077073B1642C90 7152B5FF5A9C4F197012B71B22F99497 isa PBXGroup name DZNWebViewController path DZNWebViewController sourceTree <group> 0E375E174055F581ED4CF6FA4E0C8790 buildActionMask 2147483647 files FB912EEF8564E7EBB05F67DB96DD26C4 96E697C0C0FD092DA857FD588D2BC7D1 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 1437484E41E42B115A552058DFC598B3 includeInIndex 1 isa PBXFileReference name Chrome7@2x.png path Source/Resources/Chrome7@2x.png sourceTree <group> 1567880981488C1D179ADF6A1ECECAF9 children 76532940032CB802526412FF77D1FA32 2ABA9D4094A198868F811D99DF803232 FA28D880912CEEEEBD708B97F02C0DD1 525949615DCBEE0F02C41F1A6BB82D63 isa PBXGroup name Support Files path Examples/WebBrowser/Pods/Target Support Files/DZNEmptyDataSet sourceTree <group> 15A529C27057E4A57D259CBC6E6CE49C includeInIndex 1 isa PBXFileReference lastKnownFileType text path Pods-acknowledgements.markdown sourceTree <group> 16A9AF8E5E3CA31F13C217CF15EBC2D5 includeInIndex 1 isa PBXFileReference name Chrome7@2x~ipad.png path Source/Resources/Chrome7@2x~ipad.png sourceTree <group> 1C55386CA03F0186E1DD13ECB5322E53 buildActionMask 2147483647 files 567A61A81B4A3196053BF8770809D4F8 2AA7BA789526BF7E304CEFC8A6ED8E43 4D939E3667F633B71122A0C3CB796F05 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 1E6367EA7EE6EC92788A3035BED4D6DA includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.debug.xcconfig sourceTree <group> 21CF14A60E42F519D8A245C74E080C05 containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString 477F7AE04133753DEE38147EFB53937F remoteInfo DZNWebViewController 23C9FB54F2A600BA08974D877C5C75DB includeInIndex 1 isa PBXFileReference name Safari7~ipad.png path Source/Resources/Safari7~ipad.png sourceTree <group> 251A0F9D3243DA7DE7CEEE71C5D45E64 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNWebViewController.xcconfig sourceTree <group> 26ABDED51EFD3789BA3FD7122BECAA7E children 00D64622331244D48CEF8CE7FF8F7EAB 52E35203AA0C4C76011C90B32EE9940A A2A9934A7E48EB557EADBFD949E2FB24 isa PBXGroup name NJKWebViewProgress path NJKWebViewProgress sourceTree <group> 2975A9E2355EF5EEF7D0AB8CFE231775 fileRef 0073E62095A55A1F04431C64E8DB6061 isa PBXBuildFile 2AA7BA789526BF7E304CEFC8A6ED8E43 fileRef 3285B9E793F3F681BD81989693DB7FDB isa PBXBuildFile settings COMPILER_FLAGS -DOS_OBJECT_USE_OBJC=0 2ABA9D4094A198868F811D99DF803232 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet-Private.xcconfig sourceTree <group> 2D5514AC2D607AB0CDEACDCF6E583A21 baseConfigurationReference 2ABA9D4094A198868F811D99DF803232 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 2D8E8EC45A3A1A1D94AE762CB5028504 buildConfigurations A70CDAD61F90AC503C7D04CC22DA2923 FB45FFD90572718D82AB9092B750F0CA defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 31201D4DCCAC1E05500309C4A16BEA34 includeInIndex 1 isa PBXFileReference name Link7.png path Source/Resources/Link7.png sourceTree <group> 321A4E6A83E343470840E18593A2C0F2 baseConfigurationReference 866829F0438E7A1FFD0AA0BC40B44B88 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNWebViewController/DZNWebViewController-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug 326EC967FB51B178CB8081E8062E45B9 includeInIndex 1 isa PBXFileReference name Opera7.png path Source/Resources/Opera7.png sourceTree <group> 3285B9E793F3F681BD81989693DB7FDB includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc name NJKWebViewProgress.m path NJKWebViewProgress/NJKWebViewProgress.m sourceTree <group> 32D0072C747E69660F212CAA7C9A617B buildActionMask 2147483647 files CC9BE5817D3DF008561806689BAE0037 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 33A8490F19EF0F87A46B0D10D487692C includeInIndex 1 isa PBXFileReference name Opera7@2x~ipad.png path Source/Resources/Opera7@2x~ipad.png sourceTree <group> 3478F2DCA6D15A17EB15C732B2A29316 isa PBXTargetDependency name DZNEmptyDataSet target FBC39E4CFD44CE42CBCB4C7D314F945A targetProxy 937931930E346CE38EB6AAA9E7634CD3 3BD1AE08BA079DFB376041170F33FBF6 fileRef 9BB56AFA98D0E3E9F5EF527F6C622650 isa PBXBuildFile 40FCDC44E85DE5BD85AF2850D2806CEE fileRef 4CB917E13EFB8E8A77A9DFB54A094700 isa PBXBuildFile 433CD3331B6C3787F473C941B61FC68F children D0FB9306D21AF23A056944AE037CBFFF isa PBXGroup name Frameworks sourceTree <group> 475E470C0987A8148EE64EE29EA4341F explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libPods.a path libPods.a sourceTree BUILT_PRODUCTS_DIR 477F7AE04133753DEE38147EFB53937F buildConfigurationList D78D847DA540289161D6FE2DECCDA3CE buildPhases 9B96644CD0BD51EDBF2BF88F5C6E0F51 02A8E618E310DC8260866C0A176B8856 75100CB23FCD462E35EEB26D078FE4F1 buildRules dependencies 4B88A7B239A67E11F0383D9188FBFA49 isa PBXNativeTarget name DZNWebViewController productName DZNWebViewController productReference 741F1CAE077A31AD9849213CA657545E productType com.apple.product-type.library.static 488BDE8C22466D3528798E30AE6B5402 isa PBXFileReference lastKnownFileType wrapper.framework name Foundation.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework sourceTree DEVELOPER_DIR 4AFBED6ECA416534FA2B6532862AED42 includeInIndex 1 isa PBXFileReference name Dolphin7.png path Source/Resources/Dolphin7.png sourceTree <group> 4B88A7B239A67E11F0383D9188FBFA49 isa PBXTargetDependency name NJKWebViewProgress target 5CC6C4056B04D092E49F6A43604045AF targetProxy EE281861B6DBC82D55D54DA87FCCFD9F 4CB917E13EFB8E8A77A9DFB54A094700 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h name NJKWebViewProgress.h path NJKWebViewProgress/NJKWebViewProgress.h sourceTree <group> 4D939E3667F633B71122A0C3CB796F05 fileRef 087B0E4C776D6EFC2671C4206717E79B isa PBXBuildFile settings COMPILER_FLAGS -DOS_OBJECT_USE_OBJC=0 525949615DCBEE0F02C41F1A6BB82D63 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path DZNEmptyDataSet-prefix.pch sourceTree <group> 52E35203AA0C4C76011C90B32EE9940A children 69C6B5DB0D94FC77C75E778BAD64E79E 087B0E4C776D6EFC2671C4206717E79B isa PBXGroup name ProgressView sourceTree <group> 5469A210B3E614E4FEEDD3159FFE90C1 includeInIndex 1 isa PBXFileReference name Opera7~ipad.png path Source/Resources/Opera7~ipad.png sourceTree <group> 567A61A81B4A3196053BF8770809D4F8 fileRef 0DD91045976DDAD683B1C7CAD39F8AE5 isa PBXBuildFile 58856371393ACFD6A520E06621D7DCCF buildConfigurations A92E7DC4AA2B7D01F6E02A3F6E67E100 CE0846A3D34851D399F971B79134E3A5 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 58D54D01C7C264E43DFF4DB7F808F173 buildConfigurations E02D9C0B9F7B4E4330A75496C55268B3 2D5514AC2D607AB0CDEACDCF6E583A21 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 59D8577F668C692FAB872D8FDC51C5DC baseConfigurationReference 866829F0438E7A1FFD0AA0BC40B44B88 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNWebViewController/DZNWebViewController-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 5CC6C4056B04D092E49F6A43604045AF buildConfigurationList 58856371393ACFD6A520E06621D7DCCF buildPhases 1C55386CA03F0186E1DD13ECB5322E53 32D0072C747E69660F212CAA7C9A617B 0413937F6D6F601B38AC993CF871B9D4 buildRules dependencies isa PBXNativeTarget name NJKWebViewProgress productName NJKWebViewProgress productReference 6D4465D03AD96C0EA6C0156AD46CE253 productType com.apple.product-type.library.static 5DB666AC1070276A7247E3A017AB9DC3 children F6977508B6D92B50BAB6F2EAFC125E29 isa PBXGroup name Development Pods sourceTree <group> 5E6955AD34728605AE35F018EB73CB7A containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString 5CC6C4056B04D092E49F6A43604045AF remoteInfo NJKWebViewProgress 5E9EADFF5D42F6797C393118B0C2F9A5 includeInIndex 1 isa PBXFileReference name Safari7.png path Source/Resources/Safari7.png sourceTree <group> 60C4A67006B834120D84AF62A45AE782 children 0E289E1A078FE239BA061FB854977182 26ABDED51EFD3789BA3FD7122BECAA7E isa PBXGroup name Pods sourceTree <group> 61C6A344AF6013905621E7A918AC3AA3 fileRef A4F6D097A9E1B249CEDFC4EE4D7A48A9 isa PBXBuildFile 635E612DB8D14980C75972C0A9CAABAA buildConfigurationList 779CD1D16F3A16795920C50919972DE9 buildPhases 64D9DF6D02079CDA82EBBA54A3B4EF05 EA6C45AFB0BE2C0DBBD0F156AD3D6D14 buildRules dependencies 3478F2DCA6D15A17EB15C732B2A29316 C1B3908E1F4BEF1CBA685C3F81FA69A2 A8DED044636DD0D714015E763AB37254 isa PBXNativeTarget name Pods productName Pods productReference 475E470C0987A8148EE64EE29EA4341F productType com.apple.product-type.library.static 641AE05DD55E5E6AC1590CD7B4A18F97 includeInIndex 1 isa PBXFileReference lastKnownFileType text.script.sh path Pods-resources.sh sourceTree <group> 64D9DF6D02079CDA82EBBA54A3B4EF05 buildActionMask 2147483647 files 3BD1AE08BA079DFB376041170F33FBF6 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 66B732661C0B62E6FE34E4D45838768D includeInIndex 1 isa PBXFileReference name Opera7@2x.png path Source/Resources/Opera7@2x.png sourceTree <group> 6724C6F09F10BF9DB297DDCC4DF74370 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h name DZNWebViewController.h path Source/Classes/DZNWebViewController.h sourceTree <group> 67FA59F041ACB11DFC39C3EAA88044C6 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path NJKWebViewProgress-Private.xcconfig sourceTree <group> 685CA950AA4A4E958900902DE3E24BB9 children BD71D8C8365D72389F242C8CB5F9A1BB A5890604E32694489BFFC947FD365109 isa PBXGroup name Source path Source sourceTree <group> 69C6B5DB0D94FC77C75E778BAD64E79E includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h name NJKWebViewProgressView.h path NJKWebViewProgress/NJKWebViewProgressView.h sourceTree <group> 6D4465D03AD96C0EA6C0156AD46CE253 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libNJKWebViewProgress.a path libNJKWebViewProgress.a sourceTree BUILT_PRODUCTS_DIR 7152B5FF5A9C4F197012B71B22F99497 children 251A0F9D3243DA7DE7CEEE71C5D45E64 866829F0438E7A1FFD0AA0BC40B44B88 0A95F74CB955C77DD2BDC6D29C5F3770 09B2E8DCC807ED54CF44E15C7959D22A isa PBXGroup name Support Files path ../Target Support Files/DZNWebViewController sourceTree <group> 741F1CAE077A31AD9849213CA657545E explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libDZNWebViewController.a path libDZNWebViewController.a sourceTree BUILT_PRODUCTS_DIR 74CCEA35B1C48D4804C8F1933826B260 baseConfigurationReference C863E3EA6C5F317637A9AB0441D80F38 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release 75100CB23FCD462E35EEB26D078FE4F1 buildActionMask 2147483647 files F8CE190644F372AD96FF9A6C1B6030F1 915B3868DF5E7DF86C822250138C26B7 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 76532940032CB802526412FF77D1FA32 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNEmptyDataSet.xcconfig sourceTree <group> 779CD1D16F3A16795920C50919972DE9 buildConfigurations E16F060272BDCBB8427970FE55475812 74CCEA35B1C48D4804C8F1933826B260 defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList 7DB346D0F39D3F0E887471402A8071AB children BA6428E9F66FD5A23C0A2E06ED26CD2F 5DB666AC1070276A7247E3A017AB9DC3 433CD3331B6C3787F473C941B61FC68F 60C4A67006B834120D84AF62A45AE782 CCA510CFBEA2D207524CDA0D73C3B561 D2411A5FE7F7A004607BED49990C37F4 isa PBXGroup sourceTree <group> 7DEC2641EE544FF8108497D2D83AD8BB fileRef 488BDE8C22466D3528798E30AE6B5402 isa PBXBuildFile 866829F0438E7A1FFD0AA0BC40B44B88 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path DZNWebViewController-Private.xcconfig sourceTree <group> 86724DCAD53620BDFA4606251852B941 includeInIndex 1 isa PBXFileReference name Dolphin7@2x~ipad.png path Source/Resources/Dolphin7@2x~ipad.png sourceTree <group> 8925101CC8B7B61B5FE3199640820F0F includeInIndex 1 isa PBXFileReference name Chrome7~ipad.png path Source/Resources/Chrome7~ipad.png sourceTree <group> 8A0271BAFC9A632953155DA1BF56ABB3 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path NJKWebViewProgress.xcconfig sourceTree <group> 8F77189E6318E8CF7D4477430C926C56 includeInIndex 1 isa PBXFileReference name Safari7@2x~ipad.png path Source/Resources/Safari7@2x~ipad.png sourceTree <group> 915B3868DF5E7DF86C822250138C26B7 fileRef 6724C6F09F10BF9DB297DDCC4DF74370 isa PBXBuildFile 928DC48E6B6A0AEF70BE5899C43C37C8 buildActionMask 2147483647 files F5D3B1E4F40C2261682245A246C733D7 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 937931930E346CE38EB6AAA9E7634CD3 containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString FBC39E4CFD44CE42CBCB4C7D314F945A remoteInfo DZNEmptyDataSet 93A488956ED8CAEBF9077073B1642C90 children FF1711ABD18CC794D4A8CC4688EE2ED5 1437484E41E42B115A552058DFC598B3 16A9AF8E5E3CA31F13C217CF15EBC2D5 8925101CC8B7B61B5FE3199640820F0F 4AFBED6ECA416534FA2B6532862AED42 E2486259CE059E8504893500040A277A 86724DCAD53620BDFA4606251852B941 A56984EF53584DC2C51242ED300294E8 31201D4DCCAC1E05500309C4A16BEA34 0D64CC4711BF078F371F23487E9BF068 EF3209A99BF79C2BA0B40581A96AF81F A21D8D00852BA1953EEAED467FFCE955 326EC967FB51B178CB8081E8062E45B9 66B732661C0B62E6FE34E4D45838768D 33A8490F19EF0F87A46B0D10D487692C 5469A210B3E614E4FEEDD3159FFE90C1 5E9EADFF5D42F6797C393118B0C2F9A5 E8BFF88494664E704CBCEE5CD03BD4CD 8F77189E6318E8CF7D4477430C926C56 23C9FB54F2A600BA08974D877C5C75DB DE406E5C9C961184770C68FAD854F503 AB0275B1A20701F0FFB0578F2DEEEED3 066718DC0ECEFF52EB0A0C806917569C BEF8748F405E35019DB7442C57ACCF32 C3DDE1147A36EC3A56E23F90FA3E8F4F isa PBXGroup name Resources sourceTree <group> 9489FB90811ED6FABE3779A7F3540F94 fileRef 488BDE8C22466D3528798E30AE6B5402 isa PBXBuildFile 952EEBFAF8F7E620423C9F156F25A506 children 15A529C27057E4A57D259CBC6E6CE49C BF59BC15D23E1E1912C8F334E7236813 9BB56AFA98D0E3E9F5EF527F6C622650 641AE05DD55E5E6AC1590CD7B4A18F97 1E6367EA7EE6EC92788A3035BED4D6DA C863E3EA6C5F317637A9AB0441D80F38 isa PBXGroup name Pods path Target Support Files/Pods sourceTree <group> 96E697C0C0FD092DA857FD588D2BC7D1 fileRef A5890604E32694489BFFC947FD365109 isa PBXBuildFile 9B96644CD0BD51EDBF2BF88F5C6E0F51 buildActionMask 2147483647 files A1DCD87F2C210B625448672C220131AC AD54FC0B3CC40B092E7F07A47D50D3A9 2975A9E2355EF5EEF7D0AB8CFE231775 isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 9BB56AFA98D0E3E9F5EF527F6C622650 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path Pods-dummy.m sourceTree <group> 9E2BF271EF3695337D8D0D0D0C05CBEF includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path NJKWebViewProgress-prefix.pch sourceTree <group> A1DCD87F2C210B625448672C220131AC fileRef B005BE0EC46301ED8CCFDE3E1C4A92A1 isa PBXBuildFile A21D8D00852BA1953EEAED467FFCE955 includeInIndex 1 isa PBXFileReference name Link7~ipad.png path Source/Resources/Link7~ipad.png sourceTree <group> A2A9934A7E48EB557EADBFD949E2FB24 children 8A0271BAFC9A632953155DA1BF56ABB3 67FA59F041ACB11DFC39C3EAA88044C6 0DD91045976DDAD683B1C7CAD39F8AE5 9E2BF271EF3695337D8D0D0D0C05CBEF isa PBXGroup name Support Files path ../Target Support Files/NJKWebViewProgress sourceTree <group> A4F6D097A9E1B249CEDFC4EE4D7A48A9 isa PBXFileReference lastKnownFileType wrapper.framework name UIKit.framework path Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework sourceTree DEVELOPER_DIR A56984EF53584DC2C51242ED300294E8 includeInIndex 1 isa PBXFileReference name Dolphin7~ipad.png path Source/Resources/Dolphin7~ipad.png sourceTree <group> A5890604E32694489BFFC947FD365109 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path UIScrollView+EmptyDataSet.m sourceTree <group> A70CDAD61F90AC503C7D04CC22DA2923 buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_DYNAMIC_NO_PIC NO 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 GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 8.0 ONLY_ACTIVE_ARCH YES STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build isa XCBuildConfiguration name Debug A8DED044636DD0D714015E763AB37254 isa PBXTargetDependency name NJKWebViewProgress target 5CC6C4056B04D092E49F6A43604045AF targetProxy 5E6955AD34728605AE35F018EB73CB7A A92E7DC4AA2B7D01F6E02A3F6E67E100 baseConfigurationReference 67FA59F041ACB11DFC39C3EAA88044C6 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/NJKWebViewProgress/NJKWebViewProgress-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug AA3640DA259BAB271F6F37146DAFE207 buildActionMask 2147483647 files 9489FB90811ED6FABE3779A7F3540F94 61C6A344AF6013905621E7A918AC3AA3 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 AB0275B1A20701F0FFB0578F2DEEEED3 includeInIndex 1 isa PBXFileReference name toolbar_backward.png path Source/Resources/toolbar_backward.png sourceTree <group> AD54FC0B3CC40B092E7F07A47D50D3A9 fileRef 0A95F74CB955C77DD2BDC6D29C5F3770 isa PBXBuildFile B005BE0EC46301ED8CCFDE3E1C4A92A1 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc name DZNPolyActivity.m path Source/Classes/DZNPolyActivity.m sourceTree <group> BA6428E9F66FD5A23C0A2E06ED26CD2F includeInIndex 1 isa PBXFileReference lastKnownFileType text name Podfile path ../Podfile sourceTree SOURCE_ROOT xcLanguageSpecificationIdentifier xcode.lang.ruby BD71D8C8365D72389F242C8CB5F9A1BB includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h path UIScrollView+EmptyDataSet.h sourceTree <group> BEF8748F405E35019DB7442C57ACCF32 includeInIndex 1 isa PBXFileReference name toolbar_forward.png path Source/Resources/toolbar_forward.png sourceTree <group> BF59BC15D23E1E1912C8F334E7236813 includeInIndex 1 isa PBXFileReference lastKnownFileType text.plist.xml path Pods-acknowledgements.plist sourceTree <group> C1B3908E1F4BEF1CBA685C3F81FA69A2 isa PBXTargetDependency name DZNWebViewController target 477F7AE04133753DEE38147EFB53937F targetProxy 21CF14A60E42F519D8A245C74E080C05 C3DDE1147A36EC3A56E23F90FA3E8F4F includeInIndex 1 isa PBXFileReference name toolbar_forward@2x.png path Source/Resources/toolbar_forward@2x.png sourceTree <group> C6397BB480ED559EC8C4D23E5609C595 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.h name DZNPolyActivity.h path Source/Classes/DZNPolyActivity.h sourceTree <group> C863E3EA6C5F317637A9AB0441D80F38 includeInIndex 1 isa PBXFileReference lastKnownFileType text.xcconfig path Pods.release.xcconfig sourceTree <group> C9150457C17D5815F1D554D43C3D9E13 explicitFileType archive.ar includeInIndex 0 isa PBXFileReference name libDZNEmptyDataSet.a path libDZNEmptyDataSet.a sourceTree BUILT_PRODUCTS_DIR CC9BE5817D3DF008561806689BAE0037 fileRef 488BDE8C22466D3528798E30AE6B5402 isa PBXBuildFile CCA510CFBEA2D207524CDA0D73C3B561 children C9150457C17D5815F1D554D43C3D9E13 741F1CAE077A31AD9849213CA657545E 6D4465D03AD96C0EA6C0156AD46CE253 475E470C0987A8148EE64EE29EA4341F isa PBXGroup name Products sourceTree <group> CE0846A3D34851D399F971B79134E3A5 baseConfigurationReference 67FA59F041ACB11DFC39C3EAA88044C6 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/NJKWebViewProgress/NJKWebViewProgress-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO NO OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Release D0DB248CCEF8BC38702BB8F452FD5050 fileRef A4F6D097A9E1B249CEDFC4EE4D7A48A9 isa PBXBuildFile D0FB9306D21AF23A056944AE037CBFFF children 488BDE8C22466D3528798E30AE6B5402 A4F6D097A9E1B249CEDFC4EE4D7A48A9 isa PBXGroup name iOS sourceTree <group> D2411A5FE7F7A004607BED49990C37F4 children 952EEBFAF8F7E620423C9F156F25A506 isa PBXGroup name Targets Support Files sourceTree <group> D41D8CD98F00B204E9800998ECF8427E attributes LastSwiftUpdateCheck 0700 LastUpgradeCheck 0700 buildConfigurationList 2D8E8EC45A3A1A1D94AE762CB5028504 compatibilityVersion Xcode 3.2 developmentRegion English hasScannedForEncodings 0 isa PBXProject knownRegions en mainGroup 7DB346D0F39D3F0E887471402A8071AB productRefGroup CCA510CFBEA2D207524CDA0D73C3B561 projectDirPath projectReferences projectRoot targets FBC39E4CFD44CE42CBCB4C7D314F945A 477F7AE04133753DEE38147EFB53937F 5CC6C4056B04D092E49F6A43604045AF 635E612DB8D14980C75972C0A9CAABAA D78D847DA540289161D6FE2DECCDA3CE buildConfigurations 321A4E6A83E343470840E18593A2C0F2 59D8577F668C692FAB872D8FDC51C5DC defaultConfigurationIsVisible 0 defaultConfigurationName Release isa XCConfigurationList DE406E5C9C961184770C68FAD854F503 includeInIndex 1 isa PBXFileReference name inpector-script.js path Source/Scripts/inpector-script.js sourceTree <group> E02D9C0B9F7B4E4330A75496C55268B3 baseConfigurationReference 2ABA9D4094A198868F811D99DF803232 buildSettings ENABLE_STRICT_OBJC_MSGSEND YES GCC_PREFIX_HEADER Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug E16F060272BDCBB8427970FE55475812 baseConfigurationReference 1E6367EA7EE6EC92788A3035BED4D6DA buildSettings ENABLE_STRICT_OBJC_MSGSEND YES IPHONEOS_DEPLOYMENT_TARGET 8.0 MTL_ENABLE_DEBUG_INFO YES OTHER_LDFLAGS OTHER_LIBTOOLFLAGS PODS_ROOT $(SRCROOT) PRODUCT_NAME $(TARGET_NAME) SDKROOT iphoneos SKIP_INSTALL YES isa XCBuildConfiguration name Debug E2486259CE059E8504893500040A277A includeInIndex 1 isa PBXFileReference name Dolphin7@2x.png path Source/Resources/Dolphin7@2x.png sourceTree <group> E8BFF88494664E704CBCEE5CD03BD4CD includeInIndex 1 isa PBXFileReference name Safari7@2x.png path Source/Resources/Safari7@2x.png sourceTree <group> EA6C45AFB0BE2C0DBBD0F156AD3D6D14 buildActionMask 2147483647 files 01D849F61E9CC095AA77BAE56F346986 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 EBC06BB5E21023F73D6F1CA0BE30E89F fileRef 69C6B5DB0D94FC77C75E778BAD64E79E isa PBXBuildFile EE281861B6DBC82D55D54DA87FCCFD9F containerPortal D41D8CD98F00B204E9800998ECF8427E isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString 5CC6C4056B04D092E49F6A43604045AF remoteInfo NJKWebViewProgress EF3209A99BF79C2BA0B40581A96AF81F includeInIndex 1 isa PBXFileReference name Link7@2x~ipad.png path Source/Resources/Link7@2x~ipad.png sourceTree <group> F5D3B1E4F40C2261682245A246C733D7 fileRef BD71D8C8365D72389F242C8CB5F9A1BB isa PBXBuildFile F6977508B6D92B50BAB6F2EAFC125E29 children 685CA950AA4A4E958900902DE3E24BB9 1567880981488C1D179ADF6A1ECECAF9 isa PBXGroup name DZNEmptyDataSet path ../../.. sourceTree <group> F8CE190644F372AD96FF9A6C1B6030F1 fileRef C6397BB480ED559EC8C4D23E5609C595 isa PBXBuildFile FA28D880912CEEEEBD708B97F02C0DD1 includeInIndex 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc path DZNEmptyDataSet-dummy.m sourceTree <group> FB45FFD90572718D82AB9092B750F0CA buildSettings ALWAYS_SEARCH_USER_PATHS NO CLANG_CXX_LANGUAGE_STANDARD gnu++0x CLANG_CXX_LIBRARY libc++ CLANG_ENABLE_MODULES YES CLANG_ENABLE_OBJC_ARC YES CLANG_WARN_BOOL_CONVERSION YES CLANG_WARN_CONSTANT_CONVERSION YES CLANG_WARN_DIRECT_OBJC_ISA_USAGE YES CLANG_WARN_EMPTY_BODY YES CLANG_WARN_ENUM_CONVERSION YES CLANG_WARN_INT_CONVERSION YES CLANG_WARN_OBJC_ROOT_CLASS YES CLANG_WARN_UNREACHABLE_CODE YES CLANG_WARN__DUPLICATE_METHOD_MATCH YES COPY_PHASE_STRIP YES ENABLE_NS_ASSERTIONS NO GCC_C_LANGUAGE_STANDARD gnu99 GCC_PREPROCESSOR_DEFINITIONS RELEASE=1 GCC_WARN_64_TO_32_BIT_CONVERSION YES GCC_WARN_ABOUT_RETURN_TYPE YES GCC_WARN_UNDECLARED_SELECTOR YES GCC_WARN_UNINITIALIZED_AUTOS YES GCC_WARN_UNUSED_FUNCTION YES GCC_WARN_UNUSED_VARIABLE YES IPHONEOS_DEPLOYMENT_TARGET 8.0 STRIP_INSTALLED_PRODUCT NO SYMROOT ${SRCROOT}/../build VALIDATE_PRODUCT YES isa XCBuildConfiguration name Release FB912EEF8564E7EBB05F67DB96DD26C4 fileRef FA28D880912CEEEEBD708B97F02C0DD1 isa PBXBuildFile FBC39E4CFD44CE42CBCB4C7D314F945A buildConfigurationList 58D54D01C7C264E43DFF4DB7F808F173 buildPhases 0E375E174055F581ED4CF6FA4E0C8790 AA3640DA259BAB271F6F37146DAFE207 928DC48E6B6A0AEF70BE5899C43C37C8 buildRules dependencies isa PBXNativeTarget name DZNEmptyDataSet productName DZNEmptyDataSet productReference C9150457C17D5815F1D554D43C3D9E13 productType com.apple.product-type.library.static FF1711ABD18CC794D4A8CC4688EE2ED5 includeInIndex 1 isa PBXFileReference name Chrome7.png path Source/Resources/Chrome7.png sourceTree <group> rootObject D41D8CD98F00B204E9800998ECF8427E ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-Private.xcconfig ================================================ #include "DZNEmptyDataSet.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/DZNWebViewController" "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" OTHER_LDFLAGS = ${DZNEMPTYDATASET_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-dummy.m ================================================ #import @interface PodsDummy_DZNEmptyDataSet : NSObject @end @implementation PodsDummy_DZNEmptyDataSet @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.xcconfig ================================================ DZNEMPTYDATASET_OTHER_LDFLAGS = -framework "UIKit" ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNWebViewController/DZNWebViewController-Private.xcconfig ================================================ #include "DZNWebViewController.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNWebViewController" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/DZNWebViewController" "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" OTHER_LDFLAGS = ${DZNWEBVIEWCONTROLLER_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNWebViewController/DZNWebViewController-dummy.m ================================================ #import @interface PodsDummy_DZNWebViewController : NSObject @end @implementation PodsDummy_DZNWebViewController @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNWebViewController/DZNWebViewController-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/DZNWebViewController/DZNWebViewController.xcconfig ================================================ DZNWEBVIEWCONTROLLER_OTHER_LDFLAGS = -framework "UIKit" ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/NJKWebViewProgress/NJKWebViewProgress-Private.xcconfig ================================================ #include "NJKWebViewProgress.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/NJKWebViewProgress" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/DZNWebViewController" "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/NJKWebViewProgress/NJKWebViewProgress-dummy.m ================================================ #import @interface PodsDummy_NJKWebViewProgress : NSObject @end @implementation PodsDummy_NJKWebViewProgress @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/NJKWebViewProgress/NJKWebViewProgress-prefix.pch ================================================ #ifdef __OBJC__ #import #endif ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/NJKWebViewProgress/NJKWebViewProgress.xcconfig ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## DZNEmptyDataSet The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. ## DZNWebViewController The MIT License (MIT) Copyright (c) 2014 Ignacio Romero Zurbuchen, DZN Labs, iromero@dzen.cl 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. ## NJKWebViewProgress The MIT License (MIT) Copyright (c) 2013 Satoshi Asano 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. Generated by CocoaPods - http://cocoapods.org ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/Pods/Pods-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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. Title DZNEmptyDataSet Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2014 Ignacio Romero Zurbuchen, DZN Labs, iromero@dzen.cl 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. Title DZNWebViewController Type PSGroupSpecifier FooterText The MIT License (MIT) Copyright (c) 2013 Satoshi Asano 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. Title NJKWebViewProgress Type PSGroupSpecifier FooterText Generated by CocoaPods - http://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/Pods/Pods-dummy.m ================================================ #import @interface PodsDummy_Pods : NSObject @end @implementation PodsDummy_Pods @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/Pods/Pods-resources.sh ================================================ #!/bin/sh set -e mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" XCASSET_FILES=() realpath() { DIRECTORY="$(cd "${1%/*}" && pwd)" FILENAME="${1##*/}" echo "$DIRECTORY/$FILENAME" } install_resource() { case $1 in *.storyboard) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" ;; *.xcdatamodeld) echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" ;; *.xcmappingmodel) echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" ;; *.xcassets) ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" echo "$1" >> "$RESOURCES_TO_COPY" ;; *) echo "${PODS_ROOT}/$1" echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" ;; esac } if [[ "$CONFIGURATION" == "Debug" ]]; then install_resource "DZNWebViewController/Source/Resources/Chrome7.png" install_resource "DZNWebViewController/Source/Resources/Chrome7@2x.png" install_resource "DZNWebViewController/Source/Resources/Chrome7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Chrome7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7@2x.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Link7.png" install_resource "DZNWebViewController/Source/Resources/Link7@2x.png" install_resource "DZNWebViewController/Source/Resources/Link7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Link7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Opera7.png" install_resource "DZNWebViewController/Source/Resources/Opera7@2x.png" install_resource "DZNWebViewController/Source/Resources/Opera7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Opera7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Safari7.png" install_resource "DZNWebViewController/Source/Resources/Safari7@2x.png" install_resource "DZNWebViewController/Source/Resources/Safari7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Safari7~ipad.png" install_resource "DZNWebViewController/Source/Resources/toolbar_backward.png" install_resource "DZNWebViewController/Source/Resources/toolbar_backward@2x.png" install_resource "DZNWebViewController/Source/Resources/toolbar_forward.png" install_resource "DZNWebViewController/Source/Resources/toolbar_forward@2x.png" install_resource "DZNWebViewController/Source/Scripts/inpector-script.js" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_resource "DZNWebViewController/Source/Resources/Chrome7.png" install_resource "DZNWebViewController/Source/Resources/Chrome7@2x.png" install_resource "DZNWebViewController/Source/Resources/Chrome7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Chrome7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7@2x.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Dolphin7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Link7.png" install_resource "DZNWebViewController/Source/Resources/Link7@2x.png" install_resource "DZNWebViewController/Source/Resources/Link7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Link7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Opera7.png" install_resource "DZNWebViewController/Source/Resources/Opera7@2x.png" install_resource "DZNWebViewController/Source/Resources/Opera7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Opera7~ipad.png" install_resource "DZNWebViewController/Source/Resources/Safari7.png" install_resource "DZNWebViewController/Source/Resources/Safari7@2x.png" install_resource "DZNWebViewController/Source/Resources/Safari7@2x~ipad.png" install_resource "DZNWebViewController/Source/Resources/Safari7~ipad.png" install_resource "DZNWebViewController/Source/Resources/toolbar_backward.png" install_resource "DZNWebViewController/Source/Resources/toolbar_backward@2x.png" install_resource "DZNWebViewController/Source/Resources/toolbar_forward.png" install_resource "DZNWebViewController/Source/Resources/toolbar_forward@2x.png" install_resource "DZNWebViewController/Source/Scripts/inpector-script.js" fi mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do if [[ $line != "`realpath $PODS_ROOT`*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/Pods/Pods.debug.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/DZNWebViewController" "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/DZNWebViewController" -isystem "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -l"DZNWebViewController" -l"NJKWebViewProgress" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Target Support Files/Pods/Pods.release.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/DZNWebViewController" "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/DZNWebViewController" -isystem "${PODS_ROOT}/Headers/Public/NJKWebViewProgress" OTHER_LDFLAGS = $(inherited) -ObjC -l"DZNEmptyDataSet" -l"DZNWebViewController" -l"NJKWebViewProgress" -framework "UIKit" PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/AppDelegate.h ================================================ // // AppDelegate.h // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/AppDelegate.m ================================================ // // AppDelegate.m // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[ViewController new]]; [self.window makeKeyAndVisible]; return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/Images.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName Launch Screen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeRight UIInterfaceOrientationLandscapeLeft ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/Launch Screen.xib ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/ViewController.h ================================================ // // ViewController.h // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import @interface ViewController : UIViewController @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/ViewController.m ================================================ // // ViewController.m // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import "ViewController.h" #import "WebViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; [button setTitle:@"Show WebBrowser" forState:UIControlStateNormal]; [button addTarget:self action:@selector(showWebBrowser:) forControlEvents:UIControlEventTouchUpInside]; [button sizeToFit]; [self.view addSubview:button]; button.center = self.view.center; } - (IBAction)showWebBrowser:(id)sender { WebViewController *webViewController = [[WebViewController alloc] initWithURL:[NSURL URLWithString:@"https://www"]]; [self.navigationController pushViewController:webViewController animated:YES]; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/WebViewController.h ================================================ // // WebViewController.h // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import "DZNWebViewController.h" @interface WebViewController : DZNWebViewController @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/WebViewController.m ================================================ // // WebViewController.m // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import "WebViewController.h" #import "UIScrollView+EmptyDataSet.h" @interface WebViewController () @property (nonatomic, getter=didFailLoading) BOOL failedLoading; @end @implementation WebViewController #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; self.webView.scrollView.emptyDataSetSource = self; self.webView.scrollView.emptyDataSetDelegate = self; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } #pragma mark - DZNEmptyDataSetSource - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { if (self.webView.isLoading || !self.didFailLoading) { return nil; } NSString *text = @"Safari cannot open the page because your iPhone is not connected to the Internet."; UIColor *textColor = [UIColor colorWithRed:125/255.0 green:127/255.0 blue:127/255.0 alpha:1.0]; NSMutableDictionary *attributes = [NSMutableDictionary new]; NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new]; paragraph.lineBreakMode = NSLineBreakByWordWrapping; paragraph.alignment = NSTextAlignmentCenter; paragraph.lineSpacing = 2.0; [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; [attributes setObject:paragraph forKey:NSParagraphStyleAttributeName]; return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; } #pragma mark - DZNEmptyDataSetDelegate - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return YES; } #pragma mark - UIWebViewDelegate methods - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { self.failedLoading = NO; return YES; } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; self.failedLoading = YES; [self.webView.scrollView reloadEmptyDataSet]; } #pragma mark - View Auto-Rotation - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (BOOL)shouldAutorotate { return YES; } @end ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser/main.m ================================================ // // main.m // WebBrowser // // Created by Ignacio Romero Z. on 7/21/15. // Copyright (c) 2015 DZN Labs. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 4F6E68461B5EA3A800986BC6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6E68451B5EA3A800986BC6 /* main.m */; }; 4F6E68491B5EA3A800986BC6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6E68481B5EA3A800986BC6 /* AppDelegate.m */; }; 4F6E68511B5EA3A800986BC6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F6E68501B5EA3A800986BC6 /* Images.xcassets */; }; 4F6E686E1B5EA53500986BC6 /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6E686D1B5EA53500986BC6 /* WebViewController.m */; }; 4F6E68701B5EA97700986BC6 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4F6E686F1B5EA97700986BC6 /* Launch Screen.xib */; }; 4F6E68731B5EAE7A00986BC6 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6E68721B5EAE7A00986BC6 /* ViewController.m */; }; F6E1962583FABDF06543D258 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBFBBB824ED40725AF3D1879 /* libPods.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 4335584D7B6AFF844D9D2009 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 4A7E7A7C10500E6036A9F47F /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 4F6E68401B5EA3A800986BC6 /* WebBrowser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WebBrowser.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4F6E68441B5EA3A800986BC6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 4F6E68451B5EA3A800986BC6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 4F6E68471B5EA3A800986BC6 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 4F6E68481B5EA3A800986BC6 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 4F6E68501B5EA3A800986BC6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 4F6E686C1B5EA53500986BC6 /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewController.h; sourceTree = ""; }; 4F6E686D1B5EA53500986BC6 /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = ""; }; 4F6E686F1B5EA97700986BC6 /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "Launch Screen.xib"; sourceTree = ""; }; 4F6E68711B5EAE7A00986BC6 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 4F6E68721B5EAE7A00986BC6 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; EBFBBB824ED40725AF3D1879 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 4F6E683D1B5EA3A800986BC6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F6E1962583FABDF06543D258 /* libPods.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 48EBD9D2092AA7E855678068 /* Frameworks */ = { isa = PBXGroup; children = ( EBFBBB824ED40725AF3D1879 /* libPods.a */, ); name = Frameworks; sourceTree = ""; }; 4F6E68371B5EA3A800986BC6 = { isa = PBXGroup; children = ( 4F6E68421B5EA3A800986BC6 /* WebBrowser */, 4F6E68411B5EA3A800986BC6 /* Products */, 973D12E210BF39F55F26738E /* Pods */, 48EBD9D2092AA7E855678068 /* Frameworks */, ); sourceTree = ""; }; 4F6E68411B5EA3A800986BC6 /* Products */ = { isa = PBXGroup; children = ( 4F6E68401B5EA3A800986BC6 /* WebBrowser.app */, ); name = Products; sourceTree = ""; }; 4F6E68421B5EA3A800986BC6 /* WebBrowser */ = { isa = PBXGroup; children = ( 4F6E68471B5EA3A800986BC6 /* AppDelegate.h */, 4F6E68481B5EA3A800986BC6 /* AppDelegate.m */, 4F6E68711B5EAE7A00986BC6 /* ViewController.h */, 4F6E68721B5EAE7A00986BC6 /* ViewController.m */, 4F6E686C1B5EA53500986BC6 /* WebViewController.h */, 4F6E686D1B5EA53500986BC6 /* WebViewController.m */, 4F6E68501B5EA3A800986BC6 /* Images.xcassets */, 4F6E68431B5EA3A800986BC6 /* Supporting Files */, ); path = WebBrowser; sourceTree = ""; }; 4F6E68431B5EA3A800986BC6 /* Supporting Files */ = { isa = PBXGroup; children = ( 4F6E68441B5EA3A800986BC6 /* Info.plist */, 4F6E68451B5EA3A800986BC6 /* main.m */, 4F6E686F1B5EA97700986BC6 /* Launch Screen.xib */, ); name = "Supporting Files"; sourceTree = ""; }; 973D12E210BF39F55F26738E /* Pods */ = { isa = PBXGroup; children = ( 4A7E7A7C10500E6036A9F47F /* Pods.debug.xcconfig */, 4335584D7B6AFF844D9D2009 /* Pods.release.xcconfig */, ); name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 4F6E683F1B5EA3A800986BC6 /* WebBrowser */ = { isa = PBXNativeTarget; buildConfigurationList = 4F6E68631B5EA3A800986BC6 /* Build configuration list for PBXNativeTarget "WebBrowser" */; buildPhases = ( 06B64B20CEDCFA4CBEAFDBEB /* Check Pods Manifest.lock */, 4F6E683C1B5EA3A800986BC6 /* Sources */, 4F6E683D1B5EA3A800986BC6 /* Frameworks */, 4F6E683E1B5EA3A800986BC6 /* Resources */, EBDF195E5478E573603CE34E /* Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); name = WebBrowser; productName = WebBrowser; productReference = 4F6E68401B5EA3A800986BC6 /* WebBrowser.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 4F6E68381B5EA3A800986BC6 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0730; ORGANIZATIONNAME = "DZN Labs"; TargetAttributes = { 4F6E683F1B5EA3A800986BC6 = { CreatedOnToolsVersion = 6.4; }; }; }; buildConfigurationList = 4F6E683B1B5EA3A800986BC6 /* Build configuration list for PBXProject "WebBrowser" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 4F6E68371B5EA3A800986BC6; productRefGroup = 4F6E68411B5EA3A800986BC6 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 4F6E683F1B5EA3A800986BC6 /* WebBrowser */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 4F6E683E1B5EA3A800986BC6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F6E68511B5EA3A800986BC6 /* Images.xcassets in Resources */, 4F6E68701B5EA97700986BC6 /* Launch Screen.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 06B64B20CEDCFA4CBEAFDBEB /* Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; EBDF195E5478E573603CE34E /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 4F6E683C1B5EA3A800986BC6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F6E68491B5EA3A800986BC6 /* AppDelegate.m in Sources */, 4F6E68461B5EA3A800986BC6 /* main.m in Sources */, 4F6E68731B5EAE7A00986BC6 /* ViewController.m in Sources */, 4F6E686E1B5EA53500986BC6 /* WebViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 4F6E68611B5EA3A800986BC6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 4F6E68621B5EA3A800986BC6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; 4F6E68641B5EA3A800986BC6 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4A7E7A7C10500E6036A9F47F /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = WebBrowser/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.dzn.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 4F6E68651B5EA3A800986BC6 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4335584D7B6AFF844D9D2009 /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = WebBrowser/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.dzn.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 4F6E683B1B5EA3A800986BC6 /* Build configuration list for PBXProject "WebBrowser" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F6E68611B5EA3A800986BC6 /* Debug */, 4F6E68621B5EA3A800986BC6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4F6E68631B5EA3A800986BC6 /* Build configuration list for PBXNativeTarget "WebBrowser" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F6E68641B5EA3A800986BC6 /* Debug */, 4F6E68651B5EA3A800986BC6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 4F6E68381B5EA3A800986BC6 /* Project object */; } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/WebBrowser.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Framework/DZNEmptyDataSet/DZNEmptyDataSet.h ================================================ #import //! Project version number for DZNEmptyDataSet. FOUNDATION_EXPORT double DZNEmptyDataSetVersionNumber; //! Project version string for DZNEmptyDataSet. FOUNDATION_EXPORT const unsigned char DZNEmptyDataSetVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import #import ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Framework/DZNEmptyDataSet/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier com.wavio.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Framework/DZNEmptyDataSet.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 42F9D98C1B4D9F6300E307F2 /* DZNEmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 42F9D98B1B4D9F6300E307F2 /* DZNEmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 42F9D9A41B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 42F9D9A21B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 42F9D9A51B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F9D9A31B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 42F9D9861B4D9F6300E307F2 /* DZNEmptyDataSet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DZNEmptyDataSet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42F9D98A1B4D9F6300E307F2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42F9D98B1B4D9F6300E307F2 /* DZNEmptyDataSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DZNEmptyDataSet.h; sourceTree = ""; }; 42F9D9A21B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+EmptyDataSet.h"; path = "../../Source/UIScrollView+EmptyDataSet.h"; sourceTree = ""; }; 42F9D9A31B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+EmptyDataSet.m"; path = "../../Source/UIScrollView+EmptyDataSet.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 42F9D9821B4D9F6300E307F2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 42F9D97C1B4D9F6300E307F2 = { isa = PBXGroup; children = ( 42F9D9881B4D9F6300E307F2 /* DZNEmptyDataSet */, 42F9D9871B4D9F6300E307F2 /* Products */, ); sourceTree = ""; }; 42F9D9871B4D9F6300E307F2 /* Products */ = { isa = PBXGroup; children = ( 42F9D9861B4D9F6300E307F2 /* DZNEmptyDataSet.framework */, ); name = Products; sourceTree = ""; }; 42F9D9881B4D9F6300E307F2 /* DZNEmptyDataSet */ = { isa = PBXGroup; children = ( 42F9D98B1B4D9F6300E307F2 /* DZNEmptyDataSet.h */, 42F9D9A21B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.h */, 42F9D9A31B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.m */, 42F9D9891B4D9F6300E307F2 /* Supporting Files */, ); path = DZNEmptyDataSet; sourceTree = ""; }; 42F9D9891B4D9F6300E307F2 /* Supporting Files */ = { isa = PBXGroup; children = ( 42F9D98A1B4D9F6300E307F2 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 42F9D9831B4D9F6300E307F2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 42F9D98C1B4D9F6300E307F2 /* DZNEmptyDataSet.h in Headers */, 42F9D9A41B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 42F9D9851B4D9F6300E307F2 /* DZNEmptyDataSet */ = { isa = PBXNativeTarget; buildConfigurationList = 42F9D99C1B4D9F6300E307F2 /* Build configuration list for PBXNativeTarget "DZNEmptyDataSet" */; buildPhases = ( 42F9D9811B4D9F6300E307F2 /* Sources */, 42F9D9821B4D9F6300E307F2 /* Frameworks */, 42F9D9831B4D9F6300E307F2 /* Headers */, 42F9D9841B4D9F6300E307F2 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = DZNEmptyDataSet; productName = DZNEmptyDataSet; productReference = 42F9D9861B4D9F6300E307F2 /* DZNEmptyDataSet.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 42F9D97D1B4D9F6300E307F2 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0640; ORGANIZATIONNAME = "Marvin Nazari"; TargetAttributes = { 42F9D9851B4D9F6300E307F2 = { CreatedOnToolsVersion = 6.4; }; }; }; buildConfigurationList = 42F9D9801B4D9F6300E307F2 /* Build configuration list for PBXProject "DZNEmptyDataSet" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 42F9D97C1B4D9F6300E307F2; productRefGroup = 42F9D9871B4D9F6300E307F2 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 42F9D9851B4D9F6300E307F2 /* DZNEmptyDataSet */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 42F9D9841B4D9F6300E307F2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 42F9D9811B4D9F6300E307F2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 42F9D9A51B4D9F9700E307F2 /* UIScrollView+EmptyDataSet.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 42F9D99A1B4D9F6300E307F2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = 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 = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 42F9D99B1B4D9F6300E307F2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 42F9D99D1B4D9F6300E307F2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = DZNEmptyDataSet/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Debug; }; 42F9D99E1B4D9F6300E307F2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = DZNEmptyDataSet/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 42F9D9801B4D9F6300E307F2 /* Build configuration list for PBXProject "DZNEmptyDataSet" */ = { isa = XCConfigurationList; buildConfigurations = ( 42F9D99A1B4D9F6300E307F2 /* Debug */, 42F9D99B1B4D9F6300E307F2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 42F9D99C1B4D9F6300E307F2 /* Build configuration list for PBXNativeTarget "DZNEmptyDataSet" */ = { isa = XCConfigurationList; buildConfigurations = ( 42F9D99D1B4D9F6300E307F2 /* Debug */, 42F9D99E1B4D9F6300E307F2 /* Release */, ); defaultConfigurationIsVisible = 0; }; /* End XCConfigurationList section */ }; rootObject = 42F9D97D1B4D9F6300E307F2 /* Project object */; } ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Framework/DZNEmptyDataSet.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Framework/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/DZNEmptyDataSet.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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: Carthage/Checkouts/DZNEmptyDataSet/README.md ================================================ DZNEmptyDataSet ================= [![Pod Version](http://img.shields.io/cocoapods/v/DZNEmptyDataSet.svg)](http://cocoadocs.org/docsets/DZNEmptyDataSet/) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![License](http://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT) ### Projects using this library [Add your project to the list here](https://github.com/dzenbot/DZNEmptyDataSet/wiki/Projects-using-DZNEmptyDataSet) and provide a (320px wide) render of the result. ### The Empty Data Set Pattern Also known as *[Empty State](http://emptystat.es/)* or *[Blank Slate](http://patternry.com/p=blank-slate/)*. Most applications show lists of content (data sets), which many turn out to be empty at one point, specially for new users with blank accounts. Empty screens create confusion by not being clear about what's going on, if there is an error/bug or if the user is supposed to do something within your app to be able to consume the content. Please read this very interesting article about [*Designing For The Empty States*](http://tympanus.net/codrops/2013/01/09/designing-for-the-empty-states/). ![Screenshots_Row1](https://raw.githubusercontent.com/dzenbot/UITableView-DataSet/master/Examples/Applications/Screenshots/Screenshots_row1.png) ![Screenshots_Row2](https://raw.githubusercontent.com/dzenbot/UITableView-DataSet/master/Examples/Applications/Screenshots/Screenshots_row2.png) (*These are real life examples, available in the 'Applications' sample project*) **[Empty Data Sets](http://pttrns.com/?did=1&scid=30)** are helpful for: * Avoiding white-screens and communicating to your users why the screen is empty. * Calling to action (particularly as an onboarding process). * Avoiding other interruptive mechanisms like showing error alerts. * Being consistent and improving the user experience. * Delivering a brand presence. ### Features * Compatible with UITableView and UICollectionView. Also compatible with UISearchDisplayController and UIScrollView. * Gives multiple possibilities of layout and appearance, by showing an image and/or title label and/or description label and/or button. * Uses NSAttributedString for easier appearance customisation. * Uses auto-layout to automagically center the content to the tableview, with auto-rotation support. Also accepts custom vertical and horizontal alignment. * Background color customisation. * Allows tap gesture on the whole tableview rectangle (useful for resigning first responder or similar actions). * For more advanced customisation, it allows a custom view. * Compatible with Storyboard. * Compatible with iOS 6 or later. * Compatible with iPhone and iPad. * **App Store ready** This library has been designed in a way where you won't need to extend UITableView or UICollectionView class. It will still work when using UITableViewController or UICollectionViewController. By just conforming to DZNEmptyDataSetSource & DZNEmptyDataSetDelegate, you will be able to fully customize the content and appearance of the empty states for your application. ## Installation Available in [CocoaPods](http://cocoapods.org/?q=DZNEmptyDataSet) ```ruby pod 'DZNEmptyDataSet' ``` To integrate DZNEmptyDataSet into your Xcode project using Carthage, specify it in your `Cartfile`: ```ruby github "dzenbot/DZNEmptyDataSet" ``` ## How to use For complete documentation, [visit CocoaPods' auto-generated doc](http://cocoadocs.org/docsets/DZNEmptyDataSet/) ### Import ```objc #import "UIScrollView+EmptyDataSet.h" ``` Unless you are importing as a framework, then do: ```objc #import "" ``` ### Protocol Conformance Conform to datasource and/or delegate. ```objc @interface MainViewController : UITableViewController - (void)viewDidLoad { [super viewDidLoad]; self.tableView.emptyDataSetSource = self; self.tableView.emptyDataSetDelegate = self; // A little trick for removing the cell separators self.tableView.tableFooterView = [UIView new]; } ``` ### Data Source Implementation Return the content you want to show on the empty state, and take advantage of NSAttributedString features to customise the text appearance. The image for the empty state: ```objc - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { return [UIImage imageNamed:@"empty_placeholder"]; } ``` The image view animation ```objc - (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView { CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath: @"transform"]; animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0.0, 0.0, 1.0)]; animation.duration = 0.25; animation.cumulative = YES; animation.repeatCount = MAXFLOAT; return animation; } ``` The attributed string for the title of the empty state: ```objc - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"Please Allow Photo Access"; NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:18.0f], NSForegroundColorAttributeName: [UIColor darkGrayColor]}; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } ``` The attributed string for the description of the empty state: ```objc - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = @"This allows you to share photos from your library and save photos to your camera roll."; NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new]; paragraph.lineBreakMode = NSLineBreakByWordWrapping; paragraph.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:14.0f], NSForegroundColorAttributeName: [UIColor lightGrayColor], NSParagraphStyleAttributeName: paragraph}; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } ``` The attributed string to be used for the specified button state: ```objc - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0f]}; return [[NSAttributedString alloc] initWithString:@"Continue" attributes:attributes]; } ``` or the image to be used for the specified button state: ```objc - (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state { return [UIImage imageNamed:@"button_image"]; } ``` The background color for the empty state: ```objc - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView { return [UIColor whiteColor]; } ``` If you need a more complex layout, you can return a custom view instead: ```objc - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView { UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; [activityView startAnimating]; return activityView; } ``` Additionally, you can also adjust the vertical alignment of the content view (ie: useful when there is tableHeaderView visible): ```objc - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView { return -self.tableView.tableHeaderView.frame.size.height/2.0f; } ``` Finally, you can separate components from each other (default separation is 11 pts): ```objc - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView { return 20.0f; } ``` ### Delegate Implementation Return the behaviours you would expect from the empty states, and receive the user events. Asks to know if the empty state should be rendered and displayed (Default is YES) : ```objc - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView { return YES; } ``` Asks for interaction permission (Default is YES) : ```objc - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView { return YES; } ``` Asks for scrolling permission (Default is NO) : ```objc - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView { return YES; } ``` Asks for image view animation permission (Default is NO) : ```objc - (BOOL) emptyDataSetShouldAllowImageViewAnimate:(UIScrollView *)scrollView { return YES; } ``` Notifies when the dataset view was tapped: ```objc - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { // Do something } ``` Notifies when the data set call to action button was tapped: ```objc - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { // Do something } ``` ### Refresh layout If you need to refresh the empty state layout, simply call: ```objc [self.tableView reloadData]; ``` or ```objc [self.collectionView reloadData]; ``` depending of which you are using. ### Force layout update You can also call `[self.tableView reloadEmptyDataSet]` to invalidate the current empty state layout and trigger a layout update, bypassing `-reloadData`. This might be useful if you have a lot of logic on your data source that you want to avoid calling, when not needed. `[self.scrollView reloadEmptyDataSet]` is the only way to refresh content when using with UIScrollView. ## Sample projects #### Applications This project replicates several popular application's empty states (~20) with their exact content and appearance, such as Airbnb, Dropbox, Facebook, Foursquare, and many others. See how easy and flexible it is to customize the appearance of your empty states. You can also use this project as a playground to test things. #### Countries This project shows a list of the world countries loaded from CoreData. It uses NSFecthedResultController for filtering search. When searching and no content is matched, a simple empty state is shown. See how to interact between the UITableViewDataSource and the DZNEmptyDataSetSource protocols, while using a typical CoreData stack. #### Colors This project is a simple example of how this library also works with UICollectionView and UISearchDisplayController, while using Storyboards. ## Collaboration Feel free to collaborate with ideas, issues and/or pull requests. ## License (The MIT License) Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl 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: Carthage/Checkouts/DZNEmptyDataSet/Source/UIScrollView+EmptyDataSet.h ================================================ // // UIScrollView+EmptyDataSet.h // DZNEmptyDataSet // https://github.com/dzenbot/DZNEmptyDataSet // // Created by Ignacio Romero Zurbuchen on 6/20/14. // Copyright (c) 2016 DZN Labs. All rights reserved. // Licence: MIT-Licence // #import @protocol DZNEmptyDataSetSource; @protocol DZNEmptyDataSetDelegate; #define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead") /** A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display. @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. */ @interface UIScrollView (EmptyDataSet) /** The empty datasets data source. */ @property (nonatomic, weak) IBOutlet id emptyDataSetSource; /** The empty datasets delegate. */ @property (nonatomic, weak) IBOutlet id emptyDataSetDelegate; /** YES if any empty dataset is visible. */ @property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible; /** Reloads the empty dataset content receiver. @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view. */ - (void)reloadEmptyDataSet; @end /** The object that acts as the data source of the empty datasets. @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional. */ @protocol DZNEmptyDataSetSource @optional /** Asks the data source for the title of the dataset. The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string. @param scrollView A scrollView subclass informing the data source. @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc. */ - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView; /** Asks the data source for the description of the dataset. The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string. @param scrollView A scrollView subclass informing the data source. @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc. */ - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView; /** Asks the data source for the image of the dataset. @param scrollView A scrollView subclass informing the data source. @return An image for the dataset. */ - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView; /** Asks the data source for a tint color of the image dataset. Default is nil. @param scrollView A scrollView subclass object informing the data source. @return A color to tint the image of the dataset. */ - (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView; /** * Asks the data source for the image animation of the dataset. * * @param scrollView A scrollView subclass object informing the delegate. * * @return image animation */ - (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView; /** Asks the data source for the title to be used for the specified button state. The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string. @param scrollView A scrollView subclass object informing the data source. @param state The state that uses the specified title. The possible values are described in UIControlState. @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc. */ - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state; /** Asks the data source for the image to be used for the specified button state. This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text. @param scrollView A scrollView subclass object informing the data source. @param state The state that uses the specified title. The possible values are described in UIControlState. @return An image for the dataset button imageview. */ - (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state; /** Asks the data source for a background image to be used for the specified button state. There is no default style for this call. @param scrollView A scrollView subclass informing the data source. @param state The state that uses the specified image. The values are described in UIControlState. @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc. */ - (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state; /** Asks the data source for the background color of the dataset. Default is clear color. @param scrollView A scrollView subclass object informing the data source. @return A color to be applied to the dataset background view. */ - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView; /** Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil. Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set. Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations. @param scrollView A scrollView subclass object informing the delegate. @return The custom view. */ - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView; /** Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero. @param scrollView A scrollView subclass object informing the delegate. @return The offset for vertical and horizontal alignment. */ - (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:); - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView; /** Asks the data source for a vertical space between elements. Default is 11 pts. @param scrollView A scrollView subclass object informing the delegate. @return The space height between elements. */ - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView; @end /** The object that acts as the delegate of the empty datasets. @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional. @discussion All delegate methods are optional. Use this delegate for receiving action callbacks. */ @protocol DZNEmptyDataSetDelegate @optional /** Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES. @param scrollView A scrollView subclass object informing the delegate. @return YES if the empty dataset should fade in. */ - (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView; /** Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO @param scrollView A scrollView subclass object informing the delegate. @return YES if empty dataset should be forced to display */ - (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView; /** Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES. @param scrollView A scrollView subclass object informing the delegate. @return YES if the empty dataset should show. */ - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView; /** Asks the delegate for touch permission. Default is YES. @param scrollView A scrollView subclass object informing the delegate. @return YES if the empty dataset receives touch gestures. */ - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView; /** Asks the delegate for scroll permission. Default is NO. @param scrollView A scrollView subclass object informing the delegate. @return YES if the empty dataset is allowed to be scrollable. */ - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView; /** Asks the delegate for image view animation permission. Default is NO. Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet: @param scrollView A scrollView subclass object informing the delegate. @return YES if the empty dataset is allowed to animate */ - (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView; /** Tells the delegate that the empty dataset view was tapped. Use this method either to resignFirstResponder of a textfield or searchBar. @param scrollView A scrollView subclass informing the delegate. */ - (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:); /** Tells the delegate that the action button was tapped. @param scrollView A scrollView subclass informing the delegate. */ - (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:); /** Tells the delegate that the empty dataset view was tapped. Use this method either to resignFirstResponder of a textfield or searchBar. @param scrollView A scrollView subclass informing the delegate. @param view the view tapped by the user */ - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view; /** Tells the delegate that the action button was tapped. @param scrollView A scrollView subclass informing the delegate. @param button the button tapped by the user */ - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button; /** Tells the delegate that the empty data set will appear. @param scrollView A scrollView subclass informing the delegate. */ - (void)emptyDataSetWillAppear:(UIScrollView *)scrollView; /** Tells the delegate that the empty data set did appear. @param scrollView A scrollView subclass informing the delegate. */ - (void)emptyDataSetDidAppear:(UIScrollView *)scrollView; /** Tells the delegate that the empty data set will disappear. @param scrollView A scrollView subclass informing the delegate. */ - (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView; /** Tells the delegate that the empty data set did disappear. @param scrollView A scrollView subclass informing the delegate. */ - (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView; @end #undef DZNEmptyDataSetDeprecated ================================================ FILE: Carthage/Checkouts/DZNEmptyDataSet/Source/UIScrollView+EmptyDataSet.m ================================================ // // UIScrollView+EmptyDataSet.m // DZNEmptyDataSet // https://github.com/dzenbot/DZNEmptyDataSet // // Created by Ignacio Romero Zurbuchen on 6/20/14. // Copyright (c) 2016 DZN Labs. All rights reserved. // Licence: MIT-Licence // #import "UIScrollView+EmptyDataSet.h" #import @interface UIView (DZNConstraintBasedLayoutExtensions) - (NSLayoutConstraint *)equallyRelatedConstraintWithView:(UIView *)view attribute:(NSLayoutAttribute)attribute; @end @interface DZNWeakObjectContainer : NSObject @property (nonatomic, readonly, weak) id weakObject; - (instancetype)initWithWeakObject:(id)object; @end @interface DZNEmptyDataSetView : UIView @property (nonatomic, readonly) UIView *contentView; @property (nonatomic, readonly) UILabel *titleLabel; @property (nonatomic, readonly) UILabel *detailLabel; @property (nonatomic, readonly) UIImageView *imageView; @property (nonatomic, readonly) UIButton *button; @property (nonatomic, strong) UIView *customView; @property (nonatomic, strong) UITapGestureRecognizer *tapGesture; @property (nonatomic, assign) CGFloat verticalOffset; @property (nonatomic, assign) CGFloat verticalSpace; @property (nonatomic, assign) BOOL fadeInOnDisplay; - (void)setupConstraints; - (void)prepareForReuse; @end #pragma mark - UIScrollView+EmptyDataSet static char const * const kEmptyDataSetSource = "emptyDataSetSource"; static char const * const kEmptyDataSetDelegate = "emptyDataSetDelegate"; static char const * const kEmptyDataSetView = "emptyDataSetView"; #define kEmptyImageViewAnimationKey @"com.dzn.emptyDataSet.imageViewAnimation" @interface UIScrollView () @property (nonatomic, readonly) DZNEmptyDataSetView *emptyDataSetView; @end @implementation UIScrollView (DZNEmptyDataSet) #pragma mark - Getters (Public) - (id)emptyDataSetSource { DZNWeakObjectContainer *container = objc_getAssociatedObject(self, kEmptyDataSetSource); return container.weakObject; } - (id)emptyDataSetDelegate { DZNWeakObjectContainer *container = objc_getAssociatedObject(self, kEmptyDataSetDelegate); return container.weakObject; } - (BOOL)isEmptyDataSetVisible { UIView *view = objc_getAssociatedObject(self, kEmptyDataSetView); return view ? !view.hidden : NO; } #pragma mark - Getters (Private) - (DZNEmptyDataSetView *)emptyDataSetView { DZNEmptyDataSetView *view = objc_getAssociatedObject(self, kEmptyDataSetView); if (!view) { view = [DZNEmptyDataSetView new]; view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; view.hidden = YES; view.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dzn_didTapContentView:)]; view.tapGesture.delegate = self; [view addGestureRecognizer:view.tapGesture]; [self setEmptyDataSetView:view]; } return view; } - (BOOL)dzn_canDisplay { if (self.emptyDataSetSource && [self.emptyDataSetSource conformsToProtocol:@protocol(DZNEmptyDataSetSource)]) { if ([self isKindOfClass:[UITableView class]] || [self isKindOfClass:[UICollectionView class]] || [self isKindOfClass:[UIScrollView class]]) { return YES; } } return NO; } - (NSInteger)dzn_itemsCount { NSInteger items = 0; // UIScollView doesn't respond to 'dataSource' so let's exit if (![self respondsToSelector:@selector(dataSource)]) { return items; } // UITableView support if ([self isKindOfClass:[UITableView class]]) { UITableView *tableView = (UITableView *)self; id dataSource = tableView.dataSource; NSInteger sections = 1; if (dataSource && [dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)]) { sections = [dataSource numberOfSectionsInTableView:tableView]; } if (dataSource && [dataSource respondsToSelector:@selector(tableView:numberOfRowsInSection:)]) { for (NSInteger section = 0; section < sections; section++) { items += [dataSource tableView:tableView numberOfRowsInSection:section]; } } } // UICollectionView support else if ([self isKindOfClass:[UICollectionView class]]) { UICollectionView *collectionView = (UICollectionView *)self; id dataSource = collectionView.dataSource; NSInteger sections = 1; if (dataSource && [dataSource respondsToSelector:@selector(numberOfSectionsInCollectionView:)]) { sections = [dataSource numberOfSectionsInCollectionView:collectionView]; } if (dataSource && [dataSource respondsToSelector:@selector(collectionView:numberOfItemsInSection:)]) { for (NSInteger section = 0; section < sections; section++) { items += [dataSource collectionView:collectionView numberOfItemsInSection:section]; } } } return items; } #pragma mark - Data Source Getters - (NSAttributedString *)dzn_titleLabelString { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(titleForEmptyDataSet:)]) { NSAttributedString *string = [self.emptyDataSetSource titleForEmptyDataSet:self]; if (string) NSAssert([string isKindOfClass:[NSAttributedString class]], @"You must return a valid NSAttributedString object for -titleForEmptyDataSet:"); return string; } return nil; } - (NSAttributedString *)dzn_detailLabelString { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(descriptionForEmptyDataSet:)]) { NSAttributedString *string = [self.emptyDataSetSource descriptionForEmptyDataSet:self]; if (string) NSAssert([string isKindOfClass:[NSAttributedString class]], @"You must return a valid NSAttributedString object for -descriptionForEmptyDataSet:"); return string; } return nil; } - (UIImage *)dzn_image { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(imageForEmptyDataSet:)]) { UIImage *image = [self.emptyDataSetSource imageForEmptyDataSet:self]; if (image) NSAssert([image isKindOfClass:[UIImage class]], @"You must return a valid UIImage object for -imageForEmptyDataSet:"); return image; } return nil; } - (CAAnimation *)dzn_imageAnimation { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(imageAnimationForEmptyDataSet:)]) { CAAnimation *imageAnimation = [self.emptyDataSetSource imageAnimationForEmptyDataSet:self]; if (imageAnimation) NSAssert([imageAnimation isKindOfClass:[CAAnimation class]], @"You must return a valid CAAnimation object for -imageAnimationForEmptyDataSet:"); return imageAnimation; } return nil; } - (UIColor *)dzn_imageTintColor { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(imageTintColorForEmptyDataSet:)]) { UIColor *color = [self.emptyDataSetSource imageTintColorForEmptyDataSet:self]; if (color) NSAssert([color isKindOfClass:[UIColor class]], @"You must return a valid UIColor object for -imageTintColorForEmptyDataSet:"); return color; } return nil; } - (NSAttributedString *)dzn_buttonTitleForState:(UIControlState)state { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(buttonTitleForEmptyDataSet:forState:)]) { NSAttributedString *string = [self.emptyDataSetSource buttonTitleForEmptyDataSet:self forState:state]; if (string) NSAssert([string isKindOfClass:[NSAttributedString class]], @"You must return a valid NSAttributedString object for -buttonTitleForEmptyDataSet:forState:"); return string; } return nil; } - (UIImage *)dzn_buttonImageForState:(UIControlState)state { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(buttonImageForEmptyDataSet:forState:)]) { UIImage *image = [self.emptyDataSetSource buttonImageForEmptyDataSet:self forState:state]; if (image) NSAssert([image isKindOfClass:[UIImage class]], @"You must return a valid UIImage object for -buttonImageForEmptyDataSet:forState:"); return image; } return nil; } - (UIImage *)dzn_buttonBackgroundImageForState:(UIControlState)state { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(buttonBackgroundImageForEmptyDataSet:forState:)]) { UIImage *image = [self.emptyDataSetSource buttonBackgroundImageForEmptyDataSet:self forState:state]; if (image) NSAssert([image isKindOfClass:[UIImage class]], @"You must return a valid UIImage object for -buttonBackgroundImageForEmptyDataSet:forState:"); return image; } return nil; } - (UIColor *)dzn_dataSetBackgroundColor { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(backgroundColorForEmptyDataSet:)]) { UIColor *color = [self.emptyDataSetSource backgroundColorForEmptyDataSet:self]; if (color) NSAssert([color isKindOfClass:[UIColor class]], @"You must return a valid UIColor object for -backgroundColorForEmptyDataSet:"); return color; } return [UIColor clearColor]; } - (UIView *)dzn_customView { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(customViewForEmptyDataSet:)]) { UIView *view = [self.emptyDataSetSource customViewForEmptyDataSet:self]; if (view) NSAssert([view isKindOfClass:[UIView class]], @"You must return a valid UIView object for -customViewForEmptyDataSet:"); return view; } return nil; } - (CGFloat)dzn_verticalOffset { CGFloat offset = 0.0; if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(verticalOffsetForEmptyDataSet:)]) { offset = [self.emptyDataSetSource verticalOffsetForEmptyDataSet:self]; } return offset; } - (CGFloat)dzn_verticalSpace { if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(spaceHeightForEmptyDataSet:)]) { return [self.emptyDataSetSource spaceHeightForEmptyDataSet:self]; } return 0.0; } #pragma mark - Delegate Getters & Events (Private) - (BOOL)dzn_shouldFadeIn { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetShouldFadeIn:)]) { return [self.emptyDataSetDelegate emptyDataSetShouldFadeIn:self]; } return YES; } - (BOOL)dzn_shouldDisplay { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetShouldDisplay:)]) { return [self.emptyDataSetDelegate emptyDataSetShouldDisplay:self]; } return YES; } - (BOOL)dzn_shouldBeForcedToDisplay { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetShouldBeForcedToDisplay:)]) { return [self.emptyDataSetDelegate emptyDataSetShouldBeForcedToDisplay:self]; } return NO; } - (BOOL)dzn_isTouchAllowed { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetShouldAllowTouch:)]) { return [self.emptyDataSetDelegate emptyDataSetShouldAllowTouch:self]; } return YES; } - (BOOL)dzn_isScrollAllowed { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetShouldAllowScroll:)]) { return [self.emptyDataSetDelegate emptyDataSetShouldAllowScroll:self]; } return NO; } - (BOOL)dzn_isImageViewAnimateAllowed { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetShouldAnimateImageView:)]) { return [self.emptyDataSetDelegate emptyDataSetShouldAnimateImageView:self]; } return NO; } - (void)dzn_willAppear { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetWillAppear:)]) { [self.emptyDataSetDelegate emptyDataSetWillAppear:self]; } } - (void)dzn_didAppear { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetDidAppear:)]) { [self.emptyDataSetDelegate emptyDataSetDidAppear:self]; } } - (void)dzn_willDisappear { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetWillDisappear:)]) { [self.emptyDataSetDelegate emptyDataSetWillDisappear:self]; } } - (void)dzn_didDisappear { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetDidDisappear:)]) { [self.emptyDataSetDelegate emptyDataSetDidDisappear:self]; } } - (void)dzn_didTapContentView:(id)sender { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSet:didTapView:)]) { [self.emptyDataSetDelegate emptyDataSet:self didTapView:sender]; } #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" else if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetDidTapView:)]) { [self.emptyDataSetDelegate emptyDataSetDidTapView:self]; } #pragma clang diagnostic pop } - (void)dzn_didTapDataButton:(id)sender { if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSet:didTapButton:)]) { [self.emptyDataSetDelegate emptyDataSet:self didTapButton:sender]; } #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" else if (self.emptyDataSetDelegate && [self.emptyDataSetDelegate respondsToSelector:@selector(emptyDataSetDidTapButton:)]) { [self.emptyDataSetDelegate emptyDataSetDidTapButton:self]; } #pragma clang diagnostic pop } #pragma mark - Setters (Public) - (void)setEmptyDataSetSource:(id)datasource { if (!datasource || ![self dzn_canDisplay]) { [self dzn_invalidate]; } objc_setAssociatedObject(self, kEmptyDataSetSource, [[DZNWeakObjectContainer alloc] initWithWeakObject:datasource], OBJC_ASSOCIATION_RETAIN_NONATOMIC); // We add method sizzling for injecting -dzn_reloadData implementation to the native -reloadData implementation [self swizzleIfPossible:@selector(reloadData)]; // Exclusively for UITableView, we also inject -dzn_reloadData to -endUpdates if ([self isKindOfClass:[UITableView class]]) { [self swizzleIfPossible:@selector(endUpdates)]; } } - (void)setEmptyDataSetDelegate:(id)delegate { if (!delegate) { [self dzn_invalidate]; } objc_setAssociatedObject(self, kEmptyDataSetDelegate, [[DZNWeakObjectContainer alloc] initWithWeakObject:delegate], OBJC_ASSOCIATION_RETAIN_NONATOMIC); } #pragma mark - Setters (Private) - (void)setEmptyDataSetView:(DZNEmptyDataSetView *)view { objc_setAssociatedObject(self, kEmptyDataSetView, view, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } #pragma mark - Reload APIs (Public) - (void)reloadEmptyDataSet { [self dzn_reloadEmptyDataSet]; } #pragma mark - Reload APIs (Private) - (void)dzn_reloadEmptyDataSet { if (![self dzn_canDisplay]) { return; } if (([self dzn_shouldDisplay] && [self dzn_itemsCount] == 0) || [self dzn_shouldBeForcedToDisplay]) { // Notifies that the empty dataset view will appear [self dzn_willAppear]; DZNEmptyDataSetView *view = self.emptyDataSetView; if (!view.superview) { // Send the view all the way to the back, in case a header and/or footer is present, as well as for sectionHeaders or any other content if (([self isKindOfClass:[UITableView class]] || [self isKindOfClass:[UICollectionView class]]) && self.subviews.count > 1) { [self insertSubview:view atIndex:0]; } else { [self addSubview:view]; } } // Removing view resetting the view and its constraints it very important to guarantee a good state [view prepareForReuse]; UIView *customView = [self dzn_customView]; // If a non-nil custom view is available, let's configure it instead if (customView) { view.customView = customView; } else { // Get the data from the data source NSAttributedString *titleLabelString = [self dzn_titleLabelString]; NSAttributedString *detailLabelString = [self dzn_detailLabelString]; UIImage *buttonImage = [self dzn_buttonImageForState:UIControlStateNormal]; NSAttributedString *buttonTitle = [self dzn_buttonTitleForState:UIControlStateNormal]; UIImage *image = [self dzn_image]; UIColor *imageTintColor = [self dzn_imageTintColor]; UIImageRenderingMode renderingMode = imageTintColor ? UIImageRenderingModeAlwaysTemplate : UIImageRenderingModeAlwaysOriginal; view.verticalSpace = [self dzn_verticalSpace]; // Configure Image if (image) { if ([image respondsToSelector:@selector(imageWithRenderingMode:)]) { view.imageView.image = [image imageWithRenderingMode:renderingMode]; view.imageView.tintColor = imageTintColor; } else { // iOS 6 fallback: insert code to convert imaged if needed view.imageView.image = image; } } // Configure title label if (titleLabelString) { view.titleLabel.attributedText = titleLabelString; } // Configure detail label if (detailLabelString) { view.detailLabel.attributedText = detailLabelString; } // Configure button if (buttonImage) { [view.button setImage:buttonImage forState:UIControlStateNormal]; [view.button setImage:[self dzn_buttonImageForState:UIControlStateHighlighted] forState:UIControlStateHighlighted]; } else if (buttonTitle) { [view.button setAttributedTitle:buttonTitle forState:UIControlStateNormal]; [view.button setAttributedTitle:[self dzn_buttonTitleForState:UIControlStateHighlighted] forState:UIControlStateHighlighted]; [view.button setBackgroundImage:[self dzn_buttonBackgroundImageForState:UIControlStateNormal] forState:UIControlStateNormal]; [view.button setBackgroundImage:[self dzn_buttonBackgroundImageForState:UIControlStateHighlighted] forState:UIControlStateHighlighted]; } } // Configure offset view.verticalOffset = [self dzn_verticalOffset]; // Configure the empty dataset view view.backgroundColor = [self dzn_dataSetBackgroundColor]; view.hidden = NO; view.clipsToBounds = YES; // Configure empty dataset userInteraction permission view.userInteractionEnabled = [self dzn_isTouchAllowed]; // Configure empty dataset fade in display view.fadeInOnDisplay = [self dzn_shouldFadeIn]; [view setupConstraints]; [UIView performWithoutAnimation:^{ [view layoutIfNeeded]; }]; // Configure scroll permission self.scrollEnabled = [self dzn_isScrollAllowed]; // Configure image view animation if ([self dzn_isImageViewAnimateAllowed]) { CAAnimation *animation = [self dzn_imageAnimation]; if (animation) { [self.emptyDataSetView.imageView.layer addAnimation:animation forKey:kEmptyImageViewAnimationKey]; } } else if ([self.emptyDataSetView.imageView.layer animationForKey:kEmptyImageViewAnimationKey]) { [self.emptyDataSetView.imageView.layer removeAnimationForKey:kEmptyImageViewAnimationKey]; } // Notifies that the empty dataset view did appear [self dzn_didAppear]; } else if (self.isEmptyDataSetVisible) { [self dzn_invalidate]; } } - (void)dzn_invalidate { // Notifies that the empty dataset view will disappear [self dzn_willDisappear]; if (self.emptyDataSetView) { [self.emptyDataSetView prepareForReuse]; [self.emptyDataSetView removeFromSuperview]; [self setEmptyDataSetView:nil]; } self.scrollEnabled = YES; // Notifies that the empty dataset view did disappear [self dzn_didDisappear]; } #pragma mark - Method Swizzling static NSMutableDictionary *_impLookupTable; static NSString *const DZNSwizzleInfoPointerKey = @"pointer"; static NSString *const DZNSwizzleInfoOwnerKey = @"owner"; static NSString *const DZNSwizzleInfoSelectorKey = @"selector"; // Based on Bryce Buchanan's swizzling technique http://blog.newrelic.com/2014/04/16/right-way-to-swizzle/ // And Juzzin's ideas https://github.com/juzzin/JUSEmptyViewController void dzn_original_implementation(id self, SEL _cmd) { // Fetch original implementation from lookup table Class baseClass = dzn_baseClassToSwizzleForTarget(self); NSString *key = dzn_implementationKey(baseClass, _cmd); NSDictionary *swizzleInfo = [_impLookupTable objectForKey:key]; NSValue *impValue = [swizzleInfo valueForKey:DZNSwizzleInfoPointerKey]; IMP impPointer = [impValue pointerValue]; // We then inject the additional implementation for reloading the empty dataset // Doing it before calling the original implementation does update the 'isEmptyDataSetVisible' flag on time. [self dzn_reloadEmptyDataSet]; // If found, call original implementation if (impPointer) { ((void(*)(id,SEL))impPointer)(self,_cmd); } } NSString *dzn_implementationKey(Class class, SEL selector) { if (!class || !selector) { return nil; } NSString *className = NSStringFromClass([class class]); NSString *selectorName = NSStringFromSelector(selector); return [NSString stringWithFormat:@"%@_%@",className,selectorName]; } Class dzn_baseClassToSwizzleForTarget(id target) { if ([target isKindOfClass:[UITableView class]]) { return [UITableView class]; } else if ([target isKindOfClass:[UICollectionView class]]) { return [UICollectionView class]; } else if ([target isKindOfClass:[UIScrollView class]]) { return [UIScrollView class]; } return nil; } - (void)swizzleIfPossible:(SEL)selector { // Check if the target responds to selector if (![self respondsToSelector:selector]) { return; } // Create the lookup table if (!_impLookupTable) { _impLookupTable = [[NSMutableDictionary alloc] initWithCapacity:3]; // 3 represent the supported base classes } // We make sure that setImplementation is called once per class kind, UITableView or UICollectionView. for (NSDictionary *info in [_impLookupTable allValues]) { Class class = [info objectForKey:DZNSwizzleInfoOwnerKey]; NSString *selectorName = [info objectForKey:DZNSwizzleInfoSelectorKey]; if ([selectorName isEqualToString:NSStringFromSelector(selector)]) { if ([self isKindOfClass:class]) { return; } } } Class baseClass = dzn_baseClassToSwizzleForTarget(self); NSString *key = dzn_implementationKey(baseClass, selector); NSValue *impValue = [[_impLookupTable objectForKey:key] valueForKey:DZNSwizzleInfoPointerKey]; // If the implementation for this class already exist, skip!! if (impValue || !key || !baseClass) { return; } // Swizzle by injecting additional implementation Method method = class_getInstanceMethod(baseClass, selector); IMP dzn_newImplementation = method_setImplementation(method, (IMP)dzn_original_implementation); // Store the new implementation in the lookup table NSDictionary *swizzledInfo = @{DZNSwizzleInfoOwnerKey: baseClass, DZNSwizzleInfoSelectorKey: NSStringFromSelector(selector), DZNSwizzleInfoPointerKey: [NSValue valueWithPointer:dzn_newImplementation]}; [_impLookupTable setObject:swizzledInfo forKey:key]; } #pragma mark - UIGestureRecognizerDelegate Methods - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if ([gestureRecognizer.view isEqual:self.emptyDataSetView]) { return [self dzn_isTouchAllowed]; } return [super gestureRecognizerShouldBegin:gestureRecognizer]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { UIGestureRecognizer *tapGesture = self.emptyDataSetView.tapGesture; if ([gestureRecognizer isEqual:tapGesture] || [otherGestureRecognizer isEqual:tapGesture]) { return YES; } // defer to emptyDataSetDelegate's implementation if available if ( (self.emptyDataSetDelegate != (id)self) && [self.emptyDataSetDelegate respondsToSelector:@selector(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)]) { return [(id)self.emptyDataSetDelegate gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer]; } return NO; } @end #pragma mark - DZNEmptyDataSetView @interface DZNEmptyDataSetView () @end @implementation DZNEmptyDataSetView @synthesize contentView = _contentView; @synthesize titleLabel = _titleLabel, detailLabel = _detailLabel, imageView = _imageView, button = _button; #pragma mark - Initialization Methods - (instancetype)init { self = [super init]; if (self) { [self addSubview:self.contentView]; } return self; } - (void)didMoveToSuperview { self.frame = self.superview.bounds; void(^fadeInBlock)(void) = ^{_contentView.alpha = 1.0;}; if (self.fadeInOnDisplay) { [UIView animateWithDuration:0.25 animations:fadeInBlock completion:NULL]; } else { fadeInBlock(); } } #pragma mark - Getters - (UIView *)contentView { if (!_contentView) { _contentView = [UIView new]; _contentView.translatesAutoresizingMaskIntoConstraints = NO; _contentView.backgroundColor = [UIColor clearColor]; _contentView.userInteractionEnabled = YES; _contentView.alpha = 0; } return _contentView; } - (UIImageView *)imageView { if (!_imageView) { _imageView = [UIImageView new]; _imageView.translatesAutoresizingMaskIntoConstraints = NO; _imageView.backgroundColor = [UIColor clearColor]; _imageView.contentMode = UIViewContentModeScaleAspectFit; _imageView.userInteractionEnabled = NO; _imageView.accessibilityIdentifier = @"empty set background image"; [_contentView addSubview:_imageView]; } return _imageView; } - (UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [UILabel new]; _titleLabel.translatesAutoresizingMaskIntoConstraints = NO; _titleLabel.backgroundColor = [UIColor clearColor]; _titleLabel.font = [UIFont systemFontOfSize:27.0]; _titleLabel.textColor = [UIColor colorWithWhite:0.6 alpha:1.0]; _titleLabel.textAlignment = NSTextAlignmentCenter; _titleLabel.lineBreakMode = NSLineBreakByWordWrapping; _titleLabel.numberOfLines = 0; _titleLabel.accessibilityIdentifier = @"empty set title"; [_contentView addSubview:_titleLabel]; } return _titleLabel; } - (UILabel *)detailLabel { if (!_detailLabel) { _detailLabel = [UILabel new]; _detailLabel.translatesAutoresizingMaskIntoConstraints = NO; _detailLabel.backgroundColor = [UIColor clearColor]; _detailLabel.font = [UIFont systemFontOfSize:17.0]; _detailLabel.textColor = [UIColor colorWithWhite:0.6 alpha:1.0]; _detailLabel.textAlignment = NSTextAlignmentCenter; _detailLabel.lineBreakMode = NSLineBreakByWordWrapping; _detailLabel.numberOfLines = 0; _detailLabel.accessibilityIdentifier = @"empty set detail label"; [_contentView addSubview:_detailLabel]; } return _detailLabel; } - (UIButton *)button { if (!_button) { _button = [UIButton buttonWithType:UIButtonTypeCustom]; _button.translatesAutoresizingMaskIntoConstraints = NO; _button.backgroundColor = [UIColor clearColor]; _button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; _button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; _button.accessibilityIdentifier = @"empty set button"; [_button addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside]; [_contentView addSubview:_button]; } return _button; } - (BOOL)canShowImage { return (_imageView.image && _imageView.superview); } - (BOOL)canShowTitle { return (_titleLabel.attributedText.string.length > 0 && _titleLabel.superview); } - (BOOL)canShowDetail { return (_detailLabel.attributedText.string.length > 0 && _detailLabel.superview); } - (BOOL)canShowButton { if ([_button attributedTitleForState:UIControlStateNormal].string.length > 0 || [_button imageForState:UIControlStateNormal]) { return (_button.superview != nil); } return NO; } #pragma mark - Setters - (void)setCustomView:(UIView *)view { if (!view) { return; } if (_customView) { [_customView removeFromSuperview]; _customView = nil; } _customView = view; _customView.translatesAutoresizingMaskIntoConstraints = NO; [self.contentView addSubview:_customView]; } #pragma mark - Action Methods - (void)didTapButton:(id)sender { SEL selector = NSSelectorFromString(@"dzn_didTapDataButton:"); if ([self.superview respondsToSelector:selector]) { [self.superview performSelector:selector withObject:sender afterDelay:0.0f]; } } - (void)removeAllConstraints { [self removeConstraints:self.constraints]; [_contentView removeConstraints:_contentView.constraints]; } - (void)prepareForReuse { [self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; _titleLabel = nil; _detailLabel = nil; _imageView = nil; _button = nil; _customView = nil; [self removeAllConstraints]; } #pragma mark - Auto-Layout Configuration - (void)setupConstraints { // First, configure the content view constaints // The content view must alway be centered to its superview NSLayoutConstraint *centerXConstraint = [self equallyRelatedConstraintWithView:self.contentView attribute:NSLayoutAttributeCenterX]; NSLayoutConstraint *centerYConstraint = [self equallyRelatedConstraintWithView:self.contentView attribute:NSLayoutAttributeCenterY]; [self addConstraint:centerXConstraint]; [self addConstraint:centerYConstraint]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics:nil views:@{@"contentView": self.contentView}]]; // When a custom offset is available, we adjust the vertical constraints' constants if (self.verticalOffset != 0 && self.constraints.count > 0) { centerYConstraint.constant = self.verticalOffset; } // If applicable, set the custom view's constraints if (_customView) { [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView]|" options:0 metrics:nil views:@{@"customView":_customView}]]; [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[customView]|" options:0 metrics:nil views:@{@"customView":_customView}]]; } else { CGFloat width = CGRectGetWidth(self.frame) ? : CGRectGetWidth([UIScreen mainScreen].bounds); CGFloat padding = roundf(width/16.0); CGFloat verticalSpace = self.verticalSpace ? : 11.0; // Default is 11 pts NSMutableArray *subviewStrings = [NSMutableArray array]; NSMutableDictionary *views = [NSMutableDictionary dictionary]; NSDictionary *metrics = @{@"padding": @(padding)}; // Assign the image view's horizontal constraints if (_imageView.superview) { [subviewStrings addObject:@"imageView"]; views[[subviewStrings lastObject]] = _imageView; [self.contentView addConstraint:[self.contentView equallyRelatedConstraintWithView:_imageView attribute:NSLayoutAttributeCenterX]]; } // Assign the title label's horizontal constraints if ([self canShowTitle]) { [subviewStrings addObject:@"titleLabel"]; views[[subviewStrings lastObject]] = _titleLabel; [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(padding@750)-[titleLabel(>=0)]-(padding@750)-|" options:0 metrics:metrics views:views]]; } // or removes from its superview else { [_titleLabel removeFromSuperview]; _titleLabel = nil; } // Assign the detail label's horizontal constraints if ([self canShowDetail]) { [subviewStrings addObject:@"detailLabel"]; views[[subviewStrings lastObject]] = _detailLabel; [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(padding@750)-[detailLabel(>=0)]-(padding@750)-|" options:0 metrics:metrics views:views]]; } // or removes from its superview else { [_detailLabel removeFromSuperview]; _detailLabel = nil; } // Assign the button's horizontal constraints if ([self canShowButton]) { [subviewStrings addObject:@"button"]; views[[subviewStrings lastObject]] = _button; [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(padding@750)-[button(>=0)]-(padding@750)-|" options:0 metrics:metrics views:views]]; } // or removes from its superview else { [_button removeFromSuperview]; _button = nil; } NSMutableString *verticalFormat = [NSMutableString new]; // Build a dynamic string format for the vertical constraints, adding a margin between each element. Default is 11 pts. for (int i = 0; i < subviewStrings.count; i++) { NSString *string = subviewStrings[i]; [verticalFormat appendFormat:@"[%@]", string]; if (i < subviewStrings.count-1) { [verticalFormat appendFormat:@"-(%.f@750)-", verticalSpace]; } } // Assign the vertical constraints to the content view if (verticalFormat.length > 0) { [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|%@|", verticalFormat] options:0 metrics:metrics views:views]]; } } } - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *hitView = [super hitTest:point withEvent:event]; // Return any UIControl instance such as buttons, segmented controls, switches, etc. if ([hitView isKindOfClass:[UIControl class]]) { return hitView; } // Return either the contentView or customView if ([hitView isEqual:_contentView] || [hitView isEqual:_customView]) { return hitView; } return nil; } @end #pragma mark - UIView+DZNConstraintBasedLayoutExtensions @implementation UIView (DZNConstraintBasedLayoutExtensions) - (NSLayoutConstraint *)equallyRelatedConstraintWithView:(UIView *)view attribute:(NSLayoutAttribute)attribute { return [NSLayoutConstraint constraintWithItem:view attribute:attribute relatedBy:NSLayoutRelationEqual toItem:self attribute:attribute multiplier:1.0 constant:0.0]; } @end #pragma mark - DZNWeakObjectContainer @implementation DZNWeakObjectContainer - (instancetype)initWithWeakObject:(id)object { self = [super init]; if (self) { _weakObject = object; } return self; } @end ================================================ FILE: Carthage/Checkouts/Nimble/.gitignore ================================================ .DS_Store xcuserdata/ build/ .idea DerivedData/ Nimble.framework.zip # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ .build/ ================================================ FILE: Carthage/Checkouts/Nimble/.ruby-version ================================================ system ================================================ FILE: Carthage/Checkouts/Nimble/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-02-25-a ================================================ FILE: Carthage/Checkouts/Nimble/.travis.yml ================================================ osx_image: xcode7.3 language: generic matrix: include: - os: osx sudo: required env: TYPE=podspec - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=9.0 TYPE=tvos - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx - os: osx env: TYPE=swiftpm - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=10.0 TYPE=ios osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=10.0 TYPE=tvos osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.12 TYPE=osx osx_image: xcode8 - os: linux dist: trusty sudo: required env: TYPE=swiftpm install: - if [[ "$TYPE" == "swiftpm" ]]; then eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)"; fi - if [[ "$TYPE" == "podspec" ]]; then sudo gem install bundler; bundle install; fi script: - ./test $TYPE ================================================ FILE: Carthage/Checkouts/Nimble/CONTRIBUTING.md ================================================ - [Welcome to Nimble!](#welcome-to-nimble!) - [Reporting Bugs](#reporting-bugs) - [Building the Project](#building-the-project) - [Pull Requests](#pull-requests) - [Style Conventions](#style-conventions) - [Core Members](#core-members) - [Code of Conduct](#code-of-conduct) # Welcome to Nimble! We're building a testing framework for a new generation of Swift and Objective-C developers. Nimble should be easy to use and easy to maintain. Let's keep things simple and well-tested. **tl;dr:** If you've added a file to the project, make sure it's included in both the OS X and iOS targets. ## Reporting Bugs Nothing is off-limits. If you're having a problem, we want to hear about it. - See a crash? File an issue. - Code isn't compiling, but you don't know why? Sounds like you should submit a new issue, bud. - Went to the kitchen, only to forget why you went in the first place? Better submit an issue. Be sure to include in your issue: - Your Xcode version (eg - Xcode 7.0.1 7A1001) - Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`) - What are the steps to reproduce this issue? - What platform are you using? (eg - OS X, iOS, watchOS, tvOS) - If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration - Are you using carthage or cocoapods? ## Building the Project - Use `Nimble.xcodeproj` to work on Nimble. ## Pull Requests - Nothing is trivial. Submit pull requests for anything: typos, whitespace, you name it. - Not all pull requests will be merged, but all will be acknowledged. If no one has provided feedback on your request, ping one of the owners by name. - Make sure your pull request includes any necessary updates to the README or other documentation. - Be sure the unit tests for both the OS X and iOS targets of Nimble before submitting your pull request. You can run all the OS X & iOS unit tests using `./test`. - If you've added a file to the project, make sure it's included in both the OS X and iOS targets. - The `master` branch will always support the stable Xcode version. Other branches will point to their corresponding versions they support. - If you're making a configuration change, make sure to edit both the xcode project and the podspec file. ### Style Conventions - Indent using 4 spaces. - Keep lines 100 characters or shorter. Break long statements into shorter ones over multiple lines. - In Objective-C, use `#pragma mark -` to mark public, internal, protocol, and superclass methods. ## Core Members If a few of your pull requests have been merged, and you'd like a controlling stake in the project, file an issue asking for write access to the repository. ### Code of Conduct Your conduct as a core member is your own responsibility, but here are some "ground rules": - Feel free to push whatever you want to master, and (if you have ownership permissions) to create any repositories you'd like. Ideally, however, all changes should be submitted as GitHub pull requests. No one should merge their own pull request, unless no other core members respond for at least a few days. If you'd like to create a new repository, it'd be nice if you created a GitHub issue and gathered some feedback first. - It'd be awesome if you could review, provide feedback on, and close issues or pull requests submitted to the project. Please provide kind, constructive feedback. Please don't be sarcastic or snarky. ### Creating a Release The process is relatively straight forward, but here's is a useful checklist for tagging: - Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` - Run the release script: `./script/release A.B.C release-notes-file` - The script will prompt you to create a new [GitHub release](https://github.com/Quick/Nimble/releases). - Use the same release notes you created for the tag, but tweak up formatting for GitHub. - Update [Quick](https://github.com/Quick/Quick) - Update Quick's submodule reference to the newly released Nimble version - Update Nimble version in `README.md` and Documentation in [Quick](https://github.com/Quick/Quick) if it's not a patch version update. - Announce! ================================================ FILE: Carthage/Checkouts/Nimble/Gemfile ================================================ # A sample Gemfile source "https://rubygems.org" gem 'cocoapods' ================================================ FILE: Carthage/Checkouts/Nimble/LICENSE.md ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2014 Quick Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Carthage/Checkouts/Nimble/Nimble.podspec ================================================ Pod::Spec.new do |s| s.name = "Nimble" s.version = "4.1.0" s.summary = "A Matcher Framework for Swift and Objective-C" s.description = <<-DESC Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar. DESC s.homepage = "https://github.com/Quick/Nimble" s.license = { :type => "Apache 2.0", :file => "LICENSE.md" } s.author = "Quick Contributors" s.ios.deployment_target = "7.0" s.osx.deployment_target = "10.9" s.tvos.deployment_target = "9.0" s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } s.source_files = "Sources/Nimble/**/*.{swift,h,m}" s.private_header_files = "Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h" s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" s.weak_framework = "XCTest" s.requires_arc = true s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"' } end ================================================ FILE: Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; }; 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; }; 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; }; 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531; remoteInfo = "Nimble-tvOS"; }; 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = ""; }; 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = ""; }; 1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = ""; }; 1F1871BC1CA89EDB00A34BF2 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = ""; }; 1F1871BD1CA89EDB00A34BF2 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = ""; }; 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = ""; }; 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = ""; }; 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBStringify.h; sourceTree = ""; }; 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBStringify.m; sourceTree = ""; }; 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBExpectation.swift; sourceTree = ""; }; 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBObjCMatcher.swift; sourceTree = ""; }; 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExceptionCapture.swift; sourceTree = ""; }; 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = ""; }; 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = ""; }; 1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = ""; }; 1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = ""; }; 1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.markdown; }; 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = ""; }; 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = ""; }; 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = ""; }; 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = ""; }; 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = ""; }; 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = ""; }; 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = ""; }; 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = ""; }; 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = ""; }; 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = ""; }; 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = ""; }; 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = ""; }; 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = ""; }; 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = ""; }; 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = ""; }; 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = ""; }; 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = ""; }; 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = ""; }; 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = ""; }; 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = ""; }; 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = ""; }; 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = ""; }; 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = ""; }; 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoidTest.swift; sourceTree = ""; }; 1F91DD301C74BF61002C309F /* BeVoid.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoid.swift; sourceTree = ""; }; 1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = ""; }; 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = ""; }; 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = ""; }; 1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = ""; }; 1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = ""; }; 1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = ""; }; 1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = ""; }; 1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = ""; }; 1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = ""; }; 1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = ""; }; 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = ""; }; 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = ""; }; 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = ""; }; 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = ""; }; 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = ""; }; 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = ""; }; 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = ""; }; 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotificationTest.swift; sourceTree = ""; }; 1FCF91521C61C8A400B15DCB /* PostNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotification.swift; sourceTree = ""; }; 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = ""; }; 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = ""; }; 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = ""; }; 1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; 1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = ""; }; 1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = ""; }; 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = ""; }; 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = ""; }; 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = ""; }; 1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = ""; }; 1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = ""; }; 1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = ""; }; 1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = ""; }; 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = ""; }; 1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; 1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; 1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = ""; }; 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = ""; }; 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = ""; }; 29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = ""; }; 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; 472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = ""; }; 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = ""; }; 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = ""; }; 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = ""; }; 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = ""; }; 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjcStringersTest.m; sourceTree = ""; }; 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = ""; }; 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = ""; }; AE4BA9AC1C88DDB500B73906 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; AE7ADE441C80BF8000B94CD3 /* MatchError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchError.swift; sourceTree = ""; }; AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchErrorTest.swift; sourceTree = ""; }; DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; DDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = ""; }; DDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = ""; }; DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = ""; }; F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+Register.m"; sourceTree = ""; }; F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CurrentTestCaseTracker.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 1F1A74251940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74311940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1511BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA9195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB4195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1F14FB61194180A7009F2A08 /* Helpers */ = { isa = PBXGroup; children = ( 1F14FB63194180C5009F2A08 /* utils.swift */, 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */, 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */, ); path = Helpers; sourceTree = ""; }; 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */ = { isa = PBXGroup; children = ( F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */, 1F1871BC1CA89EDB00A34BF2 /* DSL.h */, 1F1871BD1CA89EDB00A34BF2 /* DSL.m */, 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */, 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */, 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */, 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */, 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */, 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */, F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */, ); path = ObjectiveC; sourceTree = ""; }; 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */ = { isa = PBXGroup; children = ( 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */, ); path = NonObjectiveC; sourceTree = ""; }; 1F1A741F1940169200FFFC47 = { isa = PBXGroup; children = ( 1F2752D119445B8400052A26 /* README.md */, 1F1A742B1940169200FFFC47 /* Nimble */, 1F1A74381940169200FFFC47 /* NimbleTests */, 1F1A742A1940169200FFFC47 /* Products */, ); sourceTree = ""; }; 1F1A742A1940169200FFFC47 /* Products */ = { isa = PBXGroup; children = ( 1F1A74291940169200FFFC47 /* Nimble.framework */, 1F1A74341940169200FFFC47 /* NimbleTests.xctest */, 1F925EAD195C0D6300ED456B /* Nimble.framework */, 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, ); name = Products; sourceTree = ""; }; 1F1A742B1940169200FFFC47 /* Nimble */ = { isa = PBXGroup; children = ( 1FD8CD041968AB07008ED995 /* Adapters */, 1FD8CD081968AB07008ED995 /* DSL.swift */, DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */, 1FD8CD091968AB07008ED995 /* Expectation.swift */, 1FD8CD0A1968AB07008ED995 /* Expression.swift */, 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */, 1F1A742D1940169200FFFC47 /* Info.plist */, 1FD8CD0C1968AB07008ED995 /* Matchers */, 1F1A742E1940169200FFFC47 /* Nimble.h */, 1FD8CD241968AB07008ED995 /* Utils */, ); name = Nimble; path = Sources/Nimble; sourceTree = ""; }; 1F1A74381940169200FFFC47 /* NimbleTests */ = { isa = PBXGroup; children = ( 1F925EE5195C121200ED456B /* AsynchronousTest.swift */, 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */, 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */, 1FFD729A1963FC8200CD29A2 /* objc */, 1F14FB61194180A7009F2A08 /* Helpers */, 1F925EE3195C11B000ED456B /* Matchers */, 1F1A74391940169200FFFC47 /* Supporting Files */, ); name = NimbleTests; path = Tests/Nimble; sourceTree = ""; }; 1F1A74391940169200FFFC47 /* Supporting Files */ = { isa = PBXGroup; children = ( 1F1A743A1940169200FFFC47 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 1F925EE3195C11B000ED456B /* Matchers */ = { isa = PBXGroup; children = ( DD72EC631A93874A002F7651 /* AllPassTest.swift */, 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */, 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */, 1F925EF5195C147800ED456B /* BeCloseToTest.swift */, 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */, 1F925EFB195C186800ED456B /* BeginWithTest.swift */, 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */, 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */, DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */, 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */, 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */, 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */, 1F925EEE195C136500ED456B /* BeLogicalTest.swift */, 1F925EF8195C175000ED456B /* BeNilTest.swift */, 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */, 1F925F01195C189500ED456B /* ContainTest.swift */, 1F925EFE195C187600ED456B /* EndWithTest.swift */, 1F925F04195C18B700ED456B /* EqualTest.swift */, 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */, DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */, 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */, 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */, 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */, 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */, AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD041968AB07008ED995 /* Adapters */ = { isa = PBXGroup; children = ( 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */, 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */, 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */, 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */, 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */, 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */, 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */, ); path = Adapters; sourceTree = ""; }; 1FD8CD0C1968AB07008ED995 /* Matchers */ = { isa = PBXGroup; children = ( DDB1BC781A92235600F743C3 /* AllPass.swift */, 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */, 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */, 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */, 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */, 1FD8CD101968AB07008ED995 /* BeEmpty.swift */, 1FD8CD111968AB07008ED995 /* BeginWith.swift */, 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */, 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */, 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */, 1FD8CD151968AB07008ED995 /* BeLessThan.swift */, 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */, 1FD8CD171968AB07008ED995 /* BeLogical.swift */, 1FD8CD181968AB07008ED995 /* BeNil.swift */, 1F91DD301C74BF61002C309F /* BeVoid.swift */, 1FD8CD1A1968AB07008ED995 /* Contain.swift */, 1FD8CD1B1968AB07008ED995 /* EndWith.swift */, 1FD8CD1C1968AB07008ED995 /* Equal.swift */, 472FD1341B9E085700C7B8DA /* HaveCount.swift */, DDB4D5EC19FE43C200E9D9FE /* Match.swift */, 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */, 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */, AE7ADE441C80BF8000B94CD3 /* MatchError.swift */, 1FCF91521C61C8A400B15DCB /* PostNotification.swift */, 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */, 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */, 29EA59651B551EE6002D767E /* ThrowError.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD241968AB07008ED995 /* Utils */ = { isa = PBXGroup; children = ( 1FD8CD251968AB07008ED995 /* Functional.swift */, 1FD8CD261968AB07008ED995 /* Async.swift */, 1FD8CD271968AB07008ED995 /* SourceLocation.swift */, 1FD8CD281968AB07008ED995 /* Stringers.swift */, AE4BA9AC1C88DDB500B73906 /* Errors.swift */, ); path = Utils; sourceTree = ""; }; 1FFD729A1963FC8200CD29A2 /* objc */ = { isa = PBXGroup; children = ( 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */, 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */, 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */, 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */, 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */, 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */, 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */, 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */, 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */, 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */, 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */, 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */, 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */, 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */, 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */, 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */, 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */, 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */, 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */, 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */, 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */, 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */, 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */, 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */, 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */, DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */, 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */, 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */, ); path = objc; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 1F1A74261940169200FFFC47 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */, 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */, 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */, 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1521BDCA0CE00C3A531 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */, 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */, 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */, 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAA195C0D6300ED456B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */, 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */, 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */, 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 1F1A74281940169200FFFC47 /* Nimble-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */; buildPhases = ( 1F1A74241940169200FFFC47 /* Sources */, 1F1A74251940169200FFFC47 /* Frameworks */, 1F1A74261940169200FFFC47 /* Headers */, 1F1A74271940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-iOS"; productName = "Nimble-iOS"; productReference = 1F1A74291940169200FFFC47 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */; buildPhases = ( 1F1A74301940169200FFFC47 /* Sources */, 1F1A74311940169200FFFC47 /* Frameworks */, 1F1A74321940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( 1F1A74371940169200FFFC47 /* PBXTargetDependency */, 1F925EA5195C0C8500ED456B /* PBXTargetDependency */, 1F925EA7195C0C8500ED456B /* PBXTargetDependency */, 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */, ); name = "Nimble-iOSTests"; productName = "Nimble-iOSTests"; productReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */; buildPhases = ( 1F5DF1501BDCA0CE00C3A531 /* Sources */, 1F5DF1511BDCA0CE00C3A531 /* Frameworks */, 1F5DF1521BDCA0CE00C3A531 /* Headers */, 1F5DF1531BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-tvOS"; productName = "Nimble-tvOS"; productReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */; buildPhases = ( 1F5DF15A1BDCA0CE00C3A531 /* Sources */, 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */, 1F5DF15C1BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */, ); name = "Nimble-tvOSTests"; productName = "Nimble-tvOSTests"; productReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F925EAC195C0D6300ED456B /* Nimble-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */; buildPhases = ( 1F925EA8195C0D6300ED456B /* Sources */, 1F925EA9195C0D6300ED456B /* Frameworks */, 1F925EAA195C0D6300ED456B /* Headers */, 1F925EAB195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-OSX"; productName = "Nimble-OSX"; productReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */; buildPhases = ( 1F925EB3195C0D6300ED456B /* Sources */, 1F925EB4195C0D6300ED456B /* Frameworks */, 1F925EB5195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( 1F925EBA195C0D6300ED456B /* PBXTargetDependency */, 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */, 1F9B7C001968AD760094EB8F /* PBXTargetDependency */, 1F9B7C021968AD820094EB8F /* PBXTargetDependency */, ); name = "Nimble-OSXTests"; productName = "Nimble-OSXTests"; productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 1F1A74201940169200FFFC47 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0710; ORGANIZATIONNAME = "Jeff Hui"; TargetAttributes = { 1F1A74281940169200FFFC47 = { CreatedOnToolsVersion = 6.0; }; 1F1A74331940169200FFFC47 = { CreatedOnToolsVersion = 6.0; TestTargetID = 1F1A74281940169200FFFC47; }; 1F5DF1541BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; }; 1F5DF15D1BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; }; 1F925EAC195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; }; 1F925EB6195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; TestTargetID = 1F925EAC195C0D6300ED456B; }; }; }; buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 1F1A741F1940169200FFFC47; productRefGroup = 1F1A742A1940169200FFFC47 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 1F1A74281940169200FFFC47 /* Nimble-iOS */, 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, 1F925EAC195C0D6300ED456B /* Nimble-OSX */, 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */, 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 1F1A74271940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74321940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1531BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15C1BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAB195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB5195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 1F1A74241940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */, 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */, AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */, DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */, 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */, 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */, 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */, 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */, AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */, 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */, 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74301940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */, 1F14FB64194180C5009F2A08 /* utils.swift in Sources */, DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F02195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1501BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */, 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */, 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */, 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */, 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */, 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */, 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */, 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */, 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */, 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */, AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */, 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */, 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */, 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */, 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */, 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */, 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */, 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */, 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */, 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */, 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */, 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */, 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */, 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */, AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */, 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */, 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */, 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */, 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */, 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */, 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */, 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */, 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */, 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */, 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */, 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */, 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */, 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */, 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */, 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15A1BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */, 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */, 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */, 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */, 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */, 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */, 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */, 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */, AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */, 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */, 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */, 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */, 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */, 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */, 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */, 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */, 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */, 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */, 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */, 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */, 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */, 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */, 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */, 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */, 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */, 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA8195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */, 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */, AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */, 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */, DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */, 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */, 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */, 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */, AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */, 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */, 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB3195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */, 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */, DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F03195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 1F1A74371940169200FFFC47 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */; }; 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */; targetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */; }; 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */; }; 1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */; }; 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1F1A743D1940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = NO; CLANG_LINK_OBJC_RUNTIME = NO; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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_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_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2,3"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 1F1A743E1940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = NO; CLANG_LINK_OBJC_RUNTIME = NO; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2,3"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 1F1A74401940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74411940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; }; name = Release; }; 1F1A74431940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74441940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; }; name = Release; }; 1F5DF1661BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1671BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { 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 = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F5DF1681BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1691BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F925EC1195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; 1F925EC2195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; 1F925EC4195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F925EC5195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A743D1940169200FFFC47 /* Debug */, 1F1A743E1940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74401940169200FFFC47 /* Debug */, 1F1A74411940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74431940169200FFFC47 /* Debug */, 1F1A74441940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1661BDCA0CE00C3A531 /* Debug */, 1F5DF1671BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1681BDCA0CE00C3A531 /* Debug */, 1F5DF1691BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC1195C0D6300ED456B /* Debug */, 1F925EC2195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC4195C0D6300ED456B /* Debug */, 1F925EC5195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 1F1A74201940169200FFFC47 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Nimble/Package.swift ================================================ import PackageDescription let package = Package( name: "Nimble" ) ================================================ FILE: Carthage/Checkouts/Nimble/README.md ================================================ # Nimble Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by [Cedar](https://github.com/pivotal/cedar). ```swift // Swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` # How to Use Nimble **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest) - [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto) - [Custom Failure Messages](#custom-failure-messages) - [Type Checking](#type-checking) - [Operator Overloads](#operator-overloads) - [Lazily Computed Values](#lazily-computed-values) - [C Primitives](#c-primitives) - [Asynchronous Expectations](#asynchronous-expectations) - [Objective-C Support](#objective-c-support) - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) - [Built-in Matcher Functions](#built-in-matcher-functions) - [Equivalence](#equivalence) - [Identity](#identity) - [Comparisons](#comparisons) - [Types/Classes](#typesclasses) - [Truthiness](#truthiness) - [Swift Error Handling](#swift-error-handling) - [Exceptions](#exceptions) - [Collection Membership](#collection-membership) - [Strings](#strings) - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition) - [Verify collection count](#verify-collection-count) - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) - [Writing Your Own Matchers](#writing-your-own-matchers) - [Lazy Evaluation](#lazy-evaluation) - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - [Customizing Failure Messages](#customizing-failure-messages) - [Supporting Objective-C](#supporting-objective-c) - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers) - [Installing Nimble](#installing-nimble) - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) - [Using Nimble without XCTest](#using-nimble-without-xctest) # Some Background: Expressing Outcomes Using Assertions in XCTest Apple's Xcode includes the XCTest framework, which provides assertion macros to test whether code behaves properly. For example, to assert that `1 + 1 = 2`, XCTest has you write: ```swift // Swift XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two") ``` Or, in Objective-C: ```objc // Objective-C XCTAssertEqual(1 + 1, 2, @"expected one plus one to equal two"); ``` XCTest assertions have a couple of drawbacks: 1. **Not enough macros.** There's no easy way to assert that a string contains a particular substring, or that a number is less than or equal to another. 2. **It's hard to write asynchronous tests.** XCTest forces you to write a lot of boilerplate code. Nimble addresses these concerns. # Nimble: Expectations Using `expect(...).to` Nimble allows you to express expectations using a natural, easily understood language: ```swift // Swift import Nimble expect(seagull.squawk).to(equal("Squee!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).to(equal(@"Squee!")); ``` > The `expect` function autocompletes to include `file:` and `line:`, but these parameters are optional. Use the default values to have Xcode highlight the correct line when an expectation is not met. To perform the opposite expectation--to assert something is *not* equal--use `toNot` or `notTo`: ```swift // Swift import Nimble expect(seagull.squawk).toNot(equal("Oh, hello there!")) expect(seagull.squawk).notTo(equal("Oh, hello there!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).toNot(equal(@"Oh, hello there!")); expect(seagull.squawk).notTo(equal(@"Oh, hello there!")); ``` ## Custom Failure Messages Would you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text: ```swift // Swift expect(1 + 1).to(equal(3)) // failed - expected to equal <3>, got <2> expect(1 + 1).to(equal(3), description: "Make sure libKindergartenMath is loaded") // failed - Make sure libKindergartenMath is loaded // expected to equal <3>, got <2> ``` Or the *WithDescription version in Objective-C: ```objc // Objective-C @import Nimble; expect(@(1+1)).to(equal(@3)); // failed - expected to equal <3.0000>, got <2.0000> expect(@(1+1)).toWithDescription(equal(@3), @"Make sure libKindergartenMath is loaded"); // failed - Make sure libKindergartenMath is loaded // expected to equal <3.0000>, got <2.0000> ``` ## Type Checking Nimble makes sure you don't compare two types that don't match: ```swift // Swift // Does not compile: expect(1 + 1).to(equal("Squee!")) ``` > Nimble uses generics--only available in Swift--to ensure type correctness. That means type checking is not available when using Nimble in Objective-C. :sob: ## Operator Overloads Tired of so much typing? With Nimble, you can use overloaded operators like `==` for equivalence, or `>` for comparisons: ```swift // Swift // Passes if squawk does not equal "Hi!": expect(seagull.squawk) != "Hi!" // Passes if 10 is greater than 2: expect(10) > 2 ``` > Operator overloads are only available in Swift, so you won't be able to use this syntax in Objective-C. :broken_heart: ## Lazily Computed Values The `expect` function doesn't evaluate the value it's given until it's time to match. So Nimble can test whether an expression raises an exception once evaluated: ```swift // Swift // Note: Swift currently doesn't have exceptions. // Only Objective-C code can raise exceptions // that Nimble will catch. // (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) let exception = NSException( name: NSInternalInconsistencyException, reason: "Not enough fish in the sea.", userInfo: ["something": "is fishy"]) expect { exception.raise() }.to(raiseException()) // Also, you can customize raiseException to be more specific expect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException)) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea")) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea", userInfo: ["something": "is fishy"])) ``` Objective-C works the same way, but you must use the `expectAction` macro when making an expectation on an expression that has no return value: ```objc // Objective-C NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Not enough fish in the sea." userInfo:nil]; expectAction(^{ [exception raise]; }).to(raiseException()); // Use the property-block syntax to be more specific. expectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea"). userInfo(@{@"something": @"is fishy"})); // You can also pass a block for custom matching of the raised exception expectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(NSInternalInconsistencyException)); })); ``` ## C Primitives Some testing frameworks make it hard to test primitive C values. In Nimble, it just works: ```swift // Swift let actual: CInt = 1 let expectedValue: CInt = 1 expect(actual).to(equal(expectedValue)) ``` In fact, Nimble uses type inference, so you can write the above without explicitly specifying both types: ```swift // Swift expect(1 as CInt).to(equal(1)) ``` > In Objective-C, Nimble only supports Objective-C objects. To make expectations on primitive C values, wrap then in an object literal: ```objc expect(@(1 + 1)).to(equal(@2)); ``` ## Asynchronous Expectations In Nimble, it's easy to make expectations on values that are updated asynchronously. Just use `toEventually` or `toEventuallyNot`: ```swift // Swift dispatch_async(dispatch_get_main_queue()) { ocean.add("dolphins") ocean.add("whales") } expect(ocean).toEventually(contain("dolphins", "whales")) ``` ```objc // Objective-C dispatch_async(dispatch_get_main_queue(), ^{ [ocean add:@"dolphins"]; [ocean add:@"whales"]; }); expect(ocean).toEventually(contain(@"dolphins", @"whales")); ``` Note: toEventually triggers its polls on the main thread. Blocking the main thread will cause Nimble to stop the run loop. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In the above example, `ocean` is constantly re-evaluated. If it ever contains dolphins and whales, the expectation passes. If `ocean` still doesn't contain them, even after being continuously re-evaluated for one whole second, the expectation fails. Sometimes it takes more than a second for a value to update. In those cases, use the `timeout` parameter: ```swift // Swift // Waits three seconds for ocean to contain "starfish": expect(ocean).toEventually(contain("starfish"), timeout: 3) ``` ```objc // Objective-C // Waits three seconds for ocean to contain "starfish": expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); ``` You can also provide a callback by using the `waitUntil` function: ```swift // Swift waitUntil { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(0.5) done() } ``` ```objc // Objective-C waitUntil(^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:0.5]; done(); }); ``` `waitUntil` also optionally takes a timeout parameter: ```swift // Swift waitUntil(timeout: 10) { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(1) done() } ``` ```objc // Objective-C waitUntilTimeout(10, ^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:1]; done(); }); ``` Note: waitUntil triggers its timeout code on the main thread. Blocking the main thread will cause Nimble to stop the run loop to continue. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In some cases (e.g. when running on slower machines) it can be useful to modify the default timeout and poll interval values. This can be done as follows: ```swift // Swift // Increase the global timeout to 5 seconds: Nimble.AsyncDefaults.Timeout = 5 // Slow the polling interval to 0.1 seconds: Nimble.AsyncDefaults.PollInterval = 0.1 ``` ## Objective-C Support Nimble has full support for Objective-C. However, there are two things to keep in mind when using Nimble in Objective-C: 1. All parameters passed to the `expect` function, as well as matcher functions like `equal`, must be Objective-C objects: ```objc // Objective-C @import Nimble; expect(@(1 + 1)).to(equal(@2)); expect(@"Hello world").to(contain(@"world")); ``` 2. To make an expectation on an expression that does not return a value, such as `-[NSException raise]`, use `expectAction` instead of `expect`: ```objc // Objective-C expectAction(^{ [exception raise]; }).to(raiseException()); ``` ## Disabling Objective-C Shorthand Nimble provides a shorthand for expressing expectations using the `expect` function. To disable this shorthand in Objective-C, define the `NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before importing Nimble: ```objc #define NIMBLE_DISABLE_SHORT_SYNTAX 1 @import Nimble; NMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@"Squee!")); ``` > Disabling the shorthand is useful if you're testing functions with names that conflict with Nimble functions, such as `expect` or `equal`. If that's not the case, there's no point in disabling the shorthand. # Built-in Matcher Functions Nimble includes a wide variety of matcher functions. ## Equivalence ```swift // Swift // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) expect(actual) == expected // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) expect(actual) != expected ``` ```objc // Objective-C // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) ``` Values must be `Equatable`, `Comparable`, or subclasses of `NSObject`. `equal` will always fail when used to compare one or more `nil` values. ## Identity ```swift // Swift // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)) expect(actual) === expected // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)) expect(actual) !== expected ``` Its important to remember that `beIdenticalTo` only makes sense when comparing types with reference semantics, which have a notion of identity. In Swift, that means a `class`. This matcher will not work with types with value semantics such as `struct` or `enum`. If you need to compare two value types, you can either compare individual properties or if it makes sense to do so, make your type implement `Equatable` and use Nimble's equivalence matchers instead. ```objc // Objective-C // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)); // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)); ``` ## Comparisons ```swift // Swift expect(actual).to(beLessThan(expected)) expect(actual) < expected expect(actual).to(beLessThanOrEqualTo(expected)) expect(actual) <= expected expect(actual).to(beGreaterThan(expected)) expect(actual) > expected expect(actual).to(beGreaterThanOrEqualTo(expected)) expect(actual) >= expected ``` ```objc // Objective-C expect(actual).to(beLessThan(expected)); expect(actual).to(beLessThanOrEqualTo(expected)); expect(actual).to(beGreaterThan(expected)); expect(actual).to(beGreaterThanOrEqualTo(expected)); ``` > Values given to the comparison matchers above must implement `Comparable`. Because of how computers represent floating point numbers, assertions that two floating point numbers be equal will sometimes fail. To express that two numbers should be close to one another within a certain margin of error, use `beCloseTo`: ```swift // Swift expect(actual).to(beCloseTo(expected, within: delta)) ``` ```objc // Objective-C expect(actual).to(beCloseTo(expected).within(delta)); ``` For example, to assert that `10.01` is close to `10`, you can write: ```swift // Swift expect(10.01).to(beCloseTo(10, within: 0.1)) ``` ```objc // Objective-C expect(@(10.01)).to(beCloseTo(@10).within(0.1)); ``` There is also an operator shortcut available in Swift: ```swift // Swift expect(actual) ≈ expected expect(actual) ≈ (expected, delta) ``` (Type Option-x to get ≈ on a U.S. keyboard) The former version uses the default delta of 0.0001. Here is yet another way to do this: ```swift // Swift expect(actual) ≈ expected ± delta expect(actual) == expected ± delta ``` (Type Option-Shift-= to get ± on a U.S. keyboard) If you are comparing arrays of floating point numbers, you'll find the following useful: ```swift // Swift expect([0.0, 2.0]) ≈ [0.0001, 2.0001] expect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1)) ``` > Values given to the `beCloseTo` matcher must be coercable into a `Double`. ## Types/Classes ```swift // Swift // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)) // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)) ``` ```objc // Objective-C // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)); // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)); ``` > Instances must be Objective-C objects: subclasses of `NSObject`, or Swift objects bridged to Objective-C with the `@objc` prefix. For example, to assert that `dolphin` is a kind of `Mammal`: ```swift // Swift expect(dolphin).to(beAKindOf(Mammal)) ``` ```objc // Objective-C expect(dolphin).to(beAKindOf([Mammal class])); ``` > `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`. ## Truthiness ```swift // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()) // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()) // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()) // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()) // Passes if actual is nil: expect(actual).to(beNil()) ``` ```objc // Objective-C // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()); // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()); // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()); // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()); // Passes if actual is nil: expect(actual).to(beNil()); ``` ## Swift Error Handling If you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown. ```swift // Swift // Passes if somethingThatThrows() throws an ErrorType: expect{ try somethingThatThrows() }.to(throwError()) // Passes if somethingThatThrows() throws an error with a given domain: expect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in expect(error._domain).to(equal(NSCocoaErrorDomain)) }) // Passes if somethingThatThrows() throws an error with a given case: expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) // Passes if somethingThatThrows() throws an error with a given type: expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) ``` If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. ```swift // Swift let actual: ErrorType = … // Passes if actual contains any error value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum)) // Passes if actual contains the Timeout value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum.Timeout)) // Passes if actual contains an NSError equal to the given one: expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) ``` Note: This feature is only available in Swift. ## Exceptions ```swift // Swift // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name: expect(actual).to(raiseException(named: name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException(named: name, reason: reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect { exception.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(beginWith("a r")) }) ``` ```objc // Objective-C // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name expect(actual).to(raiseException().named(name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException().named(name).reason(reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(@"a r")); })); ``` Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise exceptions that Nimble will catch. ## Collection Membership ```swift // Swift // Passes if all of the expected values are members of actual: expect(actual).to(contain(expected...)) // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()) ``` ```objc // Objective-C // Passes if expected is a member of actual: expect(actual).to(contain(expected)); // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()); ``` > In Swift `contain` takes any number of arguments. The expectation passes if all of them are members of the collection. In Objective-C, `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27). For example, to assert that a list of sea creature names contains "dolphin" and "starfish": ```swift // Swift expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish")) ``` ```objc // Objective-C expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"dolphin")); expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"starfish")); ``` > `contain` and `beEmpty` expect collections to be instances of `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements. To test whether a set of elements is present at the beginning or end of an ordered collection, use `beginWith` and `endWith`: ```swift // Swift // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected...)) // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected...)) ``` ```objc // Objective-C // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected)); // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected)); ``` > `beginWith` and `endWith` expect collections to be instances of `NSArray`, or ordered Swift collections composed of `Equatable` elements. Like `contain`, in Objective-C `beginWith` and `endWith` only support a single argument [for now](https://github.com/Quick/Nimble/issues/27). ## Strings ```swift // Swift // Passes if actual contains substring expected: expect(actual).to(contain(expected)) // Passes if actual begins with substring: expect(actual).to(beginWith(expected)) // Passes if actual ends with substring: expect(actual).to(endWith(expected)) // Passes if actual is an empty string, "": expect(actual).to(beEmpty()) // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ```objc // Objective-C // Passes if actual contains substring expected: expect(actual).to(contain(expected)); // Passes if actual begins with substring: expect(actual).to(beginWith(expected)); // Passes if actual ends with substring: expect(actual).to(endWith(expected)); // Passes if actual is an empty string, "": expect(actual).to(beEmpty()); // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ## Checking if all elements of a collection pass a condition ```swift // Swift // with a custom function: expect([1,2,3,4]).to(allPass({$0 < 5})) // with another matcher: expect([1,2,3,4]).to(allPass(beLessThan(5))) ``` ```objc // Objective-C expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); ``` For Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type. For Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which uses another matcher is available here. ## Verify collection count ```swift // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` ```objc // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` For Swift the actual value must be a `CollectionType` such as array, dictionary or set. For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. ## Matching a value to any of a group of matchers ```swift // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) // in Swift you also have the option to use the || operator to achieve a similar function expect(82).to(beLessThan(50) || beGreaterThan(80)) ``` ```objc // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) ``` Note: This matcher allows you to chain any number of matchers together. This provides flexibility, but if you find yourself chaining many matchers together in one test, consider whether you could instead refactor that single test into multiple, more precisely focused tests for better coverage. # Writing Your Own Matchers In Nimble, matchers are Swift functions that take an expected value and return a `MatcherFunc` closure. Take `equal`, for example: ```swift // Swift public func equal(expectedValue: T?) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(expectedValue)>" return actualExpression.evaluate() == expectedValue } } ``` The return value of a `MatcherFunc` closure is a `Bool` that indicates whether the actual value matches the expectation: `true` if it does, or `false` if it doesn't. > The actual `equal` matcher function does not match when either `actual` or `expected` are nil; the example above has been edited for brevity. Since matchers are just Swift functions, you can define them anywhere: at the top of your test file, in a file shared by all of your tests, or in an Xcode project you distribute to others. > If you write a matcher you think everyone can use, consider adding it to Nimble's built-in set of matchers by sending a pull request! Or distribute it yourself via GitHub. For examples of how to write your own matchers, just check out the [`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Sources/Nimble/Matchers) to see how Nimble's built-in set of matchers are implemented. You can also check out the tips below. ## Lazy Evaluation `actualExpression` is a lazy, memoized closure around the value provided to the `expect` function. The expression can either be a closure or a value directly passed to `expect(...)`. In order to determine whether that value matches, custom matchers should call `actualExpression.evaluate()`: ```swift // Swift public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" return actualExpression.evaluate() == nil } } ``` In the above example, `actualExpression` is not `nil`--it is a closure that returns a value. The value it returns, which is accessed via the `evaluate()` method, may be `nil`. If that value is `nil`, the `beNil` matcher function returns `true`, indicating that the expectation passed. Use `expression.isClosure` to determine if the expression will be invoking a closure to produce its value. ## Type Checking via Swift Generics Using Swift's generics, matchers can constrain the type of the actual value passed to the `expect` function by modifying the return type. For example, the following matcher, `haveDescription`, only accepts actual values that implement the `Printable` protocol. It checks their `description` against the one provided to the matcher function, and passes if they are the same: ```swift // Swift public func haveDescription(description: String) -> MatcherFunc { return MatcherFunc { actual, failureMessage in return actual.evaluate().description == description } } ``` ## Customizing Failure Messages By default, Nimble outputs the following failure message when an expectation fails: ``` expected to match, got <\(actual)> ``` You can customize this message by modifying the `failureMessage` struct from within your `MatcherFunc` closure. To change the verb "match" to something else, update the `postfixMessage` property: ```swift // Swift // Outputs: expected to be under the sea, got <\(actual)> failureMessage.postfixMessage = "be under the sea" ``` You can change how the `actual` value is displayed by updating `failureMessage.actualValue`. Or, to remove it altogether, set it to `nil`: ```swift // Swift // Outputs: expected to be under the sea failureMessage.actualValue = nil failureMessage.postfixMessage = "be under the sea" ``` ## Supporting Objective-C To use a custom matcher written in Swift from Objective-C, you'll have to extend the `NMBObjCMatcher` class, adding a new class method for your custom matcher. The example below defines the class method `+[NMBObjCMatcher beNilMatcher]`: ```swift // Swift extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualBlock, failureMessage, location in let block = ({ actualBlock() as NSObject? }) let expr = Expression(expression: block, location: location) return beNil().matches(expr, failureMessage: failureMessage) } } } ``` The above allows you to use the matcher from Objective-C: ```objc // Objective-C expect(actual).to([NMBObjCMatcher beNilMatcher]()); ``` To make the syntax easier to use, define a C function that calls the class method: ```objc // Objective-C FOUNDATION_EXPORT id beNil() { return [NMBObjCMatcher beNilMatcher]; } ``` ### Properly Handling `nil` in Objective-C Matchers When supporting Objective-C, make sure you handle `nil` appropriately. Like [Cedar](https://github.com/pivotal/cedar/issues/100), **most matchers do not match with nil**. This is to bring prevent test writers from being surprised by `nil` values where they did not expect them. Nimble provides the `beNil` matcher function for test writer that want to make expectations on `nil` objects: ```objc // Objective-C expect(nil).to(equal(nil)); // fails expect(nil).to(beNil()); // passes ``` If your matcher does not want to match with nil, you use `NonNilMatcherFunc` and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will automatically generate expected value failure messages when they're nil. ```swift public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.evaluate() let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return beginWith(expected).matches(expr, failureMessage: failureMessage) } } } ``` # Installing Nimble > Nimble can be used on its own, or in conjunction with its sister project, [Quick](https://github.com/Quick/Quick). To install both Quick and Nimble, follow [the installation instructions in the Quick README](https://github.com/Quick/Quick#how-to-install-quick). Nimble can currently be installed in one of two ways: using CocoaPods, or with git submodules. ## Installing Nimble as a Submodule To use Nimble as a submodule to test your iOS or OS X applications, follow these 4 easy steps: 1. Clone the Nimble repository 2. Add Nimble.xcodeproj to the Xcode workspace for your project 3. Link Nimble.framework to your test target 4. Start writing expectations! For more detailed instructions on each of these steps, read [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick). Ignore the steps involving adding Quick to your project in order to install just Nimble. ## Installing Nimble via CocoaPods To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift support for CocoaPods. ```ruby platform :ios, '8.0' source 'https://github.com/CocoaPods/Specs.git' # Whatever pods you need for your app go here target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do use_frameworks! pod 'Nimble', '~> 4.0.0' end ``` Finally run `pod install`. ## Using Nimble without XCTest Nimble is integrated with XCTest to allow it work well when used in Xcode test bundles, however it can also be used in a standalone app. After installing Nimble using one of the above methods, there are two additional steps required to make this work. 1. Create a custom assertion handler and assign an instance of it to the global `NimbleAssertionHandler` variable. For example: ```swift class MyAssertionHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if (!assertion) { print("Expectation failed: \(message.stringValue)") } } } ``` ```swift // Somewhere before you use any assertions NimbleAssertionHandler = MyAssertionHandler() ``` 2. Add a post-build action to fix an issue with the Swift XCTest support library being unnecessarily copied into your app * Edit your scheme in Xcode, and navigate to Build -> Post-actions * Click the "+" icon and select "New Run Script Action" * Open the "Provide build settings from" dropdown and select your target * Enter the following script contents: ``` rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" ``` You can now use Nimble assertions in your code and handle failures as you see fit. ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift ================================================ import Foundation /// Protocol for the assertion handler that Nimble uses for all expectations. public protocol AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) } /// Global backing interface for assertions that Nimble creates. /// Defaults to a private test handler that passes through to XCTest. /// /// If XCTest is not available, you must assign your own assertion handler /// before using any matchers, otherwise Nimble will abort the program. /// /// @see AssertionHandler public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() }() ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift ================================================ /// AssertionDispatcher allows multiple AssertionHandlers to receive /// assertion messages. /// /// @warning Does not fully dispatch if one of the handlers raises an exception. /// This is possible with XCTest-based assertion handlers. /// public class AssertionDispatcher: AssertionHandler { let handlers: [AssertionHandler] public init(handlers: [AssertionHandler]) { self.handlers = handlers } public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { for handler in handlers { handler.assert(assertion, message: message, location: location) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift ================================================ import Foundation /// A data structure that stores information about an assertion when /// AssertionRecorder is set as the Nimble assertion handler. /// /// @see AssertionRecorder /// @see AssertionHandler public struct AssertionRecord: CustomStringConvertible { /// Whether the assertion succeeded or failed public let success: Bool /// The failure message the assertion would display on failure. public let message: FailureMessage /// The source location the expectation occurred on. public let location: SourceLocation public var description: String { return "AssertionRecord { success=\(success), message='\(message.stringValue)', location=\(location) }" } } /// An AssertionHandler that silently records assertions that Nimble makes. /// This is useful for testing failure messages for matchers. /// /// @see AssertionHandler public class AssertionRecorder : AssertionHandler { /// All the assertions that were captured by this recorder public var assertions = [AssertionRecord]() public init() {} public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { assertions.append( AssertionRecord( success: assertion, message: message, location: location)) } } /// Allows you to temporarily replace the current Nimble assertion handler with /// the one provided for the scope of the closure. /// /// Once the closure finishes, then the original Nimble assertion handler is restored. /// /// @see AssertionHandler public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { let environment = NimbleEnvironment.activeInstance let oldRecorder = environment.assertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ environment.assertionHandler = oldRecorder })) environment.assertionHandler = tempAssertionHandler capturer.tryBlock { try! closure() } } /// Captures expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about expectations /// that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherFailingExpectations public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler let recorder = AssertionRecorder() let handlers: [AssertionHandler] if silently { handlers = [recorder] } else { handlers = [recorder, previousRecorder] } let dispatcher = AssertionDispatcher(handlers: handlers) withAssertionHandler(dispatcher, closure: closure) return recorder.assertions } /// Captures failed expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about failed /// expectations that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherExpectations /// @see raiseException source for an example use case. public func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let assertions = gatherExpectations(silently: silently, closure: closure) return assertions.filter { assertion in !assertion.success } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift ================================================ import Foundation /// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this /// class' existance internal class NimbleEnvironment { static var activeInstance: NimbleEnvironment { get { let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] if let env = env as? NimbleEnvironment { return env } else { let newEnv = NimbleEnvironment() self.activeInstance = newEnv return newEnv } } set { NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue } } // TODO: eventually migrate the global to this environment value var assertionHandler: AssertionHandler { get { return NimbleAssertionHandler } set { NimbleAssertionHandler = newValue } } #if _runtime(_ObjC) var awaiter: Awaiter init() { awaiter = Awaiter( waitLock: AssertionWaitLock(), asyncQueue: dispatch_get_main_queue(), timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) } #endif } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift ================================================ import Foundation import XCTest /// Default handler for Nimble. This assertion handler passes failures along to /// XCTest. public class NimbleXCTestHandler : AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { recordFailure("\(message.stringValue)\n", location: location) } } } /// Alternative handler for Nimble. This assertion handler passes failures along /// to XCTest by attempting to reduce the failure message size. public class NimbleShortXCTestHandler: AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { let msg: String if let actual = message.actualValue { msg = "got: \(actual) \(message.postfixActual)" } else { msg = "expected \(message.to) \(message.postfixMessage)" } recordFailure("\(msg)\n", location: location) } } } /// Fallback handler in case XCTest is unavailable. This assertion handler will abort /// the program if it is invoked. class NimbleXCTestUnavailableHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") } } #if _runtime(_ObjC) /// Helper class providing access to the currently executing XCTestCase instance, if any @objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { @objc static let sharedInstance = CurrentTestCaseTracker() private(set) var currentTestCase: XCTestCase? @objc func testCaseWillStart(testCase: XCTestCase) { currentTestCase = testCase } @objc func testCaseDidFinish(testCase: XCTestCase) { currentTestCase = nil } } #endif func isXCTestAvailable() -> Bool { #if _runtime(_ObjC) // XCTest is weakly linked and so may not be present return NSClassFromString("XCTestCase") != nil #else return true #endif } private func recordFailure(message: String, location: SourceLocation) { #if _runtime(_ObjC) if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) } else { let msg = "Attempted to report a test failure to XCTest while no test case was running. " + "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() } #else XCTFail("\(message)\n", file: location.file, line: location.line) #endif } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift ================================================ import Foundation #if !_runtime(_ObjC) // swift-corelibs-foundation doesn't provide NSException at all, so provide a dummy class NSException {} #endif // NOTE: This file is not intended to be included in the Xcode project. It // is picked up by the Swift Package Manager during its build process. /// A dummy reimplementation of the `NMBExceptionCapture` class to serve /// as a stand-in for build and runtime environments that don't support /// Objective C. internal class ExceptionCapture { let finally: (() -> Void)? init(handler: ((NSException!) -> Void)?, finally: (() -> Void)?) { self.finally = finally } func tryBlock(unsafeBlock: (() -> Void)) { // We have no way of handling Objective C exceptions in Swift, // so we just go ahead and run the unsafeBlock as-is unsafeBlock() finally?() } } /// Compatibility with the actual Objective-C implementation typealias NMBExceptionCapture = ExceptionCapture ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h ================================================ #import #import SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") @interface CurrentTestCaseTracker : NSObject + (CurrentTestCaseTracker *)sharedInstance; @end @interface CurrentTestCaseTracker (Register) @end ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h ================================================ #import @class NMBExpectation; @class NMBObjCBeCloseToMatcher; @class NMBObjCRaiseExceptionMatcher; @protocol NMBMatcher; #define NIMBLE_EXPORT FOUNDATION_EXPORT #ifdef NIMBLE_DISABLE_SHORT_SYNTAX #define NIMBLE_SHORT(PROTO, ORIGINAL) #else #define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); } #endif NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT id NMB_equal(id expectedValue); NIMBLE_SHORT(id equal(id expectedValue), NMB_equal(expectedValue)); NIMBLE_EXPORT id NMB_haveCount(id expectedValue); NIMBLE_SHORT(id haveCount(id expectedValue), NMB_haveCount(expectedValue)); NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue), NMB_beCloseTo(expectedValue)); NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); NIMBLE_SHORT(id beAnInstanceOf(Class expectedClass), NMB_beAnInstanceOf(expectedClass)); NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); NIMBLE_SHORT(id beAKindOf(Class expectedClass), NMB_beAKindOf(expectedClass)); NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); NIMBLE_SHORT(id beginWith(id itemElementOrSubstring), NMB_beginWith(itemElementOrSubstring)); NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThan(NSNumber *expectedValue), NMB_beGreaterThan(expectedValue)); NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThanOrEqualTo(NSNumber *expectedValue), NMB_beGreaterThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), NMB_beIdenticalTo(expectedInstance)); NIMBLE_EXPORT id NMB_be(id expectedInstance); NIMBLE_SHORT(id be(id expectedInstance), NMB_be(expectedInstance)); NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), NMB_beLessThan(expectedValue)); NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThanOrEqualTo(NSNumber *expectedValue), NMB_beLessThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beTruthy(void); NIMBLE_SHORT(id beTruthy(void), NMB_beTruthy()); NIMBLE_EXPORT id NMB_beFalsy(void); NIMBLE_SHORT(id beFalsy(void), NMB_beFalsy()); NIMBLE_EXPORT id NMB_beTrue(void); NIMBLE_SHORT(id beTrue(void), NMB_beTrue()); NIMBLE_EXPORT id NMB_beFalse(void); NIMBLE_SHORT(id beFalse(void), NMB_beFalse()); NIMBLE_EXPORT id NMB_beNil(void); NIMBLE_SHORT(id beNil(void), NMB_beNil()); NIMBLE_EXPORT id NMB_beEmpty(void); NIMBLE_SHORT(id beEmpty(void), NMB_beEmpty()); NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; #define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define contain(...) NMB_contain(__VA_ARGS__) #endif NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); NIMBLE_SHORT(id endWith(id itemElementOrSubstring), NMB_endWith(itemElementOrSubstring)); NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), NMB_raiseException()); NIMBLE_EXPORT id NMB_match(id expectedValue); NIMBLE_SHORT(id match(id expectedValue), NMB_match(expectedValue)); NIMBLE_EXPORT id NMB_allPass(id matcher); NIMBLE_SHORT(id allPass(id matcher), NMB_allPass(matcher)); NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); #define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) #endif // In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, // define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout // and action arguments. See https://github.com/Quick/Quick/pull/185 for details. typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void))); typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void))); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); #define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__) #define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__) #define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__) #define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__) #define fail() failWithMessage(@"fail() always fails") #define waitUntilTimeout NMB_waitUntilTimeout #define waitUntil NMB_waitUntil #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m ================================================ #import #import SWIFT_CLASS("_TtC6Nimble7NMBWait") @interface NMBWait : NSObject + (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action; + (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action; @end NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) { return [[NMBExpectation alloc] initWithActualBlock:actualBlock negative:NO file:file line:line]; } NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) { return NMB_expect(^id{ actualBlock(); return nil; }, file, line); } NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) { return [NMBExpectation failWithMessage:msg file:file line:line]; } NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; } NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; } NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; } NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_be(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beTruthy() { return [NMBObjCMatcher beTruthyMatcher]; } NIMBLE_EXPORT id NMB_beFalsy() { return [NMBObjCMatcher beFalsyMatcher]; } NIMBLE_EXPORT id NMB_beTrue() { return [NMBObjCMatcher beTrueMatcher]; } NIMBLE_EXPORT id NMB_beFalse() { return [NMBObjCMatcher beFalseMatcher]; } NIMBLE_EXPORT id NMB_beNil() { return [NMBObjCMatcher beNilMatcher]; } NIMBLE_EXPORT id NMB_beEmpty() { return [NMBObjCMatcher beEmptyMatcher]; } NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; if (itemOrSubstring) { [itemOrSubstringArray addObject:itemOrSubstring]; va_list args; va_start(args, itemOrSubstring); id next; while ((next = va_arg(args, id))) { [itemOrSubstringArray addObject:next]; } va_end(args); } return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; } NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_equal(id expectedValue) { return [NMBObjCMatcher equalMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_haveCount(id expectedValue) { return [NMBObjCMatcher haveCountMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_match(id expectedValue) { return [NMBObjCMatcher matchMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_allPass(id expectedValue) { return [NMBObjCMatcher allPassMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; } NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { return [NMBObjCMatcher raiseExceptionMatcher]; } NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { [NMBWait untilTimeout:timeout file:file line:line action:action]; }; } NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) { return ^(void (^action)(void (^)(void))) { [NMBWait untilFile:file line:line action:action]; }; } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h ================================================ #import #import @interface NMBExceptionCapture : NSObject - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally; - (void)tryBlock:(void(^)())unsafeBlock; @end typedef void(^NMBSourceCallbackBlock)(BOOL successful); ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m ================================================ #import "NMBExceptionCapture.h" @interface NMBExceptionCapture () @property (nonatomic, copy) void(^handler)(NSException *exception); @property (nonatomic, copy) void(^finally)(); @end @implementation NMBExceptionCapture - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally { self = [super init]; if (self) { self.handler = handler; self.finally = finally; } return self; } - (void)tryBlock:(void(^)())unsafeBlock { @try { unsafeBlock(); } @catch (NSException *exception) { if (self.handler) { self.handler(exception); } } @finally { if (self.finally) { self.finally(); } } } @end ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift ================================================ import Foundation #if _runtime(_ObjC) internal struct ObjCMatcherWrapper : Matcher { let matcher: NMBMatcher func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.matches( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.doesNotMatch( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } } // Equivalent to Expectation, but for Nimble's Objective-C interface public class NMBExpectation : NSObject { internal let _actualBlock: () -> NSObject! internal var _negative: Bool internal let _file: FileString internal let _line: UInt internal var _timeout: NSTimeInterval = 1.0 public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { self._actualBlock = actualBlock self._negative = negative self._file = file self._line = line } private var expectValue: Expectation { return expect(_file, line: _line){ self._actualBlock() as NSObject? } } public var withTimeout: (NSTimeInterval) -> NMBExpectation { return ({ timeout in self._timeout = timeout return self }) } public var to: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) }) } public var toWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) }) } public var toNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher) ) }) } public var toNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher), description: description ) }) } public var notTo: (NMBMatcher) -> Void { return toNot } public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } public var toEventually: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toEventuallyNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot } public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } public class func failWithMessage(message: String, file: FileString, line: UInt) { fail(message, location: SourceLocation(file: file, line: line)) } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift ================================================ import Foundation #if _runtime(_ObjC) public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool public class NMBObjCMatcher : NSObject, NMBMatcher { let _match: MatcherBlock let _doesNotMatch: MatcherBlock let canMatchNil: Bool public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) { self.canMatchNil = canMatchNil self._match = matcher self._doesNotMatch = notMatcher } public convenience init(matcher: MatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: MatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in return !matcher(actualExpression: actualExpression, failureMessage: failureMessage) })) } public convenience init(matcher: FullMatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false) }), notMatcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true) })) } private func canMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { do { if !canMatchNil { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return false } } } catch let error { failureMessage.actualValue = "an unexpected error thrown: \(error)" return false } return true } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _match( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _doesNotMatch( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h ================================================ @class NSString; /** * Returns a string appropriate for displaying in test output * from the provided value. * * @param value A value that will show up in a test's output. * * @return The string that is returned can be * customized per type by conforming a type to the `TestOutputStringConvertible` * protocol. When stringifying a non-`TestOutputStringConvertible` type, this * function will return the value's debug description and then its * normal description if available and in that order. Otherwise it * will return the result of constructing a string from the value. * * @see `TestOutputStringConvertible` */ extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m ================================================ #import "NMBStringify.h" #import NSString *_Nonnull NMBStringify(id _Nullable anyObject) { return [NMBStringer stringify:anyObject]; } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m ================================================ #import "CurrentTestCaseTracker.h" #import #import #pragma mark - Method Swizzling /// Swaps the implementations between two instance methods. /// /// @param class The class containing `originalSelector`. /// @param originalSelector Original method to replace. /// @param replacementSelector Replacement method. void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method replacementMethod = class_getInstanceMethod(class, replacementSelector); BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(replacementMethod), method_getTypeEncoding(replacementMethod)); if (didAddMethod) { class_replaceMethod(class, replacementSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, replacementMethod); } } #pragma mark - Private @interface XCTestObservationCenter (Private) - (void)_addLegacyTestObserver:(id)observer; @end @implementation XCTestObservationCenter (Register) /// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary /// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early /// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. /// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, /// falling back to registering after the first normal observer if this private method ever changes. + (void)load { if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { // Swizzle -_addLegacyTestObserver: swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); } else { // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); } } #pragma mark - Replacement Methods /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. - (void)NMB_original__addLegacyTestObserver:(id)observer { [self NMB_original__addLegacyTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. /// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) - (void)NMB_original_addTestObserver:(id)observer { [self NMB_original_addTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/DSL+Wait.swift ================================================ import Foundation #if _runtime(_ObjC) private enum ErrorResult { case Exception(NSException) case Error(ErrorType) case None } /// Only classes, protocols, methods, properties, and subscript declarations can be /// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style /// asynchronous waiting logic so that it may be called from Objective-C and Swift. internal class NMBWait: NSObject { internal class func until( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in action() { done() } } } // Using a throwable closure makes this method not objc compatible. internal class func throwableUntil( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) throws -> Void) -> Void { let awaiter = NimbleEnvironment.activeInstance.awaiter let leeway = timeout / 2.0 let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in dispatch_async(dispatch_get_main_queue()) { let capture = NMBExceptionCapture( handler: ({ exception in done(.Exception(exception)) }), finally: ({ }) ) capture.tryBlock { do { try action() { done(.None) } } catch let e { done(.Error(e)) } } } }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) switch result { case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") case .BlockedRunLoop: fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), file: file, line: line) case .TimedOut: let pluralize = (timeout == 1 ? "" : "s") fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) case let .RaisedException(exception): fail("Unexpected exception raised: \(exception)") case let .ErrorThrown(error): fail("Unexpected error thrown: \(error)") case .Completed(.Exception(let exception)): fail("Unexpected exception raised: \(exception)") case .Completed(.Error(let error)): fail("Unexpected error thrown: \(error)") case .Completed(.None): // success break } } @objc(untilFile:line:action:) internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { until(timeout: 1, file: file, line: line, action: action) } } internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." } /// Wait asynchronously until the done closure is called or the timeout has been reached. /// /// @discussion /// Call the done() closure to indicate the waiting has completed. /// /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { NMBWait.until(timeout: timeout, file: file, line: line, action: action) } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/DSL.swift ================================================ import Foundation /// Make an expectation on a given actual value. The value given is lazily evaluated. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Make an expectation on a given actual value. The closure is lazily invoked. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Always fails the test with a message and a specified location. public func fail(message: String, location: SourceLocation) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(false, message: FailureMessage(stringValue: message), location: location) } /// Always fails the test with a message. public func fail(message: String, file: FileString = #file, line: UInt = #line) { fail(message, location: SourceLocation(file: file, line: line)) } /// Always fails the test. public func fail(file: FileString = #file, line: UInt = #line) { fail("fail() always fails", file: file, line: line) } /// Like Swift's precondition(), but raises NSExceptions instead of sigaborts internal func nimblePrecondition( @autoclosure expr: () -> Bool, @autoclosure _ name: () -> String, @autoclosure _ message: () -> String, file: StaticString = #file, line: UInt = #line) -> Bool { let result = expr() if !result { #if _runtime(_ObjC) let e = NSException( name: name(), reason: message(), userInfo: nil) e.raise() #else preconditionFailure("\(name()) - \(message())", file: file, line: line) #endif } return result } @noreturn internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { fatalError( "Nimble Bug Found: \(msg) at \(file):\(line).\n" + "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + "code snippet that caused this error." ) } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Expectation.swift ================================================ import Foundation internal func expressionMatches(expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = to do { let pass = try matcher.matches(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } internal func expressionDoesNotMatch(expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = toNot do { let pass = try matcher.doesNotMatch(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } public struct Expectation { public let expression: Expression public func verify(pass: Bool, _ message: FailureMessage) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(pass, message: message, location: expression.location) } /// Tests the actual value using a matcher to match. public func to(matcher: U, description: String? = nil) { let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. public func toNot(matcher: U, description: String? = nil) { let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. /// /// Alias to toNot(). public func notTo(matcher: U, description: String? = nil) { toNot(matcher, description: description) } // see: // - AsyncMatcherWrapper for extension // - NMBExpectation for Objective-C interface } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Expression.swift ================================================ import Foundation // Memoizes the given closure, only calling the passed // closure once; even if repeat calls to the returned closure internal func memoizedClosure(closure: () throws -> T) -> (Bool) throws -> T { var cache: T? return ({ withoutCaching in if (withoutCaching || cache == nil) { cache = try closure() } return cache! }) } /// Expression represents the closure of the value inside expect(...). /// Expressions are memoized by default. This makes them safe to call /// evaluate() multiple times without causing a re-evaluation of the underlying /// closure. /// /// @warning Since the closure can be any code, Objective-C code may choose /// to raise an exception. Currently, Expression does not memoize /// exception raising. /// /// This provides a common consumable API for matchers to utilize to allow /// Nimble to change internals to how the captured closure is managed. public struct Expression { internal let _expression: (Bool) throws -> T? internal let _withoutCaching: Bool public let location: SourceLocation public let isClosure: Bool /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. The expression is memoized. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) { self._expression = memoizedClosure(expression) self.location = location self._withoutCaching = false self.isClosure = isClosure } /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param withoutCaching Indicates if the struct should memoize the given /// closure's result. Subsequent evaluate() calls will /// not call the given closure if this is true. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) { self._expression = memoizedExpression self.location = location self._withoutCaching = withoutCaching self.isClosure = isClosure } /// Returns a new Expression from the given expression. Identical to a map() /// on this type. This should be used only to typecast the Expression's /// closure value. /// /// The returned expression will preserve location and isClosure. /// /// @param block The block that can cast the current Expression value to a /// new type. public func cast(block: (T?) throws -> U?) -> Expression { return Expression(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) } public func evaluate() throws -> T? { return try self._expression(_withoutCaching) } public func withoutCaching() -> Expression { return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/FailureMessage.swift ================================================ import Foundation /// Encapsulates the failure message that matchers can report to the end user. /// /// This is shared state between Nimble and matchers that mutate this value. public class FailureMessage: NSObject { public var expected: String = "expected" public var actualValue: String? = "" // empty string -> use default; nil -> exclude public var to: String = "to" public var postfixMessage: String = "match" public var postfixActual: String = "" public var userDescription: String? = nil public var stringValue: String { get { if let value = _stringValueOverride { return value } else { return computeStringValue() } } set { _stringValueOverride = newValue } } internal var _stringValueOverride: String? public override init() { } public init(stringValue: String) { _stringValueOverride = stringValue } internal func stripNewlines(str: String) -> String { var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } return lines.joinWithSeparator("") } internal func computeStringValue() -> String { var value = "\(expected) \(to) \(postfixMessage)" if let actualValue = actualValue { value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" } value = stripNewlines(value) if let userDescription = userDescription { return "\(userDescription)\n\(value)" } return value } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSHumanReadableCopyright Copyright © 2014 Jeff Hui. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AllPass.swift ================================================ import Foundation public func allPass (passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return allPass("pass a condition", passFunc) } public func allPass (passName: String, _ passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return createAllPassMatcher() { expression, failureMessage in failureMessage.postfixMessage = passName return passFunc(try expression.evaluate()) } } public func allPass (matcher: V) -> NonNilMatcherFunc { return createAllPassMatcher() { try matcher.matches($0, failureMessage: $1) } } private func createAllPassMatcher (elementEvaluator:(Expression, FailureMessage) throws -> Bool) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.actualValue = nil if let actualValue = try actualExpression.evaluate() { for currentElement in actualValue { let exp = Expression( expression: {currentElement}, location: actualExpression.location) if try !elementEvaluator(exp, failureMessage) { failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)," + " but failed first at element <\(stringify(currentElement))>" + " in <\(stringify(actualValue))>" return false } } failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)" } else { failureMessage.postfixMessage = "all pass (use beNil() to match nils)" return false } return true } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() var nsObjects = [NSObject]() var collectionIsUsable = true if let value = actualValue as? NSFastEnumeration { let generator = NSFastGenerator(value) while let obj:AnyObject = generator.next() { if let nsObject = obj as? NSObject { nsObjects.append(nsObject) } else { collectionIsUsable = false break } } } else { collectionIsUsable = false } if !collectionIsUsable { failureMessage.postfixMessage = "allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects" failureMessage.expected = "" failureMessage.to = "" return false } let expr = Expression(expression: ({ nsObjects }), location: location) let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location) } return try! createAllPassMatcher(elementEvaluator).matches( expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift ================================================ import Foundation #if _runtime(_ObjC) public struct AsyncDefaults { public static var Timeout: NSTimeInterval = 1 public static var PollInterval: NSTimeInterval = 0.01 } internal struct AsyncMatcherWrapper: Matcher { let fullMatcher: U let timeoutInterval: NSTimeInterval let pollInterval: NSTimeInterval init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { self.fullMatcher = fullMatcher self.timeoutInterval = timeoutInterval self.pollInterval = pollInterval } func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let fnName = "expect(...).toEventually(...)" let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: fnName) { try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventually(...).") } } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: "expect(...).toEventuallyNot(...)") { try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventuallyNot(...).") } } } private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function") extension Expectation { /// Tests the actual value using a matcher to match by checking continuously /// at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionMatches( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), to: "to eventually", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionDoesNotMatch( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), toNot: "to eventually not", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// Alias of toEventuallyNot() /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift ================================================ import Foundation #if _runtime(_ObjC) // A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAKindOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAnInstanceOf if you want to match against the exact class public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" return instance != nil && instance!.isKindOfClass(expectedClass) } } extension NMBObjCMatcher { public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift ================================================ import Foundation // A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types public func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAKindOf if you want to match against subclasses public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be an instance of \(classAsString(expectedClass))" #if _runtime(_ObjC) return instance != nil && instance!.isMemberOfClass(expectedClass) #else return instance != nil && instance!.dynamicType == expectedClass #endif } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift ================================================ #if os(Linux) import Glibc #endif import Foundation internal let DefaultDelta = 0.0001 internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" failureMessage.actualValue = "<\(stringify(actualValue))>" return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } #if _runtime(_ObjC) public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { var _expected: NSNumber var _delta: CDouble init(expected: NSNumber, within: CDouble) { _expected = expected _delta = within } public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.doesNotMatch(expr, failureMessage: failureMessage) } public var within: (CDouble) -> NMBObjCBeCloseToMatcher { return ({ delta in return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) }) } } extension NMBObjCMatcher { public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { return NMBObjCBeCloseToMatcher(expected: expected, within: within) } } #endif public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" if let actual = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actual))>" if actual.count != expectedValues.count { return false } else { for (index, actualItem) in actual.enumerate() { if fabs(actualItem - expectedValues[index]) > delta { return false } } return true } } return false } } // MARK: - Operators infix operator ≈ { associativity none precedence 130 } public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } public func ==(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } // make this higher precedence than exponents so the Doubles either end aren't pulled in // unexpectantly infix operator ± { precedence 170 } public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { return (expected: lhs, delta: rhs) } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeEmpty.swift ================================================ import Foundation /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualSeq = try actualExpression.evaluate() if actualSeq == nil { return true } var generator = actualSeq!.generate() return generator.next() == nil } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || NSString(string: actualString!).length == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For NSString instances, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || actualString!.length == 0 } } // Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray, // etc, since they conform to SequenceType as well as NMBCollection. /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualDictionary = try actualExpression.evaluate() return actualDictionary == nil || actualDictionary!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualArray = try actualExpression.evaluate() return actualArray == nil || actualArray!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actual = try actualExpression.evaluate() return actual == nil || actual!.count == 0 } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beEmptyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() failureMessage.postfixMessage = "be empty" if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" return try actualExpression.evaluate() > expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending return matches } } public func >(lhs: Expectation, rhs: T) { lhs.to(beGreaterThan(rhs)) } public func >(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beGreaterThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue >= expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending return matches } } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actual = try actualExpression.evaluate() failureMessage.actualValue = "\(identityAsString(actual))" failureMessage.postfixMessage = "be identical to \(identityAsString(expected))" return actual === expected && actual !== nil } } public func ===(lhs: Expectation, rhs: AnyObject?) { lhs.to(beIdenticalTo(rhs)) } public func !==(lhs: Expectation, rhs: AnyObject?) { lhs.toNot(beIdenticalTo(rhs)) } /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. /// /// Alias for "beIdenticalTo". public func be(expected: AnyObject?) -> NonNilMatcherFunc { return beIdenticalTo(expected) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let aExpr = actualExpression.cast { $0 as AnyObject? } return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" return try actualExpression.evaluate() < expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending return matches } } public func <(lhs: Expectation, rhs: T) { lhs.to(beLessThan(rhs)) } public func <(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beLessThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as! NMBComparable? } return try! beLessThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" return try actualExpression.evaluate() <= expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending } } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLogical.swift ================================================ import Foundation internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in defer { postprocessor(failureMessage) } return try matcher.matcher(actualExpression, failureMessage) } } // MARK: beTrue() / beFalse() /// A Nimble matcher that succeeds when the actual value is exactly true. /// This matcher will not match against nils. public func beTrue() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(true)) { failureMessage in failureMessage.postfixMessage = "be true" } } /// A Nimble matcher that succeeds when the actual value is exactly false. /// This matcher will not match against nils. public func beFalse() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(false)) { failureMessage in failureMessage.postfixMessage = "be false" } } // MARK: beTruthy() / beFalsy() /// A Nimble matcher that succeeds when the actual value is not logically false. public func beTruthy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be truthy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue == true } } return actualValue != nil } } /// A Nimble matcher that succeeds when the actual value is logically false. /// This matcher will match against nils. public func beFalsy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be falsy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue != true } } return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beTruthyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beTruthy().matches(expr, failureMessage: failureMessage) } } public class func beFalsyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beFalsy().matches(expr, failureMessage: failureMessage) } } public class func beTrueMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beTrue().matches(expr, failureMessage: failureMessage) } } public class func beFalseMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beFalse().matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeNil.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is nil. public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" let actualValue = try actualExpression.evaluate() return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in return try! beNil().matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeVoid.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is Void. public func beVoid() -> MatcherFunc<()> { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be void" let actualValue: ()? = try actualExpression.evaluate() return actualValue != nil } } public func ==(lhs: Expectation<()>, rhs: ()) { lhs.to(beVoid()) } public func !=(lhs: Expectation<()>, rhs: ()) { lhs.toNot(beVoid()) } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeginWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's first element /// is equal to the expected value. public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's first element /// is equal to the expected object. public func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(startingElement) == 0 } } /// A Nimble matcher that succeeds when the actual string contains expected substring /// where the expected substring's location is zero. public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingSubstring)>" if let actual = try actualExpression.evaluate() { let range = actual.rangeOfString(startingSubstring) return range != nil && range!.startIndex == actual.startIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! beginWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Contain.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence contains the expected value. public func contain(items: T...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [T]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" if let actual = try actualExpression.evaluate() { return items.all { return actual.contains($0) } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: String...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [String]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { let range = actual.rangeOfString($0) return range != nil && !range!.isEmpty } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: NSString...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [NSString]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { actual.rangeOfString($0.description).length != 0 } } return false } } /// A Nimble matcher that succeeds when the actual collection contains the expected object. public func contain(items: AnyObject?...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [AnyObject?]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" guard let actual = try actualExpression.evaluate() else { return false } return items.all { item in return item != nil && actual.containsObject(item!) } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBContainer { let expr = Expression(expression: ({ value as NMBContainer }), location: location) // A straightforward cast on the array causes this to crash, so we have to cast the individual items let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? }) return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage) } else if actualValue != nil { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" } else { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/EndWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's last element /// is equal to the expected value. public func endWith(endingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() var lastItem: T? var item: T? repeat { lastItem = item item = actualGenerator.next() } while(item != nil) return lastItem == endingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's last element /// is equal to the expected object. public func endWith(endingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1 } } /// A Nimble matcher that succeeds when the actual string contains the expected substring /// where the expected substring's location is the actual string's length minus the /// expected substring's length. public func endWith(endingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingSubstring)>" if let collection = try actualExpression.evaluate() { let range = collection.rangeOfString(endingSubstring) return range != nil && range!.endIndex == collection.endIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! endWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Equal.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue == expectedValue && expectedValue != nil if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return matches } } /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. /// Items must implement the Equatable protocol. public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher allowing comparison of collection with optional type public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let actualValue = try actualExpression.evaluate() { if expectedValue.count != actualValue.count { return false } for (index, item) in actualValue.enumerate() { let otherItem = expectedValue[index] if item == nil && otherItem == nil { continue } else if item == nil && otherItem != nil { return false } else if item != nil && otherItem == nil { return false } else if item! != otherItem! { return false } } return true } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: stringify) } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: { if let set = $0 { return stringify(Array(set).sort { $0 < $1 }) } else { return "nil" } }) } private func equal(expectedValue: Set?, stringify: Set? -> String) -> NonNilMatcherFunc> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let expectedValue = expectedValue { if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actualValue))>" if expectedValue == actualValue { return true } let missing = expectedValue.subtract(actualValue) if missing.count > 0 { failureMessage.postfixActual += ", missing <\(stringify(missing))>" } let extra = actualValue.subtract(expectedValue) if extra.count > 0 { failureMessage.postfixActual += ", extra <\(stringify(extra))>" } } } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } public func ==(lhs: Expectation, rhs: T?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation, rhs: T?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T]>, rhs: [T]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T]>, rhs: [T]?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.toNot(equal(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func equalMatcher(expected: NSObject) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! equal(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/HaveCount.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual CollectionType's count equals /// the expected value public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(stringify(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" return result } else { return false } } } /// A Nimble matcher that succeeds when the actual collection's count equals /// the expected value public func haveCount(expectedValue: Int) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(stringify(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" return result } else { return false } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection}), location: location) return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Match.swift ================================================ import Foundation #if _runtime(_ObjC) /// A Nimble matcher that succeeds when the actual string satisfies the regular expression /// described by the expected string. public func match(expectedValue: String?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "match <\(stringify(expectedValue))>" if let actual = try actualExpression.evaluate() { if let regexp = expectedValue { return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil } } return false } } extension NMBObjCMatcher { public class func matchMatcher(expected: NSString) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.cast { $0 as? String } return try! match(expected.description).matches(actual, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatchError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. public func matchError(error: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) return errorMatchesNonNilFieldsOrClosure(actualError, error: error) } } /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error of the specified type public func matchError(errorType: T.Type) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift ================================================ /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil /// values are recieved in an expectation. /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct MatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try matcher(actualExpression, failureMessage) } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try !matcher(actualExpression, failureMessage) } } /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// Unlike MatcherFunc, this will always fail if an expectation contains nil. /// This applies regardless of using to() or toNot(). /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct NonNilMatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try !matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } internal func attachNilErrorIfNeeded(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return true } return false } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift ================================================ import Foundation /// Implement this protocol to implement a custom matcher for Swift public protocol Matcher { associatedtype ValueType func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool } #if _runtime(_ObjC) /// Objective-C interface to the Swift variant of Matcher. @objc public protocol NMBMatcher { func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool } #endif #if _runtime(_ObjC) /// Protocol for types that support contain() matcher. @objc public protocol NMBContainer { func containsObject(object: AnyObject!) -> Bool } extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet #else public protocol NMBContainer { func containsObject(object: AnyObject) -> Bool } #endif extension NSArray : NMBContainer {} extension NSSet : NMBContainer {} #if _runtime(_ObjC) /// Protocol for types that support only beEmpty(), haveCount() matchers @objc public protocol NMBCollection { var count: Int { get } } extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet extension NSMapTable : NMBCollection {} #else public protocol NMBCollection { var count: Int { get } } #endif extension NSSet : NMBCollection {} extension NSIndexSet : NMBCollection {} extension NSDictionary : NMBCollection {} #if _runtime(_ObjC) /// Protocol for types that support beginWith(), endWith(), beEmpty() matchers @objc public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject!) -> Int } #else public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject) -> Int } #endif extension NSArray : NMBOrderedCollection {} #if _runtime(_ObjC) /// Protocol for types to support beCloseTo() matcher @objc public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } #else public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } extension Double : NMBDoubleConvertible { public var doubleValue: CDouble { get { return self } } } extension Float : NMBDoubleConvertible { public var doubleValue: CDouble { get { return CDouble(self) } } } #endif extension NSNumber : NMBDoubleConvertible { } private let dateFormatter: NSDateFormatter = { let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") return formatter }() #if _runtime(_ObjC) extension NSDate: NMBDoubleConvertible { public var doubleValue: CDouble { get { return self.timeIntervalSinceReferenceDate } } } #endif extension NSDate: TestOutputStringConvertible { public var testDescription: String { return dateFormatter.stringFromDate(self) } } /// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), /// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. /// /// Types that conform to Swift's Comparable protocol will work implicitly too #if _runtime(_ObjC) @objc public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #else // This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #endif extension NSNumber : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! NSNumber) } } extension NSString : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! String) } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/PostNotification.swift ================================================ import Foundation internal class NotificationCollector { private(set) var observedNotifications: [NSNotification] private let notificationCenter: NSNotificationCenter #if _runtime(_ObjC) private var token: AnyObject? #else private var token: NSObjectProtocol? #endif required init(notificationCenter: NSNotificationCenter) { self.notificationCenter = notificationCenter self.observedNotifications = [] } func startObserving() { self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { // linux-swift gets confused by .append(n) [weak self] n in self?.observedNotifications += [n] } } deinit { #if _runtime(_ObjC) if let token = self.token { self.notificationCenter.removeObserver(token) } #else if let token = self.token as? AnyObject { self.notificationCenter.removeObserver(token) } #endif } } private let mainThread = pthread_self() public func postNotifications( notificationsMatcher: T, fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) -> MatcherFunc { let _ = mainThread // Force lazy-loading of this value let collector = NotificationCollector(notificationCenter: center) collector.startObserving() var once: Bool = false return MatcherFunc { actualExpression, failureMessage in let collectorNotificationsExpression = Expression(memoizedExpression: { _ in return collector.observedNotifications }, location: actualExpression.location, withoutCaching: true) assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") if !once { once = true try actualExpression.evaluate() } let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) if collector.observedNotifications.isEmpty { failureMessage.actualValue = "no notifications" } else { failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" } return match } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/RaisesException.swift ================================================ import Foundation // This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager #if _runtime(_ObjC) && !SWIFT_PACKAGE /// A Nimble matcher that succeeds when the actual expression raises an /// exception with the specified name, reason, and/or userInfo. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the raised exception. The closure only gets called when an exception /// is raised. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func raiseException( named named: String? = nil, reason: String? = nil, userInfo: NSDictionary? = nil, closure: ((NSException) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var exception: NSException? let capture = NMBExceptionCapture(handler: ({ e in exception = e }), finally: nil) capture.tryBlock { try! actualExpression.evaluate() return } setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure) return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure) } } internal func setFailureMessageForException( failureMessage: FailureMessage, exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) { failureMessage.postfixMessage = "raise exception" if let named = named { failureMessage.postfixMessage += " with name <\(named)>" } if let reason = reason { failureMessage.postfixMessage += " with reason <\(reason)>" } if let userInfo = userInfo { failureMessage.postfixMessage += " with userInfo <\(userInfo)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if named == nil && reason == nil && userInfo == nil && closure == nil { failureMessage.postfixMessage = "raise any exception" } if let exception = exception { failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" } else { failureMessage.actualValue = "no exception" } } internal func exceptionMatchesNonNilFieldsOrClosure( exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) -> Bool { var matches = false if let exception = exception { matches = true if named != nil && exception.name != named { matches = false } if reason != nil && exception.reason != reason { matches = false } if userInfo != nil && exception.userInfo != userInfo { matches = false } if let closure = closure { let assertions = gatherFailingExpectations { closure(exception) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } public class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher { internal var _name: String? internal var _reason: String? internal var _userInfo: NSDictionary? internal var _block: ((NSException) -> Void)? internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { _name = name _reason = reason _userInfo = userInfo _block = block } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let block: () -> Any? = ({ actualBlock(); return nil }) let expr = Expression(expression: block, location: location) return try! raiseException( named: _name, reason: _reason, userInfo: _userInfo, closure: _block ).matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { return !matches(actualBlock, failureMessage: failureMessage, location: location) } public var named: (name: String) -> NMBObjCRaiseExceptionMatcher { return ({ name in return NMBObjCRaiseExceptionMatcher( name: name, reason: self._reason, userInfo: self._userInfo, block: self._block ) }) } public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher { return ({ reason in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: reason, userInfo: self._userInfo, block: self._block ) }) } public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { return ({ userInfo in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: userInfo, block: self._block ) }) } public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { return ({ block in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: self._userInfo, block: block ) }) } } extension NMBObjCMatcher { public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value matches with any of the matchers /// provided in the variable list of matchers. public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { return satisfyAnyOf(matchers) } internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let postfixMessages = NSMutableArray() var matches = false for matcher in matchers { if try matcher.matches(actualExpression, failureMessage: failureMessage) { matches = true } postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) } failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "\(actualValue)" } return matches } } public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in if matchers.isEmpty { failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" return false } var elementEvaluators = [NonNilMatcherFunc]() for matcher in matchers { let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) } elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) } return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/ThrowError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression throws an /// error of the specified type or from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the thrown error. The closure only gets called when an error was thrown. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func throwError( error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) } } /// A Nimble matcher that succeeds when the actual expression throws any /// error or when the passed closures' arbitrary custom matching succeeds. /// /// This duplication to it's generic adequate is required to allow to receive /// values of the existential type ErrorType in the closure. /// /// The closure only gets called when an error was thrown. public func throwError( closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Nimble.h ================================================ #import #import "NMBExceptionCapture.h" #import "NMBStringify.h" #import "DSL.h" FOUNDATION_EXPORT double NimbleVersionNumber; FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Async.swift ================================================ import Foundation #if _runtime(_ObjC) import Dispatch private let timeoutLeeway: UInt64 = NSEC_PER_MSEC private let pollLeeway: UInt64 = NSEC_PER_MSEC /// Stores debugging information about callers internal struct WaitingInfo: CustomStringConvertible { let name: String let file: FileString let lineNumber: UInt var description: String { return "\(name) at \(file):\(lineNumber)" } } internal protocol WaitLock { func acquireWaitingLock(fnName: String, file: FileString, line: UInt) func releaseWaitingLock() func isWaitingLocked() -> Bool } internal class AssertionWaitLock: WaitLock { private var currentWaiter: WaitingInfo? = nil init() { } func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { let info = WaitingInfo(name: fnName, file: file, lineNumber: line) nimblePrecondition( NSThread.isMainThread(), "InvalidNimbleAPIUsage", "\(fnName) can only run on the main thread." ) nimblePrecondition( currentWaiter == nil, "InvalidNimbleAPIUsage", "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + "The call to\n\t\(info)\n" + "triggered this exception because\n\t\(currentWaiter!)\n" + "is currently managing the main run loop." ) currentWaiter = info } func isWaitingLocked() -> Bool { return currentWaiter != nil } func releaseWaitingLock() { currentWaiter = nil } } internal enum AwaitResult { /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) case Incomplete /// TimedOut indicates the result reached its defined timeout limit before returning case TimedOut /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger /// the timeout code. /// /// This may also mean the async code waiting upon may have never actually ran within the /// required time because other timers & sources are running on the main run loop. case BlockedRunLoop /// The async block successfully executed and returned a given result case Completed(T) /// When a Swift Error is thrown case ErrorThrown(ErrorType) /// When an Objective-C Exception is raised case RaisedException(NSException) func isIncomplete() -> Bool { switch self { case .Incomplete: return true default: return false } } func isCompleted() -> Bool { switch self { case .Completed(_): return true default: return false } } } /// Holds the resulting value from an asynchronous expectation. /// This class is thread-safe at receiving an "response" to this promise. internal class AwaitPromise { private(set) internal var asyncResult: AwaitResult = .Incomplete private var signal: dispatch_semaphore_t init() { signal = dispatch_semaphore_create(1) } /// Resolves the promise with the given result if it has not been resolved. Repeated calls to /// this method will resolve in a no-op. /// /// @returns a Bool that indicates if the async result was accepted or rejected because another /// value was recieved first. func resolveResult(result: AwaitResult) -> Bool { if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { self.asyncResult = result return true } else { return false } } } internal struct AwaitTrigger { let timeoutSource: dispatch_source_t let actionSource: dispatch_source_t? let start: () throws -> Void } /// Factory for building fully configured AwaitPromises and waiting for their results. /// /// This factory stores all the state for an async expectation so that Await doesn't /// doesn't have to manage it. internal class AwaitPromiseBuilder { let awaiter: Awaiter let waitLock: WaitLock let trigger: AwaitTrigger let promise: AwaitPromise internal init( awaiter: Awaiter, waitLock: WaitLock, promise: AwaitPromise, trigger: AwaitTrigger) { self.awaiter = awaiter self.waitLock = waitLock self.promise = promise self.trigger = trigger } func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { // = Discussion = // // There's a lot of technical decisions here that is useful to elaborate on. This is // definitely more lower-level than the previous NSRunLoop based implementation. // // // Why Dispatch Source? // // // We're using a dispatch source to have better control of the run loop behavior. // A timer source gives us deferred-timing control without having to rely as much on // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) // which is ripe for getting corrupted by application code. // // And unlike dispatch_async(), we can control how likely our code gets prioritized to // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. // // This timer is assumed to run on the HIGH priority queue to ensure it maintains the // highest priority over normal application / test code when possible. // // // Run Loop Management // // In order to properly interrupt the waiting behavior performed by this factory class, // this timer stops the main run loop to tell the waiter code that the result should be // checked. // // In addition, stopping the run loop is used to halt code executed on the main run loop. dispatch_source_set_timer( trigger.timeoutSource, dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), DISPATCH_TIME_FOREVER, timeoutLeeway ) dispatch_source_set_event_handler(trigger.timeoutSource) { guard self.promise.asyncResult.isIncomplete() else { return } let timedOutSem = dispatch_semaphore_create(0) let semTimedOutOrBlocked = dispatch_semaphore_create(0) dispatch_semaphore_signal(semTimedOutOrBlocked) let runLoop = CFRunLoopGetMain() CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { dispatch_semaphore_signal(timedOutSem) dispatch_semaphore_signal(semTimedOutOrBlocked) if self.promise.resolveResult(.TimedOut) { CFRunLoopStop(CFRunLoopGetMain()) } } } // potentially interrupt blocking code on run loop to let timeout code run CFRunLoopStop(runLoop) let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 if didNotTimeOut && timeoutWasNotTriggered { if self.promise.resolveResult(.BlockedRunLoop) { CFRunLoopStop(CFRunLoopGetMain()) } } } return self } /// Blocks for an asynchronous result. /// /// @discussion /// This function must be executed on the main thread and cannot be nested. This is because /// this function (and it's related methods) coordinate through the main run loop. Tampering /// with the run loop can cause undesireable behavior. /// /// This method will return an AwaitResult in the following cases: /// /// - The main run loop is blocked by other operations and the async expectation cannot be /// be stopped. /// - The async expectation timed out /// - The async expectation succeeded /// - The async expectation raised an unexpected exception (objc) /// - The async expectation raised an unexpected error (swift) /// /// The returned AwaitResult will NEVER be .Incomplete. func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { waitLock.acquireWaitingLock( fnName, file: file, line: line) let capture = NMBExceptionCapture(handler: ({ exception in self.promise.resolveResult(.RaisedException(exception)) }), finally: ({ self.waitLock.releaseWaitingLock() })) capture.tryBlock { do { try self.trigger.start() } catch let error { self.promise.resolveResult(.ErrorThrown(error)) } dispatch_resume(self.trigger.timeoutSource) while self.promise.asyncResult.isIncomplete() { // Stopping the run loop does not work unless we run only 1 mode NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) } dispatch_suspend(self.trigger.timeoutSource) dispatch_source_cancel(self.trigger.timeoutSource) if let asyncSource = self.trigger.actionSource { dispatch_source_cancel(asyncSource) } } return promise.asyncResult } } internal class Awaiter { let waitLock: WaitLock let timeoutQueue: dispatch_queue_t let asyncQueue: dispatch_queue_t internal init( waitLock: WaitLock, asyncQueue: dispatch_queue_t, timeoutQueue: dispatch_queue_t) { self.waitLock = waitLock self.asyncQueue = asyncQueue self.timeoutQueue = timeoutQueue } private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { return dispatch_source_create( DISPATCH_SOURCE_TYPE_TIMER, 0, DISPATCH_TIMER_STRICT, queue ) } func performBlock( closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) var completionCount = 0 let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { try closure() { completionCount += 1 nimblePrecondition( completionCount < 2, "InvalidNimbleAPIUsage", "Done closure's was called multiple times. waitUntil(..) expects its " + "completion closure to only be called once.") if promise.resolveResult(.Completed($0)) { CFRunLoopStop(CFRunLoopGetMain()) } } } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) let asyncSource = createTimerSource(asyncQueue) let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) dispatch_source_set_event_handler(asyncSource) { do { if let result = try closure() { if promise.resolveResult(.Completed(result)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } catch let error { if promise.resolveResult(.ErrorThrown(error)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } dispatch_resume(asyncSource) } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } } internal func pollBlock( pollInterval pollInterval: NSTimeInterval, timeoutInterval: NSTimeInterval, file: FileString, line: UInt, fnName: String = #function, expression: () throws -> Bool) -> AwaitResult { let awaiter = NimbleEnvironment.activeInstance.awaiter let result = awaiter.poll(pollInterval) { () throws -> Bool? in do { if try expression() { return true } return nil } catch let error { throw error } }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) return result } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Errors.swift ================================================ import Foundation // Generic internal func setFailureMessageForError( failureMessage: FailureMessage, postfixMessageVerb: String = "throw", actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) { failureMessage.postfixMessage = "\(postfixMessageVerb) error" if let error = error { if let error = error as? CustomDebugStringConvertible { failureMessage.postfixMessage += " <\(error.debugDescription)>" } else { failureMessage.postfixMessage += " <\(error)>" } } else if errorType != nil || closure != nil { failureMessage.postfixMessage += " from type <\(T.self)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if error == nil && errorType == nil && closure == nil { failureMessage.postfixMessage = "\(postfixMessageVerb) any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { return actualError._domain == expectedError._domain && actualError._code == expectedError._code } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { if let actualError = actualError as? T { return actualError == expectedError } return false } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> Bool { var matches = false if let actualError = actualError { matches = true if let error = error { if !errorMatchesExpectedError(actualError, expectedError: error) { matches = false } } if let actualError = actualError as? T { if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError as T) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } else if errorType != nil && closure != nil { // The closure expects another ErrorType as argument, so this // is _supposed_ to fail, so that it becomes more obvious. let assertions = gatherExpectations { expect(actualError is T).to(equal(true)) } precondition(assertions.map { $0.message }.count > 0) matches = false } } return matches } // Non-generic internal func setFailureMessageForError( failureMessage: FailureMessage, actualError: ErrorType?, closure: ((ErrorType) -> Void)?) { failureMessage.postfixMessage = "throw error" if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } else { failureMessage.postfixMessage = "throw any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, closure: ((ErrorType) -> Void)?) -> Bool { var matches = false if let actualError = actualError { matches = true if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Functional.swift ================================================ import Foundation extension SequenceType { internal func all(fn: Generator.Element -> Bool) -> Bool { for item in self { if !fn(item) { return false } } return true } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Utils/SourceLocation.swift ================================================ import Foundation // Ideally we would always use `StaticString` as the type for tracking the file name // that expectations originate from, for consistency with `assert` etc. from the // stdlib, and because recent versions of the XCTest overlay require `StaticString` // when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we // have to use `String` instead because StaticString can't be generated from Objective-C #if _runtime(_ObjC) public typealias FileString = String #else public typealias FileString = StaticString #endif public final class SourceLocation : NSObject { public let file: FileString public let line: UInt override init() { file = "Unknown File" line = 0 } init(file: FileString, line: UInt) { self.file = file self.line = line } override public var description: String { return "\(file):\(line)" } } ================================================ FILE: Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Stringers.swift ================================================ import Foundation internal func identityAsString(value: AnyObject?) -> String { if let value = value { return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description } else { return "nil" } } internal func classAsString(cls: AnyClass) -> String { #if _runtime(_ObjC) return NSStringFromClass(cls) #else return String(cls) #endif } internal func arrayAsString(items: [T], joiner: String = ", ") -> String { return items.reduce("") { accum, item in let prefix = (accum.isEmpty ? "" : joiner) return accum + prefix + "\(stringify(item))" } } /// A type with a customized test output text representation. /// /// This textual representation is produced when values will be /// printed in test runs, and may be useful when producing /// error messages in custom matchers. /// /// - SeeAlso: `CustomDebugStringConvertible` public protocol TestOutputStringConvertible { var testDescription: String { get } } extension Double: TestOutputStringConvertible { public var testDescription: String { return NSNumber(double: self).testDescription } } extension Float: TestOutputStringConvertible { public var testDescription: String { return NSNumber(float: self).testDescription } } extension NSNumber: TestOutputStringConvertible { // This is using `NSString(format:)` instead of // `String(format:)` because the latter somehow breaks // the travis CI build on linux. public var testDescription: String { let description = self.description if description.containsString(".") { // Travis linux swiftpm build doesn't like casting String to NSString, // which is why this annoying nested initializer thing is here. // Maybe this will change in a future snapshot. let decimalPlaces = NSString(string: NSString(string: description) .componentsSeparatedByString(".")[1]) if decimalPlaces.length > 4 { return NSString(format: "%0.4f", self.doubleValue).description } } return self.description } } extension Array: TestOutputStringConvertible { public var testDescription: String { let list = self.map(Nimble.stringify).joinWithSeparator(", ") return "[\(list)]" } } extension AnySequence: TestOutputStringConvertible { public var testDescription: String { let generator = self.generate() var strings = [String]() var value: AnySequence.Generator.Element? repeat { value = generator.next() if let value = value { strings.append(stringify(value)) } } while value != nil let list = strings.joinWithSeparator(", ") return "[\(list)]" } } extension NSArray: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension NSIndexSet: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension String: TestOutputStringConvertible { public var testDescription: String { return self } } extension NSData: TestOutputStringConvertible { public var testDescription: String { #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) return "NSData" #else return "NSData" #endif } } /// /// Returns a string appropriate for displaying in test output /// from the provided value. /// /// - parameter value: A value that will show up in a test's output. /// /// - returns: The string that is returned can be /// customized per type by conforming a type to the `TestOutputStringConvertible` /// protocol. When stringifying a non-`TestOutputStringConvertible` type, this /// function will return the value's debug description and then its /// normal description if available and in that order. Otherwise it /// will return the result of constructing a string from the value. /// /// - SeeAlso: `TestOutputStringConvertible` @warn_unused_result public func stringify(value: T) -> String { if let value = value as? TestOutputStringConvertible { return value.testDescription } if let value = value as? CustomDebugStringConvertible { return value.debugDescription } return String(value) } /// -SeeAlso: `stringify(value: T)` @warn_unused_result public func stringify(value: T?) -> String { if let unboxed = value { return stringify(unboxed) } return "nil" } #if _runtime(_ObjC) @objc public class NMBStringer: NSObject { @warn_unused_result @objc public class func stringify(obj: AnyObject?) -> String { return Nimble.stringify(obj) } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Tests/LinuxMain.swift ================================================ import XCTest @testable import Nimbletest // This is the entry point for NimbleTests on Linux XCTMain([ // AsynchronousTests(), SynchronousTest(), UserDescriptionTest(), // Matchers AllPassTest(), // BeAKindOfTest(), BeAnInstanceOfTest(), BeCloseToTest(), BeginWithTest(), BeGreaterThanOrEqualToTest(), BeGreaterThanTest(), BeIdenticalToObjectTest(), BeIdenticalToTest(), BeLessThanOrEqualToTest(), BeLessThanTest(), BeTruthyTest(), BeTrueTest(), BeFalsyTest(), BeFalseTest(), BeNilTest(), ContainTest(), EndWithTest(), EqualTest(), HaveCountTest(), // MatchTest(), // RaisesExceptionTest(), ThrowErrorTest(), SatisfyAnyOfTest(), PostNotificationTest(), ]) ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/AsynchronousTest.swift ================================================ import Foundation import XCTest import Nimble // These tests require the ObjC runtimes do not currently have the GCD and run loop facilities // required for working with Nimble's async matchers #if _runtime(_ObjC) class AsyncTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToEventuallyPositiveMatches", testToEventuallyPositiveMatches), ("testToEventuallyNegativeMatches", testToEventuallyNegativeMatches), ("testWaitUntilPositiveMatches", testWaitUntilPositiveMatches), ("testToEventuallyWithCustomDefaultTimeout", testToEventuallyWithCustomDefaultTimeout), ("testWaitUntilTimesOutIfNotCalled", testWaitUntilTimesOutIfNotCalled), ("testWaitUntilTimesOutWhenExceedingItsTime", testWaitUntilTimesOutWhenExceedingItsTime), ("testWaitUntilNegativeMatches", testWaitUntilNegativeMatches), ("testWaitUntilDetectsStalledMainThreadActivity", testWaitUntilDetectsStalledMainThreadActivity), ("testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed", testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed), ("testWaitUntilErrorsIfDoneIsCalledMultipleTimes", testWaitUntilErrorsIfDoneIsCalledMultipleTimes), ("testWaitUntilMustBeInMainThread", testWaitUntilMustBeInMainThread), ("testToEventuallyMustBeInMainThread", testToEventuallyMustBeInMainThread), ] } let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testToEventuallyPositiveMatches() { var value = 0 deferToMainQueue { value = 1 } expect { value }.toEventually(equal(1)) deferToMainQueue { value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testToEventuallyNegativeMatches() { let value = 0 failsWithErrorMessage("expected to eventually not equal <0>, got <0>") { expect { value }.toEventuallyNot(equal(0)) } failsWithErrorMessage("expected to eventually equal <1>, got <0>") { expect { value }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually not equal <0>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventuallyNot(equal(0)) } } func testToEventuallyWithCustomDefaultTimeout() { AsyncDefaults.Timeout = 2 defer { AsyncDefaults.Timeout = 1 } var value = 0 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 1 } expect { value }.toEventually(equal(1)) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testWaitUntilPositiveMatches() { waitUntil { done in done() } waitUntil { done in deferToMainQueue { done() } } } func testWaitUntilTimesOutIfNotCalled() { failsWithErrorMessage("Waited more than 1.0 second") { waitUntil(timeout: 1) { done in return } } } func testWaitUntilTimesOutWhenExceedingItsTime() { var waiting = true failsWithErrorMessage("Waited more than 0.01 seconds") { waitUntil(timeout: 0.01) { done in dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(0.1) done() waiting = false } } } // "clear" runloop to ensure this test doesn't poison other tests repeat { NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2)) } while(waiting) } func testWaitUntilNegativeMatches() { failsWithErrorMessage("expected to equal <2>, got <1>") { waitUntil { done in NSThread.sleepForTimeInterval(0.1) expect(1).to(equal(2)) done() } } } func testWaitUntilDetectsStalledMainThreadActivity() { let msg = "-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." failsWithErrorMessage(msg) { waitUntil(timeout: 1) { done in NSThread.sleepForTimeInterval(5.0) done() } } } func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() { // Currently we are unable to catch Objective-C exceptions when built by the Swift Package Manager #if !SWIFT_PACKAGE let referenceLine = #line + 9 var msg = "Unexpected exception raised: Nested async expectations are not allowed " msg += "to avoid creating flaky tests." msg += "\n\n" msg += "The call to\n\t" msg += "expect(...).toEventually(...) at \(#file):\(referenceLine + 7)\n" msg += "triggered this exception because\n\t" msg += "waitUntil(...) at \(#file):\(referenceLine + 1)\n" msg += "is currently managing the main run loop." failsWithErrorMessage(msg) { // reference line waitUntil(timeout: 2.0) { done in var protected: Int = 0 dispatch_async(dispatch_get_main_queue()) { protected = 1 } expect(protected).toEventually(equal(1)) done() } } #endif } func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() { #if !SWIFT_PACKAGE waitUntil { done in deferToMainQueue { done() expect { done() }.to(raiseException(named: "InvalidNimbleAPIUsage")) } } #endif } func testWaitUntilMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { waitUntil { done in done() } }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } func testToEventuallyMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { expect(1).toEventually(equal(2)) }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift ================================================ import Foundation class ObjectWithLazyProperty { init() {} lazy var value: String = "hello" lazy var anotherValue: String = { return "world" }() } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift ================================================ import Foundation import XCTest // XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available // in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, // we ensure that the tests fail in Xcode if they haven't been configured properly to // be run with the open-source tools. #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) public protocol XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { get } } extension XCTestCase { override public func tearDown() { if let provider = self as? XCTestCaseProvider { provider.assertContainsTest(invocation!.selector.description) } super.tearDown() } } extension XCTestCaseProvider { private func assertContainsTest(name: String) { let contains = self.allTests.contains({ test in return test.0 == name }) XCTAssert(contains, "Test '\(name)' is missing from the allTests array") } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/utils.swift ================================================ import Foundation @testable import Nimble import XCTest func failsWithErrorMessage(messages: [String], file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) { var filePath = file var lineNumber = line let recorder = AssertionRecorder() withAssertionHandler(recorder, closure: closure) for msg in messages { var lastFailure: AssertionRecord? var foundFailureMessage = false for assertion in recorder.assertions { lastFailure = assertion if assertion.message.stringValue == msg { foundFailureMessage = true break } } if foundFailureMessage { continue } if preferOriginalSourceLocation { if let failure = lastFailure { filePath = failure.location.file lineNumber = failure.location.line } } let message: String if let lastFailure = lastFailure { message = "Got failure message: \"\(lastFailure.message.stringValue)\", but expected \"\(msg)\"" } else { message = "expected failure message, but got none" } NimbleAssertionHandler.assert(false, message: FailureMessage(stringValue: message), location: SourceLocation(file: filePath, line: lineNumber)) } } func failsWithErrorMessage(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { return failsWithErrorMessage( [message], file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure ) } func failsWithErrorMessageForNil(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { failsWithErrorMessage("\(message) (use beNil() to match nils)", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure) } #if _runtime(_ObjC) func deferToMainQueue(action: () -> Void) { dispatch_async(dispatch_get_main_queue()) { NSThread.sleepForTimeInterval(0.01) action() } } #endif public class NimbleHelper : NSObject { public class func expectFailureMessage(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessages(messages: [NSString], block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(messages.map({ String($0) }), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessageForNil(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } } extension NSDate { convenience init(dateTimeString:String) { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") let date = dateFormatter.dateFromString(dateTimeString)! self.init(timeInterval:0, sinceDate:date) } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/AllPassTest.swift ================================================ import XCTest import Nimble class AllPassTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAllPassArray", testAllPassArray), ("testAllPassMatcher", testAllPassMatcher), ("testAllPassCollectionsWithOptionalsDontWork", testAllPassCollectionsWithOptionalsDontWork), ("testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer", testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer), ("testAllPassSet", testAllPassSet), ("testAllPassWithNilAsExpectedValue", testAllPassWithNilAsExpectedValue), ] } func testAllPassArray() { expect([1,2,3,4]).to(allPass({$0 < 5})) expect([1,2,3,4]).toNot(allPass({$0 > 5})) failsWithErrorMessage( "expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass({$0 < 3})) } failsWithErrorMessage("expected to not all pass a condition") { expect([1,2,3,4]).toNot(allPass({$0 < 5})) } failsWithErrorMessage( "expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass("be something", {$0 < 3})) } failsWithErrorMessage("expected to not all be something") { expect([1,2,3,4]).toNot(allPass("be something", {$0 < 5})) } } func testAllPassMatcher() { expect([1,2,3,4]).to(allPass(beLessThan(5))) expect([1,2,3,4]).toNot(allPass(beGreaterThan(5))) failsWithErrorMessage( "expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass(beLessThan(3))) } failsWithErrorMessage("expected to not all be less than <5>") { expect([1,2,3,4]).toNot(allPass(beLessThan(5))) } } func testAllPassCollectionsWithOptionalsDontWork() { failsWithErrorMessage("expected to all be nil, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass(beNil())) } failsWithErrorMessage("expected to all pass a condition, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil})) } } func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() { expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil})) expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil})) expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1})) expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1})) expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4})) expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3})) expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3})) } func testAllPassSet() { expect(Set([1,2,3,4])).to(allPass({$0 < 5})) expect(Set([1,2,3,4])).toNot(allPass({$0 > 5})) failsWithErrorMessage("expected to not all pass a condition") { expect(Set([1,2,3,4])).toNot(allPass({$0 < 5})) } failsWithErrorMessage("expected to not all be something") { expect(Set([1,2,3,4])).toNot(allPass("be something", {$0 < 5})) } } func testAllPassWithNilAsExpectedValue() { failsWithErrorMessageForNil("expected to all pass") { expect(nil as [Int]?).to(allPass(beLessThan(5))) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class TestNull : NSNull {} class BeAKindOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(TestNull()).to(beAKindOf(NSNull)) expect(NSObject()).to(beAKindOf(NSObject)) expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be a kind of NSNull, got ") { expect(nil as NSNull?).toNot(beAKindOf(NSNull)) } failsWithErrorMessageForNil("expected to be a kind of NSString, got ") { expect(nil as NSString?).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to be a kind of NSString, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to not be a kind of NSNumber, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAKindOf(Int)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAKindOf(String)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAKindOf(TestEnum)) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift ================================================ import Foundation import XCTest import Nimble class BeAnInstanceOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(NSNull()).to(beAnInstanceOf(NSNull)) expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be an instance of NSNull, got ") { expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull)) } failsWithErrorMessageForNil("expected to be an instance of NSString, got ") { expect(nil as NSString?).to(beAnInstanceOf(NSString)) } #if _runtime(_ObjC) let numberTypeName = "__NSCFNumber" #else let numberTypeName = "NSNumber" #endif failsWithErrorMessage("expected to be an instance of NSString, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString)) } failsWithErrorMessage("expected to not be an instance of NSNumber, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAnInstanceOf(Int)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAnInstanceOf(String)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAnInstanceOf(TestEnum)) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift ================================================ import Foundation import XCTest import Nimble class BeCloseToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeCloseTo", testBeCloseTo), ("testBeCloseToWithin", testBeCloseToWithin), ("testBeCloseToWithNSNumber", testBeCloseToWithNSNumber), ("testBeCloseToWithNSDate", testBeCloseToWithNSDate), ("testBeCloseToOperator", testBeCloseToOperator), ("testBeCloseToWithinOperator", testBeCloseToWithinOperator), ("testPlusMinusOperator", testPlusMinusOperator), ("testBeCloseToOperatorWithNSDate", testBeCloseToOperatorWithNSDate), ("testBeCloseToWithinOperatorWithNSDate", testBeCloseToWithinOperatorWithNSDate), ("testPlusMinusOperatorWithNSDate", testPlusMinusOperatorWithNSDate), ("testBeCloseToArray", testBeCloseToArray), ] } func testBeCloseTo() { expect(1.2).to(beCloseTo(1.2001)) expect(1.2 as CDouble).to(beCloseTo(1.2001)) expect(1.2 as Float).to(beCloseTo(1.2001)) failsWithErrorMessage("expected to not be close to <1.2001> (within 0.0001), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001)) } } func testBeCloseToWithin() { expect(1.2).to(beCloseTo(9.300, within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSNumber() { expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10)) expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10)) expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).to(beCloseTo(NSDate(dateTimeString: "2015-08-26 11:43:05"), within: 10)) failsWithErrorMessage("expected to not be close to <2015-08-26 11:43:00.0050> (within 0.004), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).toNot(beCloseTo(expectedDate, within: 0.004)) } #endif } func testBeCloseToOperator() { expect(1.2) ≈ 1.2001 expect(1.2 as CDouble) ≈ 1.2001 failsWithErrorMessage("expected to be close to <1.2002> (within 0.0001), got <1.2>") { expect(1.2) ≈ 1.2002 } } func testBeCloseToWithinOperator() { expect(1.2) ≈ (9.300, 10) expect(1.2) == (9.300, 10) failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ (1.0, 0.1) } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == (1.0, 0.1) } } func testPlusMinusOperator() { expect(1.2) ≈ 9.300 ± 10 expect(1.2) == 9.300 ± 10 failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ 1.0 ± 0.1 } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == 1.0 ± 0.1 } } func testBeCloseToOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:00") failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.0001), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate } #endif } func testBeCloseToWithinOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (expectedDate, 0.006) } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (expectedDate, 0.006) } #endif } func testPlusMinusOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate ± 0.006 } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == expectedDate ± 0.006 } #endif } func testBeCloseToArray() { expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001] expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1)) failsWithErrorMessage("expected to be close to <[0, 1]> (each within 0.0001), got <[0, 1.1]>") { expect([0.0, 1.1]) ≈ [0.0, 1.0] } failsWithErrorMessage("expected to be close to <[0.2, 1.2]> (each within 0.1), got <[0, 1.1]>") { expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1)) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift ================================================ import Foundation import XCTest import Nimble class BeEmptyTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeEmptyPositive", testBeEmptyPositive), ("testBeEmptyNegative", testBeEmptyNegative), ] } func testBeEmptyPositive() { expect([] as [Int]).to(beEmpty()) expect([1]).toNot(beEmpty()) expect([] as [CInt]).to(beEmpty()) expect([1] as [CInt]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSDictionary() as? [Int:Int]).to(beEmpty()) expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty()) #endif expect(Dictionary()).to(beEmpty()) expect(["hi": 1]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSArray() as? [Int]).to(beEmpty()) expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty()) #endif expect(NSSet()).to(beEmpty()) expect(NSSet(array: [NSNumber(integer: 1)])).toNot(beEmpty()) expect(NSIndexSet()).to(beEmpty()) expect(NSIndexSet(index: 1)).toNot(beEmpty()) expect(NSString()).to(beEmpty()) expect(NSString(string: "hello")).toNot(beEmpty()) expect("").to(beEmpty()) expect("foo").toNot(beEmpty()) } func testBeEmptyNegative() { failsWithErrorMessageForNil("expected to be empty, got ") { expect(nil as NSString?).to(beEmpty()) } failsWithErrorMessageForNil("expected to not be empty, got ") { expect(nil as [CInt]?).toNot(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSArray()).toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got <[1]>") { expect([1]).to(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <{()}>") { expect(NSSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <{(1)}>") { expect(NSSet(object: NSNumber(int: 1))).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSIndexSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <(1)>") { expect(NSIndexSet(index: 1)).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <>") { expect("").toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got ") { expect("foo").to(beEmpty()) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThanOrEqualTo", testGreaterThanOrEqualTo), ("testGreaterThanOrEqualToOperator", testGreaterThanOrEqualToOperator), ] } func testGreaterThanOrEqualTo() { expect(10).to(beGreaterThanOrEqualTo(10)) expect(10).to(beGreaterThanOrEqualTo(2)) expect(1).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2))) #if _runtime(_ObjC) expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0))) #endif failsWithErrorMessage("expected to be greater than or equal to <2>, got <0>") { expect(0).to(beGreaterThanOrEqualTo(2)) return } failsWithErrorMessage("expected to not be greater than or equal to <1>, got <1>") { expect(1).toNot(beGreaterThanOrEqualTo(1)) return } failsWithErrorMessageForNil("expected to be greater than or equal to <-2>, got ") { expect(nil as Int?).to(beGreaterThanOrEqualTo(-2)) } failsWithErrorMessageForNil("expected to not be greater than or equal to <1>, got ") { expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1)) } } func testGreaterThanOrEqualToOperator() { expect(0) >= 0 expect(1) >= 0 expect(NSNumber(int:1)) >= 1 expect(NSNumber(int:1)) >= NSNumber(int:1) failsWithErrorMessage("expected to be greater than or equal to <2>, got <1>") { expect(1) >= 2 return } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThan", testGreaterThan), ("testGreaterThanOperator", testGreaterThanOperator), ] } func testGreaterThan() { expect(10).to(beGreaterThan(2)) expect(1).toNot(beGreaterThan(2)) #if _runtime(_ObjC) expect(NSNumber(int:3)).to(beGreaterThan(2)) #endif expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2))) failsWithErrorMessage("expected to be greater than <2>, got <0>") { expect(0).to(beGreaterThan(2)) } failsWithErrorMessage("expected to not be greater than <0>, got <1>") { expect(1).toNot(beGreaterThan(0)) } failsWithErrorMessageForNil("expected to be greater than <-2>, got ") { expect(nil as Int?).to(beGreaterThan(-2)) } failsWithErrorMessageForNil("expected to not be greater than <0>, got ") { expect(nil as Int?).toNot(beGreaterThan(0)) } } func testGreaterThanOperator() { expect(1) > 0 expect(NSNumber(int:1)) > NSNumber(int:0) #if _runtime(_ObjC) expect(NSNumber(int:1)) > 0 #endif failsWithErrorMessage("expected to be greater than <2>, got <1>") { expect(1) > 2 return } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift ================================================ import Foundation import XCTest import Nimble class BeIdenticalToObjectTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testFailsOnNils", testFailsOnNils), ("testOperators", testOperators), ] } private class BeIdenticalToObjectTester {} private let testObjectA = BeIdenticalToObjectTester() private let testObjectB = BeIdenticalToObjectTester() func testBeIdenticalToPositive() { expect(self.testObjectA).to(beIdenticalTo(testObjectA)) } func testBeIdenticalToNegative() { expect(self.testObjectA).toNot(beIdenticalTo(testObjectB)) } func testBeIdenticalToPositiveMessage() { let message = String(NSString(format: "expected to be identical to <%p>, got <%p>", unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).to(beIdenticalTo(self.testObjectB)) } } func testBeIdenticalToNegativeMessage() { let message = String(NSString(format: "expected to not be identical to <%p>, got <%p>", unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA)) } } func testFailsOnNils() { let message1 = String(NSString(format: "expected to be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message1) { expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA)) } let message2 = String(NSString(format: "expected to not be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message2) { expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA)) } } func testOperators() { expect(self.testObjectA) === testObjectA expect(self.testObjectA) !== testObjectB } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift ================================================ import Foundation import XCTest @testable import Nimble class BeIdenticalToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testOperators", testOperators), ("testBeAlias", testBeAlias) ] } func testBeIdenticalToPositive() { let value = NSDate() expect(value).to(beIdenticalTo(value)) } func testBeIdenticalToNegative() { expect(NSNumber(integer:1)).toNot(beIdenticalTo(NSString(string: "yo"))) expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) } func testBeIdenticalToPositiveMessage() { let num1 = NSNumber(integer:1) let num2 = NSNumber(integer:2) let message = "expected to be identical to \(identityAsString(num2)), got \(identityAsString(num1))" failsWithErrorMessage(message) { expect(num1).to(beIdenticalTo(num2)) } } func testBeIdenticalToNegativeMessage() { let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(beIdenticalTo(value2)) } } func testOperators() { let value = NSDate() expect(value) === value expect(NSNumber(integer:1)) !== NSNumber(integer:2) } func testBeAlias() { let value = NSDate() expect(value).to(be(value)) expect(NSNumber(integer:1)).toNot(be(NSString(stringLiteral: "turtles"))) #if _runtime(_ObjC) expect([1]).toNot(be([1])) #else expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) #endif let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(be(value2)) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThanOrEqualTo", testLessThanOrEqualTo), ("testLessThanOrEqualToOperator", testLessThanOrEqualToOperator), ] } func testLessThanOrEqualTo() { expect(10).to(beLessThanOrEqualTo(10)) expect(2).to(beLessThanOrEqualTo(10)) expect(2).toNot(beLessThanOrEqualTo(1)) expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10)) expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1)) #if _runtime(_ObjC) expect(2).to(beLessThanOrEqualTo(NSNumber(int:10))) expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1))) #endif failsWithErrorMessage("expected to be less than or equal to <0>, got <2>") { expect(2).to(beLessThanOrEqualTo(0)) return } failsWithErrorMessage("expected to not be less than or equal to <0>, got <0>") { expect(0).toNot(beLessThanOrEqualTo(0)) return } failsWithErrorMessageForNil("expected to be less than or equal to <2>, got ") { expect(nil as Int?).to(beLessThanOrEqualTo(2)) return } failsWithErrorMessageForNil("expected to not be less than or equal to <-2>, got ") { expect(nil as Int?).toNot(beLessThanOrEqualTo(-2)) return } } func testLessThanOrEqualToOperator() { expect(0) <= 1 expect(1) <= 1 failsWithErrorMessage("expected to be less than or equal to <1>, got <2>") { expect(2) <= 1 return } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThan", testLessThan), ("testLessThanOperator", testLessThanOperator), ] } func testLessThan() { expect(2).to(beLessThan(10)) expect(2).toNot(beLessThan(1)) #if _runtime(_ObjC) expect(NSNumber(integer:2)).to(beLessThan(10)) expect(NSNumber(integer:2)).toNot(beLessThan(1)) expect(2).to(beLessThan(NSNumber(integer:10))) expect(2).toNot(beLessThan(NSNumber(integer:1))) #endif failsWithErrorMessage("expected to be less than <0>, got <2>") { expect(2).to(beLessThan(0)) } failsWithErrorMessage("expected to not be less than <1>, got <0>") { expect(0).toNot(beLessThan(1)) } failsWithErrorMessageForNil("expected to be less than <2>, got ") { expect(nil as Int?).to(beLessThan(2)) } failsWithErrorMessageForNil("expected to not be less than <-1>, got ") { expect(nil as Int?).toNot(beLessThan(-1)) } } func testLessThanOperator() { expect(0) < 1 #if _runtime(_ObjC) expect(NSNumber(int:0)) < 1 #endif failsWithErrorMessage("expected to be less than <1>, got <2>") { expect(2) < 1 return } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift ================================================ import XCTest import Nimble enum ConvertsToBool : BooleanType, CustomStringConvertible { case TrueLike, FalseLike var boolValue : Bool { switch self { case .TrueLike: return true case .FalseLike: return false } } var description : String { switch self { case .TrueLike: return "TrueLike" case .FalseLike: return "FalseLike" } } } class BeTruthyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNonNilTypes", testShouldMatchNonNilTypes), ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchNilTypes", testShouldNotMatchNilTypes), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ("testShouldMatchBoolConvertibleTypesThatConvertToTrue", testShouldMatchBoolConvertibleTypesThatConvertToTrue), ("testShouldNotMatchBoolConvertibleTypesThatConvertToFalse", testShouldNotMatchBoolConvertibleTypesThatConvertToFalse), ] } func testShouldMatchNonNilTypes() { expect(true as Bool?).to(beTruthy()) expect(1 as Int?).to(beTruthy()) } func testShouldMatchTrue() { expect(true).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(true).toNot(beTruthy()) } } func testShouldNotMatchNilTypes() { expect(false as Bool?).toNot(beTruthy()) expect(nil as Bool?).toNot(beTruthy()) expect(nil as Int?).toNot(beTruthy()) } func testShouldNotMatchFalse() { expect(false).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(false).to(beTruthy()) } } func testShouldNotMatchNilBools() { expect(nil as Bool?).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(nil as Bool?).to(beTruthy()) } } func testShouldMatchBoolConvertibleTypesThatConvertToTrue() { expect(ConvertsToBool.TrueLike).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(ConvertsToBool.TrueLike).toNot(beTruthy()) } } func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() { expect(ConvertsToBool.FalseLike).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(ConvertsToBool.FalseLike).to(beTruthy()) } } } class BeTrueTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldMatchTrue() { expect(true).to(beTrue()) failsWithErrorMessage("expected to not be true, got ") { expect(true).toNot(beTrue()) } } func testShouldNotMatchFalse() { expect(false).toNot(beTrue()) failsWithErrorMessage("expected to be true, got ") { expect(false).to(beTrue()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to not be true, got ") { expect(nil as Bool?).toNot(beTrue()) } failsWithErrorMessageForNil("expected to be true, got ") { expect(nil as Bool?).to(beTrue()) } } } class BeFalsyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNilTypes", testShouldMatchNilTypes), ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldNotMatchNonNilTypes", testShouldNotMatchNonNilTypes), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldMatchNilBools", testShouldMatchNilBools), ] } func testShouldMatchNilTypes() { expect(false as Bool?).to(beFalsy()) expect(nil as Bool?).to(beFalsy()) expect(nil as Int?).to(beFalsy()) } func testShouldNotMatchTrue() { expect(true).toNot(beFalsy()) failsWithErrorMessage("expected to be falsy, got ") { expect(true).to(beFalsy()) } } func testShouldNotMatchNonNilTypes() { expect(true as Bool?).toNot(beFalsy()) expect(1 as Int?).toNot(beFalsy()) } func testShouldMatchFalse() { expect(false).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(false).toNot(beFalsy()) } } func testShouldMatchNilBools() { expect(nil as Bool?).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(nil as Bool?).toNot(beFalsy()) } } } class BeFalseTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldNotMatchTrue() { expect(true).toNot(beFalse()) failsWithErrorMessage("expected to be false, got ") { expect(true).to(beFalse()) } } func testShouldMatchFalse() { expect(false).to(beFalse()) failsWithErrorMessage("expected to not be false, got ") { expect(false).toNot(beFalse()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to be false, got ") { expect(nil as Bool?).to(beFalse()) } failsWithErrorMessageForNil("expected to not be false, got ") { expect(nil as Bool?).toNot(beFalse()) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeNilTest.swift ================================================ import XCTest import Nimble class BeNilTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeNil", testBeNil), ] } func producesNil() -> Array? { return nil } func testBeNil() { expect(nil as Int?).to(beNil()) expect(1 as Int?).toNot(beNil()) expect(self.producesNil()).to(beNil()) failsWithErrorMessage("expected to not be nil, got ") { expect(nil as Int?).toNot(beNil()) } failsWithErrorMessage("expected to be nil, got <1>") { expect(1 as Int?).to(beNil()) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift ================================================ import XCTest import Nimble class BeVoidTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeVoid", testBeVoid), ] } func testBeVoid() { expect(()).to(beVoid()) expect(() as ()?).to(beVoid()) expect(nil as ()?).toNot(beVoid()) expect(()) == () expect(() as ()?) == () expect(nil as ()?) != () failsWithErrorMessage("expected to not be void, got <()>") { expect(()).toNot(beVoid()) } failsWithErrorMessage("expected to not be void, got <()>") { expect(() as ()?).toNot(beVoid()) } failsWithErrorMessage("expected to be void, got ") { expect(nil as ()?).to(beVoid()) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift ================================================ import Foundation import XCTest import Nimble class BeginWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testNegativeMatches", testNegativeMatches), ] } func testPositiveMatches() { expect([1, 2, 3]).to(beginWith(1)) expect([1, 2, 3]).toNot(beginWith(2)) expect("foobar").to(beginWith("foo")) expect("foobar").toNot(beginWith("oo")) expect(NSString(string: "foobar").description).to(beginWith("foo")) expect(NSString(string: "foobar").description).toNot(beginWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(beginWith("a")) expect(NSArray(array: ["a", "b"])).toNot(beginWith("b")) #endif } func testNegativeMatches() { failsWithErrorMessageForNil("expected to begin with , got ") { expect(nil as NSArray?).to(beginWith(NSString(string: "b"))) } failsWithErrorMessageForNil("expected to not begin with , got ") { expect(nil as NSArray?).toNot(beginWith(NSString(string: "b"))) } failsWithErrorMessage("expected to begin with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(beginWith(2)) } failsWithErrorMessage("expected to not begin with <1>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(beginWith(1)) } failsWithErrorMessage("expected to begin with , got ") { expect("batman").to(beginWith("atm")) } failsWithErrorMessage("expected to not begin with , got ") { expect("batman").toNot(beginWith("bat")) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ContainTest.swift ================================================ import Foundation import XCTest import Nimble class ContainTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testContain", testContain), ("testContainSubstring", testContainSubstring), ("testContainObjCSubstring", testContainObjCSubstring), ("testVariadicArguments", testVariadicArguments), ("testCollectionArguments", testCollectionArguments), ] } func testContain() { expect([1, 2, 3]).to(contain(1)) expect([1, 2, 3] as [CInt]).to(contain(1 as CInt)) expect([1, 2, 3] as Array).to(contain(1 as CInt)) expect(["foo", "bar", "baz"]).to(contain("baz")) expect([1, 2, 3]).toNot(contain(4)) expect(["foo", "bar", "baz"]).toNot(contain("ba")) #if _runtime(_ObjC) expect(NSArray(array: ["a"])).to(contain(NSString(string: "a"))) expect(NSArray(array: ["a"])).toNot(contain(NSString(string:"b"))) expect(NSArray(object: 1) as NSArray?).to(contain(1)) #endif failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("b")) } failsWithErrorMessageForNil("expected to contain , got ") { expect(nil as [String]?).to(contain("bar")) } failsWithErrorMessageForNil("expected to not contain , got ") { expect(nil as [String]?).toNot(contain("b")) } } func testContainSubstring() { expect("foo").to(contain("o")) expect("foo").to(contain("oo")) expect("foo").toNot(contain("z")) expect("foo").toNot(contain("zz")) failsWithErrorMessage("expected to contain , got ") { expect("foo").to(contain("bar")) } failsWithErrorMessage("expected to not contain , got ") { expect("foo").toNot(contain("oo")) } } func testContainObjCSubstring() { let str = NSString(string: "foo") expect(str).to(contain(NSString(string: "o"))) expect(str).to(contain(NSString(string: "oo"))) expect(str).toNot(contain(NSString(string: "z"))) expect(str).toNot(contain(NSString(string: "zz"))) } func testVariadicArguments() { expect([1, 2, 3]).to(contain(1, 2)) expect([1, 2, 3]).toNot(contain(1, 4)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("a", "bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("bar", "b")) } } func testCollectionArguments() { expect([1, 2, 3]).to(contain([1, 2])) expect([1, 2, 3]).toNot(contain([1, 4])) let collection = Array(1...10) let slice = Array(collection[3...5]) expect(collection).to(contain(slice)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain(["a", "bar"])) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain(["bar", "b"])) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EndWithTest.swift ================================================ import Foundation import XCTest import Nimble class EndWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEndWithPositives", testEndWithPositives), ("testEndWithNegatives", testEndWithNegatives), ] } func testEndWithPositives() { expect([1, 2, 3]).to(endWith(3)) expect([1, 2, 3]).toNot(endWith(2)) expect("foobar").to(endWith("bar")) expect("foobar").toNot(endWith("oo")) expect(NSString(string: "foobar").description).to(endWith("bar")) expect(NSString(string: "foobar").description).toNot(endWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(endWith("b")) expect(NSArray(array: ["a", "b"])).toNot(endWith("a")) #endif } func testEndWithNegatives() { failsWithErrorMessageForNil("expected to end with <2>, got ") { expect(nil as [Int]?).to(endWith(2)) } failsWithErrorMessageForNil("expected to not end with <2>, got ") { expect(nil as [Int]?).toNot(endWith(2)) } failsWithErrorMessage("expected to end with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(endWith(2)) } failsWithErrorMessage("expected to not end with <3>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(endWith(3)) } failsWithErrorMessage("expected to end with , got ") { expect("batman").to(endWith("atm")) } failsWithErrorMessage("expected to not end with , got ") { expect("batman").toNot(endWith("man")) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EqualTest.swift ================================================ import Foundation import XCTest import Nimble class EqualTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEquality", testEquality), ("testArrayEquality", testArrayEquality), ("testSetEquality", testSetEquality), ("testDoesNotMatchNils", testDoesNotMatchNils), ("testDictionaryEquality", testDictionaryEquality), ("testDataEquality", testDataEquality), ("testNSObjectEquality", testNSObjectEquality), ("testOperatorEquality", testOperatorEquality), ("testOperatorEqualityWithArrays", testOperatorEqualityWithArrays), ("testOperatorEqualityWithDictionaries", testOperatorEqualityWithDictionaries), ("testOptionalEquality", testOptionalEquality), ("testArrayOfOptionalsEquality", testArrayOfOptionalsEquality), ("testDictionariesWithDifferentSequences", testDictionariesWithDifferentSequences), ] } func testEquality() { expect(1 as CInt).to(equal(1 as CInt)) expect(1 as CInt).to(equal(1)) expect(1).to(equal(1)) expect("hello").to(equal("hello")) expect("hello").toNot(equal("world")) expect { 1 }.to(equal(1)) failsWithErrorMessage("expected to equal , got ") { expect("hello").to(equal("world")) } failsWithErrorMessage("expected to not equal , got ") { expect("hello").toNot(equal("hello")) } } func testArrayEquality() { expect([1, 2, 3]).to(equal([1, 2, 3])) expect([1, 2, 3]).toNot(equal([1, 2])) expect([1, 2, 3]).toNot(equal([1, 2, 4])) let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] expect(array1).to(equal(array2)) expect(array1).to(equal([1, 2, 3])) expect(array1).toNot(equal([1, 2] as Array)) #if _runtime(_ObjC) expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3]))) #endif failsWithErrorMessage("expected to equal <[1, 2]>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(equal([1, 2])) } } func testSetEquality() { expect(Set([1, 2])).to(equal(Set([1, 2]))) expect(Set()).to(equal(Set())) expect(Set()) == Set() expect(Set([1, 2])) != Set() failsWithErrorMessageForNil("expected to equal <[1, 2]>, got ") { expect(nil as Set?).to(equal(Set([1, 2]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>") { expect(Set([2, 3])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>") { expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])) == Set([1, 2, 3]) } failsWithErrorMessage("expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>") { expect(Set([1, 2, 3])) != Set([1, 2, 3]) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as String?).to(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect("foo").toNot(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect(nil as String?).toNot(equal("bar")) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int]?).to(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1]>, got ") { expect(nil as [Int]?).toNot(equal([1])) } failsWithErrorMessageForNil("expected to not equal , got <[1]>") { expect([1]).toNot(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1: 1]>, got ") { expect(nil as [Int: Int]?).toNot(equal([1: 1])) } failsWithErrorMessageForNil("expected to not equal , got <[1: 1]>") { expect([1: 1]).toNot(equal(nil as [Int: Int]?)) } } func testDictionaryEquality() { expect(["foo": "bar"]).to(equal(["foo": "bar"])) expect(["foo": "bar"]).toNot(equal(["foo": "baz"])) let actual = ["foo": "bar"] let expected = ["foo": "bar"] let unexpected = ["foo": "baz"] expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if _runtime(_ObjC) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(["foo": "bar"])) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(expected)) #endif } func testDataEquality() { let actual = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let expected = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let unexpected = "foobarfoo".dataUsingEncoding(NSUTF8StringEncoding) expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11) let expectedErrorMessage = "expected to equal >, got >" #else let expectedErrorMessage = "expected to equal >," + " got >" #endif failsWithErrorMessage(expectedErrorMessage) { expect(actual).to(equal(unexpected)) } } func testNSObjectEquality() { expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1))) expect(NSNumber(integer:1)) == NSNumber(integer:1) expect(NSNumber(integer:1)) != NSNumber(integer:2) expect { NSNumber(integer:1) }.to(equal(1)) } func testOperatorEquality() { expect("foo") == "foo" expect("foo") != "bar" failsWithErrorMessage("expected to equal , got ") { expect("hello") == "world" return } failsWithErrorMessage("expected to not equal , got ") { expect("hello") != "hello" return } } func testOperatorEqualityWithArrays() { let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] let array3: Array = [1, 2] expect(array1) == array2 expect(array1) != array3 } func testOperatorEqualityWithDictionaries() { let dict1 = ["foo": "bar"] let dict2 = ["foo": "bar"] let dict3 = ["foo": "baz"] expect(dict1) == dict2 expect(dict1) != dict3 } func testOptionalEquality() { expect(1 as CInt?).to(equal(1)) expect(1 as CInt?).to(equal(1 as CInt?)) expect(1).toNot(equal(nil)) } func testArrayOfOptionalsEquality() { let array1: Array = [1, nil, 3] let array2: Array = [nil, 2, 3] let array3: Array = [1, nil, 3] expect(array1).toNot(equal(array2)) expect(array1).to(equal(array3)) expect(array2).toNot(equal(array3)) let allNils1: Array = [nil, nil, nil, nil] let allNils2: Array = [nil, nil, nil, nil] let notReallyAllNils: Array = [nil, nil, nil, "turtles"] expect(allNils1).to(equal(allNils2)) expect(allNils1).toNot(equal(notReallyAllNils)) let noNils1: Array = [1, 2, 3, 4, 5] let noNils2: Array = [1, 3, 5, 7, 9] expect(noNils1).toNot(equal(noNils2)) failsWithErrorMessage("expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>") { let arrayOfOptionalInts: Array = [nil, 2] let anotherArrayOfOptionalInts: Array = [1, nil] expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts)) return } } func testDictionariesWithDifferentSequences() { // see: https://github.com/Quick/Nimble/issues/61 // these dictionaries generate different orderings of sequences. let result = ["how":1, "think":1, "didnt":2, "because":1, "interesting":1, "always":1, "right":1, "such":1, "to":3, "say":1, "cool":1, "you":1, "weather":3, "be":1, "went":1, "was":2, "sometimes":1, "and":3, "mind":1, "rain":1, "whole":1, "everything":1, "weather.":1, "down":1, "kind":1, "mood.":1, "it":2, "everyday":1, "might":1, "more":1, "have":2, "person":1, "could":1, "tenth":2, "night":1, "write":1, "Youd":1, "affects":1, "of":3, "Who":1, "us":1, "an":1, "I":4, "my":1, "much":2, "wrong.":1, "peacefully.":1, "amazing":3, "would":4, "just":1, "grade.":1, "Its":2, "The":2, "had":1, "that":1, "the":5, "best":1, "but":1, "essay":1, "for":1, "summer":2, "your":1, "grade":1, "vary":1, "pretty":1, "at":1, "rain.":1, "about":1, "allow":1, "thought":1, "in":1, "sleep":1, "a":1, "hot":1, "really":1, "beach":1, "life.":1, "we":1, "although":1] let storyCount = ["The":2, "summer":2, "of":3, "tenth":2, "grade":1, "was":2, "the":5, "best":1, "my":1, "life.":1, "I":4, "went":1, "to":3, "beach":1, "everyday":1, "and":3, "we":1, "had":1, "amazing":3, "weather.":1, "weather":3, "didnt":2, "really":1, "vary":1, "much":2, "always":1, "pretty":1, "hot":1, "although":1, "sometimes":1, "at":1, "night":1, "it":2, "would":4, "rain.":1, "mind":1, "rain":1, "because":1, "cool":1, "everything":1, "down":1, "allow":1, "us":1, "sleep":1, "peacefully.":1, "Its":2, "how":1, "affects":1, "your":1, "mood.":1, "Who":1, "have":2, "thought":1, "that":1, "could":1, "write":1, "a":1, "whole":1, "essay":1, "just":1, "about":1, "in":1, "grade.":1, "kind":1, "right":1, "Youd":1, "think":1, "for":1, "such":1, "an":1, "interesting":1, "person":1, "might":1, "more":1, "say":1, "but":1, "you":1, "be":1, "wrong.":1] expect(result).to(equal(storyCount)) } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift ================================================ import XCTest import Nimble class HaveCountTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testHaveCountForArray", testHaveCountForArray), ("testHaveCountForDictionary", testHaveCountForDictionary), ("testHaveCountForSet", testHaveCountForSet), ] } func testHaveCountForArray() { expect([1, 2, 3]).to(haveCount(3)) expect([1, 2, 3]).notTo(haveCount(1)) failsWithErrorMessage("expected to have [1, 2, 3] with count 1, got 3") { expect([1, 2, 3]).to(haveCount(1)) } failsWithErrorMessage("expected to not have [1, 2, 3] with count 3, got 3") { expect([1, 2, 3]).notTo(haveCount(3)) } } func testHaveCountForDictionary() { let dictionary = ["1":1, "2":2, "3":3] expect(dictionary).to(haveCount(3)) expect(dictionary).notTo(haveCount(1)) failsWithErrorMessage("expected to have \(stringify(dictionary)) with count 1, got 3") { expect(dictionary).to(haveCount(1)) } failsWithErrorMessage("expected to not have \(stringify(dictionary)) with count 3, got 3") { expect(dictionary).notTo(haveCount(3)) } } func testHaveCountForSet() { let set = Set([1, 2, 3]) expect(set).to(haveCount(3)) expect(set).notTo(haveCount(1)) failsWithErrorMessage("expected to have \(stringify(set)) with count 1, got 3") { expect(set).to(haveCount(1)) } failsWithErrorMessage("expected to not have \(stringify(set)) with count 3, got 3") { expect(set).notTo(haveCount(3)) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift ================================================ import Foundation import XCTest import Nimble class MatchErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchErrorPositive", testMatchErrorPositive), ("testMatchErrorNegative", testMatchErrorNegative), ("testMatchNSErrorPositive", testMatchNSErrorPositive), ("testMatchNSErrorNegative", testMatchNSErrorNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testDoesNotMatchNils", testDoesNotMatchNils), ] } func testMatchErrorPositive() { expect(Error.Laugh).to(matchError(Error.Laugh)) expect(Error.Laugh).to(matchError(Error.self)) expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 1))) expect(Error.Laugh as ErrorType).to(matchError(Error.Laugh)) } func testMatchErrorNegative() { expect(Error.Laugh).toNot(matchError(Error.Cry)) expect(Error.Laugh as ErrorType).toNot(matchError(Error.Cry)) } func testMatchNSErrorPositive() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 0, userInfo: nil) expect(error1).to(matchError(error2)) } func testMatchNSErrorNegative() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).toNot(matchError(error2)) } func testMatchPositiveMessage() { failsWithErrorMessage("expected to match error , got ") { expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 2))) } failsWithErrorMessage("expected to match error , got ") { expect(Error.Laugh).to(matchError(Error.Cry)) } failsWithErrorMessage("expected to match error , got ") { expect(CustomDebugStringConvertibleError.A).to(matchError(CustomDebugStringConvertibleError.B)) } failsWithErrorMessage("expected to match error , got ") { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).to(matchError(error2)) } } func testMatchNegativeMessage() { failsWithErrorMessage("expected to not match error , got ") { expect(Error.Laugh).toNot(matchError(Error.Laugh)) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to match error , got no error") { expect(nil as ErrorType?).to(matchError(Error.Laugh)) } failsWithErrorMessageForNil("expected to not match error , got no error") { expect(nil as ErrorType?).toNot(matchError(Error.Laugh)) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class MatchTest:XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchPositive", testMatchPositive), ("testMatchNegative", testMatchNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testMatchNils", testMatchNils), ] } func testMatchPositive() { expect("11:14").to(match("\\d{2}:\\d{2}")) } func testMatchNegative() { expect("hello").toNot(match("\\d{2}:\\d{2}")) } func testMatchPositiveMessage() { let message = "expected to match <\\d{2}:\\d{2}>, got " failsWithErrorMessage(message) { expect("hello").to(match("\\d{2}:\\d{2}")) } } func testMatchNegativeMessage() { let message = "expected to not match <\\d{2}:\\d{2}>, got <11:14>" failsWithErrorMessage(message) { expect("11:14").toNot(match("\\d{2}:\\d{2}")) } } func testMatchNils() { failsWithErrorMessageForNil("expected to match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).to(match("\\d{2}:\\d{2}")) } failsWithErrorMessageForNil("expected to not match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).toNot(match("\\d{2}:\\d{2}")) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift ================================================ import XCTest import Nimble import Foundation class PostNotificationTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPassesWhenNoNotificationsArePosted", testPassesWhenNoNotificationsArePosted), ("testPassesWhenExpectedNotificationIsPosted", testPassesWhenExpectedNotificationIsPosted), ("testPassesWhenAllExpectedNotificationsArePosted", testPassesWhenAllExpectedNotificationsArePosted), ("testFailsWhenNoNotificationsArePosted", testFailsWhenNoNotificationsArePosted), ("testFailsWhenNotificationWithWrongNameIsPosted", testFailsWhenNotificationWithWrongNameIsPosted), ("testFailsWhenNotificationWithWrongObjectIsPosted", testFailsWhenNotificationWithWrongObjectIsPosted), ("testPassesWhenExpectedNotificationEventuallyIsPosted", testPassesWhenExpectedNotificationEventuallyIsPosted), ] } var notificationCenter: NSNotificationCenter! #if _runtime(_ObjC) override func setUp() { _setUp() super.setUp() } #else func setUp() { _setUp() } #endif func _setUp() { notificationCenter = NSNotificationCenter() } func testPassesWhenNoNotificationsArePosted() { expect { // no notifications here! return nil }.to(postNotifications(beEmpty(), fromNotificationCenter: notificationCenter)) } func testPassesWhenExpectedNotificationIsPosted() { let testNotification = NSNotification(name: "Foo", object: nil) expect { self.notificationCenter.postNotification(testNotification) }.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) } func testPassesWhenAllExpectedNotificationsArePosted() { let foo = NSNumber(int: 1) let bar = NSNumber(int: 2) let n1 = NSNotification(name: "Foo", object: foo) let n2 = NSNotification(name: "Bar", object: bar) expect { self.notificationCenter.postNotification(n1) self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1, n2]), fromNotificationCenter: notificationCenter)) } func testFailsWhenNoNotificationsArePosted() { let testNotification = NSNotification(name: "Foo", object: nil) failsWithErrorMessage("expected to equal <[\(testNotification)]>, got no notifications") { expect { // no notifications here! return nil }.to(postNotifications(equal([testNotification]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongNameIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name + "a", object: nil) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongObjectIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name, object: NSObject()) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testPassesWhenExpectedNotificationEventuallyIsPosted() { #if _runtime(_ObjC) let testNotification = NSNotification(name: "Foo", object: nil) expect { deferToMainQueue { self.notificationCenter.postNotification(testNotification) } return nil }.toEventually(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) #else print("\(#function) is missing because toEventually is not implement on this platform") #endif } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) && !SWIFT_PACKAGE class RaisesExceptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testNegativeMatchesDoNotCallClosureWithoutException", testNegativeMatchesDoNotCallClosureWithoutException), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } var anException = NSException(name: "laugh", reason: "Lulz", userInfo: ["key": "value"]) func testPositiveMatches() { expect { self.anException.raise() }.to(raiseException()) expect { self.anException.raise() }.to(raiseException(named: "laugh")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } func testPositiveMatchesWithClosures() { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("laugh")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).toNot(beginWith("df")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) } func testNegativeMatches() { failsWithErrorMessage("expected to raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "foo")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "bar")) } failsWithErrorMessage( "expected to raise exception with name with reason with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["k": "v"])) } failsWithErrorMessage("expected to raise any exception, got no exception") { expect { self.anException }.to(raiseException()) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } failsWithErrorMessage("expected to raise exception with name with reason , got no exception") { expect { self.anException }.to(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "bar", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh")) } failsWithErrorMessage("expected to not raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name with reason with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } } func testNegativeMatchesDoNotCallClosureWithoutException() { failsWithErrorMessage("expected to raise exception that satisfies block, got no exception") { expect { self.anException }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "ha") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason with userInfo <{}> that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } } func testNegativeMatchesWithClosure() { failsWithErrorMessage("expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } let innerFailureMessage = "expected to begin with , got " failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "wrong") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } } } #endif ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift ================================================ import XCTest import Nimble class SatisfyAnyOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testSatisfyAnyOf", testSatisfyAnyOf), ("testOperatorOr", testOperatorOr), ] } func testSatisfyAnyOf() { expect(2).to(satisfyAnyOf(equal(2), equal(3))) #if _runtime(_ObjC) expect(2).toNot(satisfyAnyOf(equal(3), equal("turtles"))) #endif expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3))) expect("turtle").toNot(satisfyAnyOf(contain("a"), endWith("magic"))) expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) expect(false).to(satisfyAnyOf(beTrue(), beFalse())) expect(true).to(satisfyAnyOf(beTruthy(), beFalsy())) failsWithErrorMessage( "expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2") { expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5))) } failsWithErrorMessage( "expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]") { expect([5,6,7]).to(satisfyAnyOf(allPass("be less than 4", {$0 < 4}), equal([1,2,3,4]))) } failsWithErrorMessage( "expected to match one of: {be true}, got false") { expect(false).to(satisfyAnyOf(beTrue())) } failsWithErrorMessage( "expected to not match one of: {be less than <10.5>}, or {be greater than <100.75>}, or {be close to <50.1> (within 0.0001)}, got 50.10001") { expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) } } func testOperatorOr() { expect(2).to(equal(2) || equal(3)) #if _runtime(_ObjC) expect(2).toNot(equal(3) || equal("turtles")) #endif expect("turtle").toNot(contain("a") || endWith("magic")) expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75)) expect(false).to(beTrue() || beFalse()) expect(true).to(beTruthy() || beFalsy()) } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift ================================================ import XCTest import Nimble enum Error : ErrorType { case Laugh case Cry } enum EquatableError : ErrorType { case Parameterized(x: Int) } extension EquatableError : Equatable { } func ==(lhs: EquatableError, rhs: EquatableError) -> Bool { switch (lhs, rhs) { case (.Parameterized(let l), .Parameterized(let r)): return l == r } } enum CustomDebugStringConvertibleError : ErrorType { case A case B } extension CustomDebugStringConvertibleError : CustomDebugStringConvertible { var debugDescription : String { return "code=\(_code)" } } class ThrowErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testPositiveNegatedMatches", testPositiveNegatedMatches), ("testNegativeNegatedMatches", testNegativeNegatedMatches), ("testNegativeMatchesDoNotCallClosureWithoutError", testNegativeMatchesDoNotCallClosureWithoutError), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } func testPositiveMatches() { expect { throw Error.Laugh }.to(throwError()) expect { throw Error.Laugh }.to(throwError(Error.Laugh)) expect { throw Error.Laugh }.to(throwError(errorType: Error.self)) expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1))) } func testPositiveMatchesWithClosures() { // Generic typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in guard case EquatableError.Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Explicit typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over errorType argument expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).to(beginWith("Nim")) }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).toNot(beginWith("as")) }) } func testNegativeMatches() { // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Different case failsWithErrorMessage("expected to throw error , got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry)) } // Different case with closure failsWithErrorMessage("expected to throw error that satisfies block, got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return }) } // Different case, implementing CustomDebugStringConvertible failsWithErrorMessage("expected to throw error , got ") { expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B)) } } func testPositiveNegatedMatches() { // No error at all expect { return }.toNot(throwError()) // Different case expect { throw Error.Laugh }.toNot(throwError(Error.Cry)) } func testNegativeNegatedMatches() { // No error at all failsWithErrorMessage("expected to not throw any error, got ") { expect { throw Error.Laugh }.toNot(throwError()) } // Different error failsWithErrorMessage("expected to not throw error , got ") { expect { throw Error.Laugh }.toNot(throwError(Error.Laugh)) } } func testNegativeMatchesDoNotCallClosureWithoutError() { failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError { error in fail() }) } failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError(Error.Laugh) { error in fail() }) } } func testNegativeMatchesWithClosure() { #if SWIFT_PACKAGE let moduleName = "Nimbletest" #else let moduleName = "NimbleTests" #endif let innerFailureMessage = "expected to equal , got <\(moduleName).Error>" let closure = { (error: Error) in print("** In closure! With domain \(error._domain)") expect(error._domain).to(equal("foo")) } failsWithErrorMessage([innerFailureMessage, "expected to throw error from type that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(closure: closure)) } failsWithErrorMessage([innerFailureMessage, "expected to throw error that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure)) } } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/SynchronousTests.swift ================================================ import Foundation import XCTest import Nimble class SynchronousTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testFailAlwaysFails", testFailAlwaysFails), ("testUnexpectedErrorsThrownFails", testUnexpectedErrorsThrownFails), ("testToMatchesIfMatcherReturnsTrue", testToMatchesIfMatcherReturnsTrue), ("testToProvidesActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToMatchAgainstLazyProperties", testToMatchAgainstLazyProperties), ("testToNotMatchesIfMatcherReturnsTrue", testToNotMatchesIfMatcherReturnsTrue), ("testToNotProvidesActualValueExpression", testToNotProvidesActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpression", testToNotProvidesAMemoizedActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToNotNegativeMatches", testToNotNegativeMatches), ("testNotToMatchesLikeToNot", testNotToMatchesLikeToNot), ] } let errorToThrow = NSError(domain: NSCocoaErrorDomain, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testFailAlwaysFails() { failsWithErrorMessage("My error message") { fail("My error message") } failsWithErrorMessage("fail() always fails") { fail() } } func testUnexpectedErrorsThrownFails() { #if _runtime(_ObjC) // This test triggers a weird segfault on Linux currently failsWithErrorMessage("expected to equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.to(equal(1)) } failsWithErrorMessage("expected to not equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toNot(equal(1)) } #endif } func testToMatchesIfMatcherReturnsTrue() { expect(1).to(MatcherFunc { expr, failure in true }) expect{1}.to(MatcherFunc { expr, failure in true }) } func testToProvidesActualValueExpression() { var value: Int? expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true }) expect(value).to(equal(1)) } func testToProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToMatchAgainstLazyProperties() { expect(ObjectWithLazyProperty().value).to(equal("hello")) expect(ObjectWithLazyProperty().value).toNot(equal("world")) expect(ObjectWithLazyProperty().anotherValue).to(equal("world")) expect(ObjectWithLazyProperty().anotherValue).toNot(equal("hello")) } // repeated tests from to() for toNot() func testToNotMatchesIfMatcherReturnsTrue() { expect(1).toNot(MatcherFunc { expr, failure in false }) expect{1}.toNot(MatcherFunc { expr, failure in false }) } func testToNotProvidesActualValueExpression() { var value: Int? expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false }) expect(value).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotNegativeMatches() { failsWithErrorMessage("expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }) } } func testNotToMatchesLikeToNot() { expect(1).notTo(MatcherFunc { expr, failure in false }) } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/UserDescriptionTest.swift ================================================ import XCTest import Nimble class UserDescriptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToMatcher_CustomFailureMessage", testToMatcher_CustomFailureMessage), ("testNotToMatcher_CustomFailureMessage", testNotToMatcher_CustomFailureMessage), ("testToNotMatcher_CustomFailureMessage", testToNotMatcher_CustomFailureMessage), ("testToEventuallyMatch_CustomFailureMessage", testToEventuallyMatch_CustomFailureMessage), ("testToEventuallyNotMatch_CustomFailureMessage", testToEventuallyNotMatch_CustomFailureMessage), ("testToNotEventuallyMatch_CustomFailureMessage", testToNotEventuallyMatch_CustomFailureMessage), ] } func testToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to match, got <1>") { expect(1).to(MatcherFunc { expr, failure in false }, description: "These aren't equal!") } } func testNotToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).notTo(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToNotMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These aren't eventually equal!\n" + "expected to eventually equal <1>, got <0>") { expect { 0 }.toEventually(equal(1), description: "These aren't eventually equal!") } #endif } func testToEventuallyNotMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } func testToNotEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } } ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h ================================================ @import Nimble; #import "NimbleTests-Swift.h" // Use this when you want to verify the failure message for when an expectation fails #define expectFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; #define expectFailureMessages(MSGS, BLOCK) \ [NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__]; // Use this when you want to verify the failure message with the nil message postfixed // to it: " (use beNil() to match nils)" #define expectNilFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCAllPassTest : XCTestCase @end @implementation ObjCAllPassTest - (void)testPositiveMatches { expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5))); } - (void)testNegativeMatches { expectFailureMessage(@"expected to all be less than <3>, but failed first at element" " <3> in <[1, 2, 3, 4]>", ^{ expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).to(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).toNot(allPass(beLessThan(@5))); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCAsyncTest : XCTestCase @end @implementation ObjCAsyncTest - (void)testAsync { __block id obj = @1; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = nil; }); expect(obj).toEventually(beNil()); } - (void)testAsyncWithCustomTimeout { __block id obj = nil; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = @1; }); expect(obj).withTimeout(5).toEventuallyNot(beNil()); } - (void)testAsyncCallback { waitUntil(^(void (^done)(void)){ done(); }); expectFailureMessage(@"Waited more than 1.0 second", ^{ waitUntil(^(void (^done)(void)){ /* ... */ }); }); expectFailureMessage(@"Waited more than 0.01 seconds", ^{ waitUntilTimeout(0.01, ^(void (^done)(void)){ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [NSThread sleepForTimeInterval:0.1]; done(); }); }); }); expectFailureMessage(@"expected to equal , got ", ^{ waitUntil(^(void (^done)(void)){ [NSThread sleepForTimeInterval:0.1]; expect(@"hello").to(equal(@"goodbye")); done(); }); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeAnInstanceOfTest : XCTestCase @end @implementation ObjCBeAnInstanceOfTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beAnInstanceOf([NSNull class])); expect(@1).toNot(beAnInstanceOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be an instance of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAnInstanceOf([NSNull class])); }); expectFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect([NSNull null]).toNot(beAnInstanceOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be an instance of NSNull, got ", ^{ expect(nil).to(beAnInstanceOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect(nil).toNot(beAnInstanceOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeCloseToTest : XCTestCase @end @implementation ObjCBeCloseToTest - (void)testPositiveMatches { expect(@1.2).to(beCloseTo(@1.2001)); expect(@1.2).to(beCloseTo(@2).within(10)); expect(@2).toNot(beCloseTo(@1)); expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be close to <0> (within 0.001), got <1>", ^{ expect(@1).to(beCloseTo(@0)); }); expectFailureMessage(@"expected to not be close to <0> (within 0.001), got <0.0001>", ^{ expect(@(0.0001)).toNot(beCloseTo(@0)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be close to <0> (within 0.001), got ", ^{ expect(nil).to(beCloseTo(@0)); }); expectNilFailureMessage(@"expected to not be close to <0> (within 0.001), got ", ^{ expect(nil).toNot(beCloseTo(@0)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeEmptyTest : XCTestCase @end @implementation ObjCBeEmptyTest - (void)testPositiveMatches { expect(@[]).to(beEmpty()); expect(@"").to(beEmpty()); expect(@{}).to(beEmpty()); expect([NSSet set]).to(beEmpty()); expect([NSIndexSet indexSet]).to(beEmpty()); expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty()); expect(@[@1, @2]).toNot(beEmpty()); expect(@"a").toNot(beEmpty()); expect(@{@"key": @"value"}).toNot(beEmpty()); expect([NSSet setWithObject:@1]).toNot(beEmpty()); expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; expect(table).toNot(beEmpty()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be empty, got ", ^{ expect(@"foo").to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect(@[@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{key = value;}>", ^{ expect(@{@"key": @"value"}).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).to(beEmpty()); }); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; expectFailureMessage(([NSString stringWithFormat:@"expected to be empty, got <%@>", tableString]), ^{ expect(table).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <>", ^{ expect(@"").toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <()>", ^{ expect(@[]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{}>", ^{ expect(@{}).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got ", ^{ expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty()); }); } - (void)testItDoesNotMatchNil { expectNilFailureMessage(@"expected to be empty, got ", ^{ expect(nil).to(beEmpty()); }); expectNilFailureMessage(@"expected to not be empty, got ", ^{ expect(nil).toNot(beEmpty()); }); } - (void)testItReportsTypesItMatchesAgainst { expectFailureMessage(@"expected to be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).toNot(beEmpty()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalseTest : XCTestCase @end @implementation ObjCBeFalseTest - (void)testPositiveMatches { expect(@NO).to(beFalse()); expect(@YES).toNot(beFalse()); } - (void)testNegativeMatches { expectNilFailureMessage(@"expected to be false, got ", ^{ expect(nil).to(beFalse()); }); expectNilFailureMessage(@"expected to not be false, got ", ^{ expect(nil).toNot(beFalse()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalsyTest : XCTestCase @end @implementation ObjCBeFalsyTest - (void)testPositiveMatches { expect(@NO).to(beFalsy()); expect(@YES).toNot(beFalsy()); expect(nil).to(beFalsy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to not be falsy, got ", ^{ expect(nil).toNot(beFalsy()); }); expectFailureMessage(@"expected to be falsy, got <1>", ^{ expect(@1).to(beFalsy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanOrEqualToTest : XCTestCase @end @implementation ObjCBeGreaterThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beGreaterThanOrEqualTo(@2)); expect(@2).toNot(beGreaterThanOrEqualTo(@3)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than or equal to <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThanOrEqualTo(@0)); }); expectFailureMessage(@"expected to not be greater than or equal to <1>, got <2>", ^{ expect(@2).toNot(beGreaterThanOrEqualTo(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than or equal to <-1>, got ", ^{ expect(nil).to(beGreaterThanOrEqualTo(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than or equal to <1>, got ", ^{ expect(nil).toNot(beGreaterThanOrEqualTo(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanTest : XCTestCase @end @implementation ObjCBeGreaterThanTest - (void)testPositiveMatches { expect(@2).to(beGreaterThan(@1)); expect(@2).toNot(beGreaterThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThan(@(0))); }); expectFailureMessage(@"expected to not be greater than <1>, got <0>", ^{ expect(@0).toNot(beGreaterThan(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than <-1>, got ", ^{ expect(nil).to(beGreaterThan(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than <1>, got ", ^{ expect(nil).toNot(beGreaterThan(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeIdenticalToTest : XCTestCase @end @implementation ObjCBeIdenticalToTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beIdenticalTo([NSNull null])); expect(@2).toNot(beIdenticalTo(@3)); } - (void)testNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(beIdenticalTo(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(beIdenticalTo(obj)); }); } - (void)testNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(beIdenticalTo(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(beIdenticalTo(obj)); }); } - (void)testAliasPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(be([NSNull null])); expect(@2).toNot(be(@3)); } - (void)testAliasNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(be(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(be(obj)); }); } - (void)testAliasNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(be(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(be(obj)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeKindOfTest : XCTestCase @end @implementation ObjCBeKindOfTest - (void)testPositiveMatches { NSMutableArray *array = [NSMutableArray array]; expect(array).to(beAKindOf([NSArray class])); expect(@1).toNot(beAKindOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be a kind of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAKindOf([NSNull class])); }); expectFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect([NSNull null]).toNot(beAKindOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be a kind of NSNull, got ", ^{ expect(nil).to(beAKindOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect(nil).toNot(beAKindOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanOrEqualToTest : XCTestCase @end @implementation ObjCBeLessThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beLessThanOrEqualTo(@2)); expect(@2).toNot(beLessThanOrEqualTo(@1)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than or equal to <1>, got <2>", ^{ expect(@2).to(beLessThanOrEqualTo(@1)); }); expectFailureMessage(@"expected to not be less than or equal to <1>, got <1>", ^{ expect(@1).toNot(beLessThanOrEqualTo(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than or equal to <1>, got ", ^{ expect(nil).to(beLessThanOrEqualTo(@1)); }); expectNilFailureMessage(@"expected to not be less than or equal to <-1>, got ", ^{ expect(nil).toNot(beLessThanOrEqualTo(@(-1))); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanTest : XCTestCase @end @implementation ObjCBeLessThanTest - (void)testPositiveMatches { expect(@2).to(beLessThan(@3)); expect(@2).toNot(beLessThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than <0>, got <-1>", ^{ expect(@(-1)).to(beLessThan(@0)); }); expectFailureMessage(@"expected to not be less than <1>, got <0>", ^{ expect(@0).toNot(beLessThan(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than <-1>, got ", ^{ expect(nil).to(beLessThan(@(-1))); }); expectNilFailureMessage(@"expected to not be less than <1>, got ", ^{ expect(nil).toNot(beLessThan(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeNilTest : XCTestCase @end @implementation ObjCBeNilTest - (void)testPositiveMatches { expect(nil).to(beNil()); expect(@NO).toNot(beNil()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be nil, got <1>", ^{ expect(@1).to(beNil()); }); expectFailureMessage(@"expected to not be nil, got ", ^{ expect(nil).toNot(beNil()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTrueTest : XCTestCase @end @implementation ObjCBeTrueTest - (void)testPositiveMatches { expect(@YES).to(beTrue()); expect(@NO).toNot(beTrue()); expect(nil).toNot(beTrue()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be true, got <0>", ^{ expect(@NO).to(beTrue()); }); expectFailureMessage(@"expected to be true, got ", ^{ expect(nil).to(beTrue()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTruthyTest : XCTestCase @end @implementation ObjCBeTruthyTest - (void)testPositiveMatches { expect(@YES).to(beTruthy()); expect(@NO).toNot(beTruthy()); expect(nil).toNot(beTruthy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be truthy, got ", ^{ expect(nil).to(beTruthy()); }); expectFailureMessage(@"expected to not be truthy, got <1>", ^{ expect(@1).toNot(beTruthy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeginWithTest : XCTestCase @end @implementation ObjCBeginWithTest - (void)testPositiveMatches { expect(@"hello world!").to(beginWith(@"hello")); expect(@"hello world!").toNot(beginWith(@"world")); NSArray *array = @[@1, @2]; expect(array).to(beginWith(@1)); expect(array).toNot(beginWith(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to begin with , got ", ^{ expect(@"foo").to(beginWith(@"bar")); }); expectFailureMessage(@"expected to not begin with , got ", ^{ expect(@"foo").toNot(beginWith(@"foo")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to begin with <1>, got ", ^{ expect(nil).to(beginWith(@1)); }); expectNilFailureMessage(@"expected to not begin with <1>, got ", ^{ expect(nil).toNot(beginWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCContainTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCContainTest : XCTestCase @end @implementation ObjCContainTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(array).to(contain(@1)); expect(array).toNot(contain(@"HI")); expect(@"String").to(contain(@"Str")); expect(@"Other").toNot(contain(@"Str")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to contain <3>, got <(1, 2)>", ^{ expect((@[@1, @2])).to(contain(@3)); }); expectFailureMessage(@"expected to not contain <2>, got <(1, 2)>", ^{ expect((@[@1, @2])).toNot(contain(@2)); }); expectFailureMessage(@"expected to contain , got ", ^{ expect(@"la").to(contain(@"hi")); }); expectFailureMessage(@"expected to not contain , got ", ^{ expect(@"hihihi").toNot(contain(@"hi")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to contain <3>, got ", ^{ expect(nil).to(contain(@3)); }); expectNilFailureMessage(@"expected to not contain <3>, got ", ^{ expect(nil).toNot(contain(@3)); }); expectNilFailureMessage(@"expected to contain , got ", ^{ expect(nil).to(contain(@"hi")); }); expectNilFailureMessage(@"expected to not contain , got ", ^{ expect(nil).toNot(contain(@"hi")); }); } - (void)testVariadicArguments { NSArray *array = @[@1, @2]; expect(array).to(contain(@1, @2)); expect(array).toNot(contain(@"HI", @"whale")); expect(@"String").to(contain(@"Str", @"ng")); expect(@"Other").toNot(contain(@"Str", @"Oth")); expectFailureMessage(@"expected to contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).to(contain(@"a", @"bar")); }); expectFailureMessage(@"expected to not contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).toNot(contain(@"bar", @"b")); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEndWithTest : XCTestCase @end @implementation ObjCEndWithTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(@"hello world!").to(endWith(@"world!")); expect(@"hello world!").toNot(endWith(@"hello")); expect(array).to(endWith(@2)); expect(array).toNot(endWith(@1)); expect(@1).toNot(contain(@"foo")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to end with , got ", ^{ expect(@"hello world!").to(endWith(@"?")); }); expectFailureMessage(@"expected to not end with , got ", ^{ expect(@"hello world!").toNot(endWith(@"!")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to end with <1>, got ", ^{ expect(nil).to(endWith(@1)); }); expectNilFailureMessage(@"expected to not end with <1>, got ", ^{ expect(nil).toNot(endWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEqualTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEqualTest : XCTestCase @end @implementation ObjCEqualTest - (void)testPositiveMatches { expect(@1).to(equal(@1)); expect(@1).toNot(equal(@2)); expect(@1).notTo(equal(@2)); expect(@"hello").to(equal(@"hello")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to equal <2>, got <1>", ^{ expect(@1).to(equal(@2)); }); expectFailureMessage(@"expected to not equal <1>, got <1>", ^{ expect(@1).toNot(equal(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to equal , got ", ^{ expect(nil).to(equal(nil)); }); expectNilFailureMessage(@"expected to not equal , got ", ^{ expect(nil).toNot(equal(nil)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCHaveCount.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCHaveCountTest : XCTestCase @end @implementation ObjCHaveCountTest - (void)testHaveCountForNSArray { expect(@[@1, @2, @3]).to(haveCount(@3)); expect(@[@1, @2, @3]).notTo(haveCount(@1)); expect(@[]).to(haveCount(@0)); expect(@[@1]).notTo(haveCount(@0)); expectFailureMessage(@"expected to have (1, 2, 3) with count 1, got 3", ^{ expect(@[@1, @2, @3]).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have (1, 2, 3) with count 3, got 3", ^{ expect(@[@1, @2, @3]).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSDictionary { expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@3)); expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@1)); expectFailureMessage(@"expected to have {1 = 1;2 = 2;3 = 3;} with count 1, got 3", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have {1 = 1;2 = 2;3 = 3;} with count 3, got 3", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSHashtable { NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; [table addObject:@2]; [table addObject:@3]; expect(table).to(haveCount(@3)); expect(table).notTo(haveCount(@1)); NSString *msg = [NSString stringWithFormat: @"expected to have %@with count 1, got 3", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).to(haveCount(@1)); }); msg = [NSString stringWithFormat: @"expected to not have %@with count 3, got 3", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSSet { NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have {(3,1,2)} with count 1, got 3", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have {(3,1,2)} with count 3, got 3", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSIndexSet { NSIndexSet *const set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have (1, 2, 3) with count 1, got 3", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have (1, 2, 3) with count 3, got 3", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForUnsupportedTypes { expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString", ^{ expect(@"string").to(haveCount(@6)); }); expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber", ^{ expect(@1).to(haveCount(@6)); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCMatchTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCMatchTest : XCTestCase @end @implementation ObjCMatchTest - (void)testPositiveMatches { expect(@"11:14").to(match(@"\\d{2}:\\d{2}")); expect(@"hello").toNot(match(@"\\d{2}:\\d{2}")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(@"hello").to(match(@"\\d{2}:\\d{2}")); }); expectFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got <11:22>", ^{ expect(@"11:22").toNot(match(@"\\d{2}:\\d{2}")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).to(match(@"\\d{2}:\\d{2}")); }); expectNilFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).toNot(match(@"\\d{2}:\\d{2}")); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCRaiseExceptionTest : XCTestCase @end @implementation ObjCRaiseExceptionTest - (void)testPositiveMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ @throw exception; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"})); expectAction(^{ }).toNot(raiseException()); } - (void)testPositiveMatchesWithBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); } - (void)testNegativeMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise any exception, got no exception", ^{ expectAction(^{ }).to(raiseException()); }); expectFailureMessage(@"expected to raise exception with name , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(@"foo")); }); expectFailureMessage(@"expected to raise exception with name with reason , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"cakes")); }); expectFailureMessage(@"expected to raise exception with name with reason with userInfo <{k = v;}>, got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"k": @"v"})); }); expectFailureMessage(@"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }", ^{ expectAction(^{ [exception raise]; }).toNot(raiseException()); }); } - (void)testNegativeMatchesWithPassingBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise exception that satisfies block, got no exception", ^{ expect(exception).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"LOL")); })); }); NSString *outerFailureMessage = @"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(@"foo"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"bar"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); } - (void)testNegativeMatchesWithNegativeBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; NSString *outerFailureMessage; NSString const *innerFailureMessage = @"expected to equal , got "; outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCSatisfyAnyOfTest : XCTestCase @end @implementation ObjCSatisfyAnyOfTest - (void)testPositiveMatches { expect(@2).to(satisfyAnyOf(equal(@2), equal(@3))); expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16))); expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4)))); expect(@NO).to(satisfyAnyOf(beTrue(), beFalse())); expect(@YES).to(satisfyAnyOf(beTrue(), beFalse())); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2", ^{ expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5))); }); expectFailureMessage(@"expected to match one of: {all be less than <4>, but failed first at element" " <5> in <[5, 6, 7]>}, or {equal <(1, 2, 3, 4)>}, got (5,6,7)", ^{ expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4]))); }); expectFailureMessage(@"satisfyAnyOf must be called with at least one matcher", ^{ expect(@"turtles").to(satisfyAnyOf()); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCSyncTest : XCTestCase @end @implementation ObjCSyncTest - (void)testFailureExpectation { expectFailureMessage(@"fail() always fails", ^{ fail(); }); expectFailureMessage(@"This always fails", ^{ failWithMessage(@"This always fails"); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCUserDescriptionTest : XCTestCase @end @implementation ObjCUserDescriptionTest - (void)testToWithDescription { expectFailureMessage(@"These are equal!\n" "expected to equal <2>, got <1>", ^{ expect(@1).toWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).toNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testNotToWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).notToWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToEventuallyWithDescription { expectFailureMessage(@"These are equal!\n" "expected to eventually equal <2>, got <1>", ^{ expect(@1).toEventuallyWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToEventuallyNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toEventuallyNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToNotEventuallyWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toNotEventuallyWithDescription(equal(@1), @"These aren't equal!"); }); } @end ================================================ FILE: Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjcStringersTest.m ================================================ @import XCTest; @import Nimble; @interface ObjcStringersTest : XCTestCase @end @implementation ObjcStringersTest - (void)testItCanStringifyArrays { NSArray *array = @[@1, @2, @3]; NSString *result = NMBStringify(array); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItCanStringifyIndexSets { NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; NSString *result = NMBStringify(indexSet); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItRoundsLongDecimals { NSNumber *num = @291.123782163; NSString *result = NMBStringify(num); expect(result).to(equal(@"291.1238")); } @end ================================================ FILE: Carthage/Checkouts/Nimble/circle.yml ================================================ machine: xcode: version: "7.3" dependencies: pre: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" test: override: - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx - eval "$(swiftenv init -)"; ./test swiftpm: environment: SWIFTENV_ROOT: $HOME/.swiftenv PATH: $SWIFTENV_ROOT/bin:$PATH ================================================ FILE: Carthage/Checkouts/Nimble/script/release ================================================ #!/usr/bin/env sh REMOTE_BRANCH=master POD_NAME=Nimble PODSPEC=Nimble.podspec POD=${COCOAPODS:-pod} function help { echo "Usage: release VERSION RELEASE_NOTES [-f]" echo echo "VERSION should be the version to release, should not include the 'v' prefix" echo "RELEASE_NOTES should be a file that lists all the release notes for this version" echo " if file does not exist, creates a git-style commit with a diff as a comment" echo echo "FLAGS" echo " -f Forces override of tag" echo echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" echo echo "HINT: use 'git diff ...HEAD' to build the release notes" echo exit 2 } function die { echo "[ERROR] $@" echo exit 1 } if [ $# -lt 2 ]; then help fi VERSION=$1 RELEASE_NOTES=$2 FORCE_TAG=$3 VERSION_TAG="v$VERSION" echo "-> Verifying Local Directory for Release" if [ -z "`which $POD`" ]; then die "Cocoapods is required to produce a release. Aborting." fi echo " > Cocoapods is installed" echo " > Is this a reasonable tag?" echo $VERSION_TAG | grep -q "^vv" if [ $? -eq 0 ]; then die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." fi echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" if [ $? -ne 0 ]; then die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." fi echo " > Is this version ($VERSION) unique?" git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 if [ $? -eq 0 ]; then if [ -z "$FORCE_TAG" ]; then die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" else echo " > NO, but force was specified." fi else echo " > Yes, tag is unique" fi if [ ! -f "$RELEASE_NOTES" ]; then echo " > Failed to find $RELEASE_NOTES. Prompting editor" RELEASE_NOTES=.release-changes LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` echo " > Latest tag ${LATEST_TAG}" echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES echo "================" >> $RELEASE_NOTES echo >> $RELEASE_NOTES echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES $EDITOR $RELEASE_NOTES diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 STATUS=$? rm ${RELEASE_NOTES}.backup if [ $STATUS -eq 0 ]; then rm $RELEASE_NOTES die "No changes in release notes file. Aborting." fi fi echo " > Release notes: $RELEASE_NOTES" if [ ! -f "$PODSPEC" ]; then die "Cannot find podspec: $PODSPEC. Aborting." fi echo " > Podspec exists" git config --get user.signingkey > /dev/null || { echo "[ERROR] No PGP found to sign tag. Aborting." echo echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" echo " intermediate between you and the end-users to modify the git repository." echo echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" echo " from the official maintainers." echo echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." echo echo "Related resources:" echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" echo exit 2 } echo " > Found PGP key for git" # Verify cocoapods trunk ownership pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." echo " > Verified ownership to $POD_NAME pod" echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." function restore_podspec { if [ -f "${PODSPEC}.backup" ]; then mv -f ${PODSPEC}{.backup,} fi } echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" git fetch origin || die "Failed to fetch origin" git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" echo "-> Setting podspec version" cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" SET_PODSPEC_VERSION=$? if [ $SET_PODSPEC_VERSION -eq 0 ]; then echo " > Podspec already set to $VERSION. Skipping." else sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { restore_podspec die "Failed to update version in podspec" } git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi if [ -z "$FORCE_TAG" ]; then echo "-> Tagging version" git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin" git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" else echo "-> Tagging version (force)" git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin (force)" git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" fi if [ $SET_PODSPEC_VERSION -ne 0 ]; then git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" echo " > Pushed version to origin" fi echo echo "---------------- Released as $VERSION_TAG ----------------" echo echo echo "Pushing to pod trunk..." $POD trunk push "$PODSPEC" echo echo "================ Finalizing the Release ================" echo echo " - Opening GitHub to mark this as a release..." echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for GitHub styling." echo " - Announce!" open "https://github.com/Quick/Nimble/releases/new?tag=$VERSION_TAG" rm ${PODSPEC}.backup ================================================ FILE: Carthage/Checkouts/Nimble/test ================================================ #!/bin/bash GREEN="\033[0;32m" CLEAR="\033[0m" if which xcodebuild > /dev/null; then echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..." BUILD_DIR=`pwd`/build LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} RUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} RUNTIME_TVOS_SDK_VERSION=${NIMBLE_RUNTIME_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} BUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION} fi set -e function color_if_overridden { local actual=$1 local env_var=$2 if [ -z "$env_var" ]; then printf "$actual" else printf "$GREEN$actual$CLEAR" fi } function print_env { echo "=== Environment ===" echo " iOS:" echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION" echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`" echo " Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`" echo echo " tvOS:" echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION" echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" echo " Running with tvOS SDK: `color_if_overridden $RUNTIME_TVOS_SDK_VERSION $NIMBLE_RUNTIME_TVOS_SDK_VERSION`" echo echo " Mac OS X:" echo " Latest OS X SDK: $LATEST_OSX_SDK_VERSION" echo " Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`" echo echo "======= END =======" echo } function run { echo -e "$GREEN==>$CLEAR $@" "$@" } function test_ios { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION" build test run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION" build test } function test_tvos { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV 1080p,OS=$RUNTIME_TVOS_SDK_VERSION" build test } function test_osx { run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-OSX" -configuration "Debug" -sdk "macosx$BUILD_OSX_SDK_VERSION" build test } function test_podspec { echo "Gathering CocoaPods installation information..." run bundle exec pod --version echo "Linting podspec..." run bundle exec pod lib lint Nimble.podspec } function test_swiftpm { run swift build --clean && swift build && swift test } function test() { test_ios test_tvos test_osx if which swift-test; then test_swiftpm else echo "Not testing with the Swift Package Manager because swift-test is not installed" fi } function clean { run rm -rf ~/Library/Developer/Xcode/DerivedData\; true } function help { echo "Usage: $0 COMMANDS" echo echo "COMMANDS:" echo " clean - Cleans the derived data directory of Xcode. Assumes default location" echo " ios - Runs the tests as an iOS device" echo " tvos - Runs the tests as an tvOS device" echo " osx - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)" echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" echo " all - Runs the all tests of ios, tvos and osx" echo " swiftpm - Runs the tests built by the Swift Package Manager" echo " help - Displays this help" echo exit 1 } function main { print_env for arg in $@ do case "$arg" in clean) clean ;; ios) test_ios ;; tvos) test_tvos ;; osx) test_osx ;; podspec) test_podspec ;; test) test ;; all) test ;; swiftpm) test_swiftpm ;; help) help ;; esac done if [ $# -eq 0 ]; then clean test fi } main $@ ================================================ FILE: Carthage/Checkouts/Quick/.gitignore ================================================ # Xcode # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore ## Build generated build/ DerivedData ## Various settings *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata ## Other *.xccheckout *.moved-aside *.xcuserstate *.xcscmblueprint ## Obj-C/Swift specific *.hmap *.ipa # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. Packages/ .build/ # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # # Pods/ # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md fastlane/report.xml fastlane/screenshots # Mac OS X .DS_Store # Quick Quick.framework.zip ================================================ FILE: Carthage/Checkouts/Quick/.gitmodules ================================================ [submodule "Externals/Nimble"] path = Externals/Nimble url = https://github.com/Quick/Nimble.git ================================================ FILE: Carthage/Checkouts/Quick/.ruby-version ================================================ system ================================================ FILE: Carthage/Checkouts/Quick/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-02-25-a ================================================ FILE: Carthage/Checkouts/Quick/.travis.yml ================================================ osx_image: xcode7.3 language: generic matrix: include: - os: osx env: - PLATFORM=osx - os: osx env: - PLATFORM=ios - os: osx env: - PLATFORM=tvos - os: osx osx_image: xcode8 env: - PLATFORM=osx - XCODE_ACTION="build-for-testing test-without-building" - os: osx osx_image: xcode8 env: - PLATFORM=ios - XCODE_ACTION="build-for-testing test-without-building" - os: osx osx_image: xcode8 env: - PLATFORM=tvos - XCODE_ACTION="build-for-testing test-without-building" - os: osx sudo: required env: - PODSPEC=1 - os: linux env: - PLATFORM=linux sudo: required dist: trusty install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./script/travis-install-osx; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./script/travis-install-linux; fi - if [[ "$PODSPEC" ]]; then sudo gem install bundler; bundle install; fi script: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./script/travis-script-osx; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./script/travis-script-linux; fi ================================================ FILE: Carthage/Checkouts/Quick/CONTRIBUTING.md ================================================ **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [Welcome to Quick!](#welcome-to-quick!) - [Reporting Bugs](#reporting-bugs) - [Building the Project](#building-the-project) - [Pull Requests](#pull-requests) - [Style Conventions](#style-conventions) - [Core Members](#core-members) - [Code of Conduct](#code-of-conduct) - [Creating a Release](#creating-a-release) # Welcome to Quick! We're building a testing framework for a new generation of Swift and Objective-C developers. Quick should be easy to use and easy to maintain. Let's keep things simple and well-tested. ## Reporting Bugs Nothing is off-limits. If you're having a problem, we want to hear about it. - See a crash? File an issue. - Code isn't compiling, but you don't know why? Sounds like you should submit a new issue, bud. - Went to the kitchen, only to forget why you went in the first place? Better submit an issue. Be sure to include in your issue: - Your Xcode version (eg - Xcode 7.0.1 7A1001) - Your version of Quick / Nimble (eg - v0.7.0 or git sha `7d0b8c21357839a8c5228863b77faecf709254a9`) - What are the steps to reproduce this issue? - What platform are you using? (eg - OS X, iOS, watchOS, tvOS) - If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration - Are you using carthage or cocoapods? ## Building the Project - After cloning the repository, run `git submodule update --init` to pull the Nimble submodule. - Use `Quick.xcworkspace` to work on Quick. The workspace includes Nimble, which is used in Quick's tests. ## Pull Requests - Nothing is trivial. Submit pull requests for anything: typos, whitespace, you name it. - Not all pull requests will be merged, but all will be acknowledged. If no one has provided feedback on your request, ping one of the owners by name. - Make sure your pull request includes any necessary updates to the README or other documentation. - Be sure the unit tests for both the OS X and iOS targets of both Quick and Nimble pass before submitting your pull request. You can run all the iOS and OS X unit tests using `rake`. - The `master` branch will always support the stable Xcode version. Other branches will point to their corresponding versions they support. - If you're making a configuration change, make sure to edit both the xcode project and the podspec file. ### Style Conventions - Indent using 4 spaces. - Keep lines 100 characters or shorter. Break long statements into shorter ones over multiple lines. - In Objective-C, use `#pragma mark -` to mark public, internal, protocol, and superclass methods. See `QuickSpec.m` for an example. ## Core Members If a few of your pull requests have been merged, and you'd like a controlling stake in the project, file an issue asking for write access to the repository. Your conduct as a core member is your own responsibility, but here are some "ground rules": - Feel free to push whatever you want to master, and (if you have ownership permissions) to create any repositories you'd like. Ideally, however, all changes should be submitted as GitHub pull requests. No one should merge their own pull request, unless no other core members respond for at least a few days. Pull requests should be issued from personal forks. The Quick repo should be reserved for long-running feature branches. If you'd like to create a new repository, it'd be nice if you created a GitHub issue and gathered some feedback first. - It'd be awesome if you could review, provide feedback on, and close issues or pull requests submitted to the project. Please provide kind, constructive feedback. Please don't be sarcastic or snarky. ## Creating a Release The process is relatively straight forward, but here's is a useful checklist for tagging: - Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` - Run the release script: `./script/release A.B.C release-notes-file` - The script will prompt you to create a new [GitHub release](https://github.com/Quick/Quick/releases). - Use the same release notes you created for the tag, but tweak up formatting for GitHub. - Announce! ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/ArrangeActAssert.md ================================================ # Effective Tests Using XCTest: Arrange, Act, and Assert Whether you're using XCTest, Quick, or another testing framework, you can write effective unit tests by following a simple pattern: 1. Arrange 2. Act 3. Assert ## Using Arrange, Act, and Assert For example, let's look at a simple class called `Banana`: ```swift // Banana/Banana.swift /** A delicious banana. Tastes better if you peel it first. */ public class Banana { private var isPeeled = false /** Peels the banana. */ public func peel() { isPeeled = true } /** You shouldn't eat a banana unless it's been peeled. */ public var isEdible: Bool { return isPeeled } } ``` Let's verify the `Banana.peel()` method does what it's supposed to: ```swift // BananaTests/BananaTests.swift class BananaTests: XCTestCase { func testPeel() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } } ``` ## Using Clear Test Names Our `testPeel()` makes sure that, if the `Banana.peel()` method ever stops working right, we'll know. This usually happens when our application code changes, which either means: 1. We accidentally broke our application code, so we have to fix the application code 2. We changed how our application code works--maybe because we're adding a new feature--so we have to change the test code If our tests start breaking, how do we know which one of these cases applies? It might surprise you that **the name of the test** is our best indication. Good test names: 1. Are clear about what is being tested. 2. Are clear about when the test should pass or fail. Is our `testPeel()` method clearly named? Let's make it clearer: ```diff // BananaTests.swift -func testPeel() { +func testPeel_makesTheBananaEdible() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } ``` The new name: 1. Is clear about what is being tested: `testPeel` indicates it's the `Banana.peel()` method. 2. Is clear about when the test should pass: `makesTheBananaEdible` indicates the banana is edible once the method has been called. ## Testing Conditions Let's say we want to offer people bananas, using a function called `offer()`: ```swift // Banana/Offer.swift /** Given a banana, returns a string that can be used to offer someone the banana. */ public func offer(banana: Banana) -> String { if banana.isEdible { return "Hey, want a banana?" } else { return "Hey, want me to peel this banana for you?" } } ``` Our application code does one of two things: 1. Either it offers a banana that's already been peeled... 2. ...or it offers an unpeeled banana. Let's write tests for these two cases: ```swift // BananaTests/OfferTests.swift class OfferTests: XCTestCase { func testOffer_whenTheBananaIsPeeled_offersTheBanana() { // Arrange: Create a banana and peel it. let banana = Banana() banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { // Arrange: Create a banana. let banana = Banana() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` Our test names clearly indicate the **conditions** under which our tests should pass: in the case that `whenTheBananaIsPeeled`, `offer()` should `offersTheBanana`. And if the banana isn't peeled? Well, we have a test for that, too! Notice that we have one test per `if` statement in our application code. This is a great pattern when writing tests: it makes sure every set of conditions is tested. If one of those conditions no longer works, or needs to be changed, we'll know exactly which test needs to be looked at. ## Shorter "Arrange" Steps with `XCTestCase.setUp()` Both of our `OfferTests` tests contain the same "Arrange" code: they both create a banana. We should move that code into a single place. Why? 1. As-is, if we change the `Banana` initializer, we'll have to change every test that creates a banana. 2. Our test methods will be shorter--which is a good thing if (and **only if**) that makes the tests easier to read. Let's move the `Banana` initialization into the `XCTestCase.setUp()` method, which is called once before every test method. ```diff // OfferTests.swift class OfferTests: XCTestCase { + var banana: Banana! + + override func setUp() { + super.setUp() + banana = Banana() + } + func testOffer_whenTheBananaIsPeeled_offersTheBanana() { - // Arrange: Create a banana and peel it. - let banana = Banana() + // Arrange: Peel the banana. banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { - // Arrange: Create a banana. - let banana = Banana() - // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` ## Sharing "Arrange" Code Across Multiple Tests If you find yourself using the same "arrange" steps across multiple tests, you may want to define a helper function within your test target: ```swift // BananaTests/BananaHelpers.swift internal func createNewPeeledBanana() -> Banana { let banana = Banana() banana.peel() return banana } ``` > Use a function to define your helpers: functions can't be subclassed, nor can they retain any state. Subclassing and mutable state can make your tests harder to read. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/BehavioralTesting.md ================================================ # Don't Test Code, Instead Verify Behavior Tests should only fail if the application **behaves differently**. They should test *what* the application code does, not *how* it does those things. - Tests that verify *what* an application does are **behavioral tests**. - Tests that break if the application code changes, even if the behavior remains the same, are **brittle tests**. Let's say we have a banana database, called `GorillaDB`. `GorillaDB` is a key-value store for bananas. We can save bananas: ```swift let database = GorillaDB() let banana = Banana() database.save(banana: banana, key: "my-banana") ``` And we can restore bananas from disk later: ```swift let banana = database.load(key: "my-banana") ``` ## Brittle Tests How can we test this behavior? One way would be to check the size of the database after we save a banana: ```swift // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") // Assert: The size of the database should have increased by one. XCTAssertEqual(database.size, originalSize + 1) } ``` Imagine, however, that the source code of `GorillaDB` changes. In order to make reading bananas from the database faster, it maintains a cache of the most frequently used bananas. `GorillaDB.size` grows as the size of the cache grows, and our test fails: ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/Screenshot_database_size_fail.png) ## Behavioral Tests The key to writing behavioral tests is determining exactly what you're expecting your application code to do. In the context of our `testSave_savesTheBananaToTheDatabase` test: what is the behavior we expect when we "save" a banana to the database? "Saving" implies, to me, that we can load it later. So instead of testing that the size of the database increases, we should test that we can load a banana. ```diff // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() - let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") - // Assert: The size of the database should have increased by one. - XCTAssertEqual(database.size, originalSize + 1) + // Assert: The bananas saved to and loaded from the database should be the same. + XCTAssertEqual(database.load(key: "test-banana"), banana) } ``` The key to writing behavioral tests is asking: - What exactly should this application code do? - Is my test verifying *only* that behavior? Or could it fail due to other aspects of how the code works? ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/ConfiguringQuick.md ================================================ # Configuring How Quick Behaves You can customize how Quick behaves by subclassing `QuickConfiguration` and overriding the `QuickConfiguration.Type.configure()` class method: ```swift // Swift import Quick class ProjectDataTestConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { // ...set options on the configuration object here. } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(ProjectDataTestConfiguration) + (void)configure:(Configuration *configuration) { // ...set options on the configuration object here. } QuickConfigurationEnd ``` Projects may include several configurations. Quick does not make any guarantee about the order in which those configurations are executed. ## Adding Global `beforeEach` and `afterEach` Closures Using `QuickConfiguration.beforeEach` and `QuickConfiguration.afterEach`, you can specify closures to be run before or after *every* example in a test suite: ```swift // Swift import Quick import Sea class FinConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { Dorsal.sharedFin().height = 0 } } } ``` ```objc // Objective-C @import Quick; #import "Dorsal.h" QuickConfigurationBegin(FinConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEach:^{ [Dorsal sharedFin].height = 0; }]; } QuickConfigurationEnd ``` In addition, Quick allows you to access metadata regarding the current example being run: ```swift // Swift import Quick class SeaConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { exampleMetadata in // ...use the example metadata object to access the current example name, and more. } } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(SeaConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { // ...use the example metadata object to access the current example name, and more. }]; } QuickConfigurationEnd ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/InstallingFileTemplates.md ================================================ # Installing Quick File Templates The Quick repository includes file templates for both Swift and Objective-C specs. ## Alcatraz Quick templates can be installed via [Alcatraz](https://github.com/supermarin/Alcatraz), a package manager for Xcode. Just search for the templates from the Package Manager window. ![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png) ## Manually via the Rakefile To manually install the templates, just clone the repository and run the `templates:install` rake task: ```sh $ git clone git@github.com:Quick/Quick.git $ rake templates:install ``` Uninstalling is easy, too: ```sh $ rake templates:uninstall ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/InstallingQuick.md ================================================ # Installing Quick > **If you're using Xcode 7.1,** use the latest version of Quick--`v0.9.0` at the time of writing. > New releases are developed on the `swift-2.0` branch. Quick provides the syntax to define examples and example groups. Nimble provides the `expect(...).to` assertion syntax. You may use either one, or both, in your tests. There are three recommended ways of linking Quick to your tests: 1. [Git Submodules](#git-submodules) 2. [CocoaPods](#cocoapods) 3. [Carthage](#carthage) 4. [Swift Package Manager (experimental)](#swift-package-manager) Choose one and follow the instructions below. Once you've completed them, you should be able to `import Quick` from within files in your test target. ## Git Submodules To link Quick and Nimble using Git submodules: 1. Add submodule for Quick. 2. If you don't already have a `.xcworkspace` for your project, create one. ([Here's how](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html)) 3. Add `Quick.xcodeproj` to your project's `.xcworkspace`. 4. Add `Nimble.xcodeproj` to your project's `.xcworkspace`. It exists in `path/to/Quick/Externals/Nimble`. By adding Nimble from Quick's dependencies (as opposed to adding directly as a submodule), you'll ensure that you're using the correct version of Nimble for whatever version of Quick you're using. 5. Link `Quick.framework` and `Nimble.framework` in your test target's "Link Binary with Libraries" build phase. First, if you don't already have one, create a directory for your Git submodules. Let's assume you have a directory named `Vendor`. **Step One:** Download Quick and Nimble as Git submodules: ```sh git submodule add git@github.com:Quick/Quick.git Vendor/Quick git submodule add git@github.com:Quick/Nimble.git Vendor/Nimble git submodule update --init --recursive ``` **Step Two:** Add the `Quick.xcodeproj` and `Nimble.xcodeproj` files downloaded above to your project's `.xcworkspace`. For example, this is `Guanaco.xcworkspace`, the workspace for a project that is tested using Quick and Nimble: ![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png) **Step Three:** Link the `Quick.framework` during your test target's `Link Binary with Libraries` build phase. You should see two `Quick.frameworks`; one is for OS X, and the other is for iOS. ![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png) Do the same for the `Nimble.framework`, and you're done! **Updating the Submodules:** If you ever want to update the Quick or Nimble submodules to latest version, enter the Quick directory and pull from the master repository: ```sh cd /path/to/your/project/Vendor/Quick git checkout master git pull --rebase origin master ``` Your Git repository will track changes to submodules. You'll want to commit the fact that you've updated the Quick submodule: ```sh cd /path/to/your/project git commit -m "Updated Quick submodule" ``` **Cloning a Repository that Includes a Quick Submodule:** After other people clone your repository, they'll have to pull down the submodules as well. They can do so by running the `git submodule update` command: ```sh git submodule update --init --recursive ``` You can read more about Git submodules [here](http://git-scm.com/book/en/Git-Tools-Submodules). ## CocoaPods First, update CocoaPods to Version 0.36.0 or newer, which is necessary to install CocoaPods using Swift. Then, add Quick and Nimble to your Podfile. Additionally, the ```use_frameworks!``` line is necessary for using Swift in CocoaPods: ```rb # Podfile use_frameworks! def testing_pods pod 'Quick' pod 'Nimble' end target 'MyTests' do testing_pods end target 'MyUITests' do testing_pods end ``` Finally, download and link Quick and Nimble to your tests: ```sh pod install ``` ### Using Swift 1.2? The latest release of Quick (0.4.0) is for Swift 2 (Xcode 7), but the latest Nimble (1.0.0) is for Swift 1.2 (Xcode 6). If you want Xcode 6 do: ```sh target 'MyTests' do use_frameworks! pod 'Quick', '~>0.3.0' pod 'Nimble', '~>1.0.0' end ``` ## [Carthage](https://github.com/Carthage/Carthage) As test targets do not have the "Embedded Binaries" section, the frameworks must be added to the target's "Link Binary With Libraries" as well as a "Copy Files" build phase to copy them to the target's Frameworks destination. > As Carthage builds dynamic frameworks, you will need a valid code signing identity set up. 1. Add Quick to your [`Cartfile.private`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate): ``` github "Quick/Quick" github "Quick/Nimble" ``` 2. Run `carthage update`. 3. From your `Carthage/Build/[platform]/` directory, add both Quick and Nimble to your test target's "Link Binary With Libraries" build phase: ![](http://i.imgur.com/pBkDDk5.png) 4. For your test target, create a new build phase of type "Copy Files": ![](http://i.imgur.com/jZATIjQ.png) 5. Set the "Destination" to "Frameworks", then add both frameworks: ![](http://i.imgur.com/rpnyWGH.png) This is not "the one and only way" to use Carthage to manage dependencies. For further reference check out the [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md). ## [Swift Package Manager](https://github.com/apple/swift-package-manager) With the advent of the [swift.org](https://swift.org) open-source project, Swift now has an official, though nascent, package manager tool. Notably, this provides the possibility of using Quick on non-Apple platforms for the first time. Initial steps have been taken to allow using Quick to test projects using the Swift Package Manager, although frequent breakage is expected at this point since the tool is still under heavy development. Until further documentation has been written, the following repository may be useful as an example of how Quick can be declared as a dependency in a `Package.swift` file for SwiftPM: https://github.com/Quick/QuickOnLinuxExample ### (Not Recommended) Running Quick Specs on a Physical iOS Device In order to run specs written in Quick on device, you need to add `Quick.framework` and `Nimble.framework` as `Embedded Binaries` to the `Host Application` of the test target. After adding a framework as an embedded binary, Xcode will automatically link the host app against the framework. ![](http://indiedev.kapsi.fi/images/embed-in-host.png) ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/MoreResources.md ================================================ # More Resources ## Examples of Quick Specs Quick is used by many companies, open-source projects, and individuals, including [GitHub](https://github.com/github) and [ReactiveCocoa](https://github.com/ReactiveCocoa). For examples, check out: - https://github.com/ReactiveCocoa/ReactiveCocoa - https://github.com/github/Archimedes - https://github.com/libgit2/objective-git - https://github.com/jspahrsummers/RXSwift - https://github.com/artsy/eidolon - https://github.com/AshFurrow/Moya - https://github.com/nerdyc/Squeal - https://github.com/pepibumur/SugarRecord ## More on Unit Testing for OS X and iOS Apps - **[Quality Coding](http://qualitycoding.org/)**: A blog on iOS development that focuses on unit testing. - **[OCMock Tutorials](http://ocmock.org/support/)**: Use OCMock when you need "fake objects" in your tests. - **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**: Use this library to test code that sends requests to, and receives responses from, the Internet. - **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**: See [the Nimble documentation](https://github.com/Quick/Nimble) for instructions on how to write custom matchers in Nimble. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/NimbleAssertions.md ================================================ # Clearer Tests Using Nimble Assertions When code doesn't work the way it's supposed to, unit tests should make it **clear** exactly what's wrong. Take the following function which, given a bunch of monkeys, only returns the silly monkeys in the bunch: ```swift public func silliest(monkeys: [Monkey]) -> [Monkey] { return monkeys.filter { $0.silliness == .VerySilly } } ``` Now let's say we have a unit test for this function: ```swift func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) XCTAssertTrue(contains(sillyMonkeys, kiki)) } ``` The test fails with the following failure message: ``` XCTAssertTrue failed ``` ![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png) The failure message leaves a lot to be desired. It leaves us wondering, "OK, so something that should have been true was false--but what?" That confusion slows us down, since we now have to spend time deciphering test code. ## Better Failure Messages, Part 1: Manually Providing `XCTAssert` Failure Messages `XCTAssert` assertions allow us to specify a failure message of our own, which certainly helps: ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki)) + XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") } ``` But we have to write our own failure message. ## Better Failure Messages, Part 2: Nimble Failure Messages Nimble makes your test assertions, and their failure messages, easier to read: ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") + expect(sillyMonkeys).to(contain(kiki)) } ``` We don't have to write our own failure message--the one provided by Nimble is already very readable: ``` expected to contain , got <[Monkey(name: Jane, silliness: VerySilly)]> ``` ![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png) The failure message makes it clear what's wrong: we were expecting `kiki` to be included in the result of `silliest()`, but the result only contains `jane`. Now that we know exactly what's wrong, it's easy to fix the issue: ```diff public func silliest(monkeys: [Monkey]) -> [Monkey] { - return monkeys.filter { $0.silliness == .VerySilly } + return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly } } ``` Nimble provides many different kind of assertions, each with great failure messages. And unlike `XCTAssert`, you don't have to type your own failure message every time. For the full list of Nimble assertions, check out the [Nimble README](https://github.com/Quick/Nimble). Below is just a sample, to whet your appetite: ```swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/QuickExamplesAndGroups.md ================================================ # Organized Tests with Quick Examples and Example Groups Quick uses a special syntax to define **examples** and **example groups**. In *[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)*, we learned that a good test method name is crucial--when a test starts failing, it's the best way to determine whether we have to fix the application code or update the test. Quick examples and example groups serve two purposes: 1. They encourage you to write descriptive test names. 2. They greatly simplify the test code in the "arrange" step of your tests. ## Examples Using `it` Examples, defined with the `it` function, use assertions to demonstrate how code should behave. These are like test methods in XCTest. `it` takes two parameters: the name of the example, and a closure. The examples below specify how the `Sea.Dolphin` class should behave. A new dolphin should be smart and friendly: ```swift // Swift import Quick import Nimble import Sea class DolphinSpec: QuickSpec { override func spec() { it("is friendly") { expect(Dolphin().isFriendly).to(beTruthy()) } it("is smart") { expect(Dolphin().isSmart).to(beTruthy()) } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) it(@"is friendly", ^{ expect(@([[Dolphin new] isFriendly])).to(beTruthy()); }); it(@"is smart", ^{ expect(@([[Dolphin new] isSmart])).to(beTruthy()); }); QuickSpecEnd ``` Use descriptions to make it clear what your examples are testing. Descriptions can be of any length and use any character, including characters from languages besides English, or even emoji! :v: :sunglasses: ## Example Groups Using `describe` and `context` Example groups are logical groupings of examples. Example groups can share setup and teardown code. ### Describing Classes and Methods Using `describe` To specify the behavior of the `Dolphin` class's `click` method--in other words, to test the method works--several `it` examples can be grouped together using the `describe` function. Grouping similar examples together makes the spec easier to read: ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { describe("its click") { it("is loud") { let click = Dolphin().click() expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { let click = Dolphin().click() expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ describe(@"its click", ^{ it(@"is loud", ^{ Click *click = [[Dolphin new] click]; expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ Click *click = [[Dolphin new] click]; expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` When these two examples are run in Xcode, they'll display the description from the `describe` and `it` functions: 1. `DolphinSpec.a_dolphin_its_click_is_loud` 2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency` Again, it's clear what each of these examples is testing. ### Sharing Setup/Teardown Code Using `beforeEach` and `afterEach` Example groups don't just make the examples clearer, they're also useful for sharing setup and teardown code among examples in a group. In the example below, the `beforeEach` function is used to create a brand new instance of a dolphin and its click before each example in the group. This ensures that both are in a "fresh" state for every example: ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { var click: Click! beforeEach { click = dolphin.click() } it("is loud") { expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ __block Click *click = nil; beforeEach(^{ click = [dolphin click]; }); it(@"is loud", ^{ expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` Sharing setup like this might not seem like a big deal with the dolphin example, but for more complicated objects, it saves a lot of typing! To execute code *after* each example, use `afterEach`. ### Specifying Conditional Behavior Using `context` Dolphins use clicks for echolocation. When they approach something particularly interesting to them, they release a series of clicks in order to get a better idea of what it is. The tests need to show that the `click` method behaves differently in different circumstances. Normally, the dolphin just clicks once. But when the dolphin is close to something interesting, it clicks several times. This can be expressed using `context` functions: one `context` for the normal case, and one `context` for when the dolphin is close to something interesting: ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { context("when the dolphin is not near anything interesting") { it("is only emitted once") { expect(dolphin!.click().count).to(equal(1)) } } context("when the dolphin is near something interesting") { beforeEach { let ship = SunkenShip() Jamaica.dolphinCove.add(ship) Jamaica.dolphinCove.add(dolphin) } it("is emitted three times") { expect(dolphin.click().count).to(equal(3)) } } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ context(@"when the dolphin is not near anything interesting", ^{ it(@"is only emitted once", ^{ expect(@([[dolphin click] count])).to(equal(@1)); }); }); context(@"when the dolphin is near something interesting", ^{ beforeEach(^{ [[Jamaica dolphinCove] add:[SunkenShip new]]; [[Jamaica dolphinCove] add:dolphin]; }); it(@"is emitted three times", ^{ expect(@([[dolphin click] count])).to(equal(@3)); }); }); }); }); QuickSpecEnd ``` Strictly speaking, the `context` keyword is a synonym for `describe`, but thoughtful use will make your spec easier to understand. ### Test Readability: Quick and XCTest In [Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md), we looked at how one test per condition was a great way to organize test code. In XCTest, that leads to long test method names: ```swift func testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() { // ... } ``` Using Quick, the conditions are much easier to read, and we can perform setup for each example group: ```swift describe("a dolphin") { describe("its click") { context("when the dolphin is near something interesting") { it("is emitted three times") { // ... } } } } ``` ## Temporarily Disabling Examples or Groups You can temporarily disable examples or example groups that don't pass yet. The names of the examples will be printed out along with the test results, but they won't be run. You can disable an example or group by prepending `x`: ```swift // Swift xdescribe("its click") { // ...none of the code in this closure will be run. } xcontext("when the dolphin is not near anything interesting") { // ...none of the code in this closure will be run. } xit("is only emitted once") { // ...none of the code in this closure will be run. } ``` ```objc // Objective-C xdescribe(@"its click", ^{ // ...none of the code in this closure will be run. }); xcontext(@"when the dolphin is not near anything interesting", ^{ // ...none of the code in this closure will be run. }); xit(@"is only emitted once", ^{ // ...none of the code in this closure will be run. }); ``` ## Temporarily Running a Subset of Focused Examples Sometimes it helps to focus on only one or a few examples. Running one or two examples is faster than the entire suite, after all. You can run only one or two by using the `fit` function. You can also focus a group of examples using `fdescribe` or `fcontext`: ```swift fit("is loud") { // ...only this focused example will be run. } it("has a high frequency") { // ...this example is not focused, and will not be run. } fcontext("when the dolphin is near something interesting") { // ...examples in this group are also focused, so they'll be run. } ``` ```objc fit(@"is loud", { // ...only this focused example will be run. }); it(@"has a high frequency", ^{ // ...this example is not focused, and will not be run. }); fcontext(@"when the dolphin is near something interesting", ^{ // ...examples in this group are also focused, so they'll be run. }); ``` ## Global Setup/Teardown Using `beforeSuite` and `afterSuite` Some test setup needs to be performed before *any* examples are run. For these cases, use `beforeSuite` and `afterSuite`. In the example below, a database of all the creatures in the ocean is created before any examples are run. That database is torn down once all the examples have finished: ```swift // Swift import Quick class DolphinSpec: QuickSpec { override func spec() { beforeSuite { OceanDatabase.createDatabase(name: "test.db") OceanDatabase.connectToDatabase(name: "test.db") } afterSuite { OceanDatabase.teardownDatabase(name: "test.db") } describe("a dolphin") { // ... } } } ``` ```objc // Objective-C @import Quick; QuickSpecBegin(DolphinSpec) beforeSuite(^{ [OceanDatabase createDatabase:@"test.db"]; [OceanDatabase connectToDatabase:@"test.db"]; }); afterSuite(^{ [OceanDatabase teardownDatabase:@"test.db"]; }); describe(@"a dolphin", ^{ // ... }); QuickSpecEnd ``` You can specify as many `beforeSuite` and `afterSuite` as you like. All `beforeSuite` closures will be executed before any tests run, and all `afterSuite` closures will be executed after all the tests are finished. There is no guarantee as to what order these closures will be executed in. ## Accessing Metadata for the Current Example There may be some cases in which you'd like the know the name of the example that is currently being run, or how many have been run so far. Quick provides access to this metadata in `beforeEach` and `afterEach` closures. ```swift beforeEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) is about to be run.") } afterEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) has run.") } ``` ```objc beforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l is about to be run.", (long)exampleMetadata.exampleIndex); }); afterEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l has run.", (long)exampleMetadata.exampleIndex); }); ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/QuickInObjectiveC.md ================================================ # Using Quick in Objective-C Quick works equally well in both Swift and Objective-C. There are two notes to keep in mind when using Quick in Objective-C, however, which are described below. ## The Optional Shorthand Syntax Importing Quick in an Objective-C file defines macros named `it` and `itShouldBehaveLike`, as well as functions like `context()` and `describe()`. If the project you are testing also defines symbols with these names, you may encounter confusing build failures. In that case, you can avoid namespace collision by turning off Quick's optional "shorthand" syntax: ```objc #define QUICK_DISABLE_SHORT_SYNTAX 1 @import Quick; QuickSpecBegin(DolphinSpec) // ... QuickSpecEnd ``` You must define the `QUICK_DISABLE_SHORT_SYNTAX` macro *before* importing the Quick header. Alternatively, you may define the macro in your test target's build configuration: ![](http://d.twobitlabs.com/VFEamhvixX.png) ## Your Test Target Must Include At Least One Swift File The Swift stdlib will not be linked into your test target, and thus Quick will fail to execute properly, if your test target does not contain *at least one* Swift file. Without at least one Swift file, your tests will exit prematurely with the following error: ``` *** Test session exited(82) without checking in. Executable cannot be loaded for some other reason, such as a problem with a library it depends on or a code signature/entitlements mismatch. ``` To fix the problem, add a blank file called `SwiftSpec.swift` to your test target: ```swift // SwiftSpec.swift import Quick ``` > For more details on this issue, see https://github.com/Quick/Quick/issues/164. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/README.md ================================================ # Documentation Quick helps you verify how your Swift and Objective-C programs behave. Doing so effectively isn't just a matter of knowing how to use Quick, however. The guides in this directory can help you write effective tests--not just using Quick, but even XCTest or other testing frameworks. Each guide covers a particular topic. If you're completely new to unit testing, consider reading them in the order they're introduced below: - **[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)**: Read this if you're having trouble using your application code from within your test files. - **[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)**: Read this to learn how to write `XCTestCase` tests that will help you write code faster and more effectively. - **[Don't Test Code, Instead Verify Behavior](BehavioralTesting.md)**: Read this to learn what kinds of tests speed you up, and which ones will only end up slowing you down. - **[Clearer Tests Using Nimble Assertions](NimbleAssertions.md)**: Read this to learn how to use Nimble to generate better failure messages. Better failure messages help you move faster, by spending less time figuring out why a test failed. - **[Organized Tests with Quick Examples and Example Groups](QuickExamplesAndGroups.md)**: Read this to learn how Quick can help you write even more effective tests, using *examples* and *example groups*. - **[Testing OS X and iOS Applications](TestingApps.md)**: Read this to learn more about testing code that uses the AppKit and UIKit frameworks. - **[Reducing Test Boilerplate with Shared Assertions](SharedExamples.md)**: Read this to learn how to share sets of assertions among your tests. - **[Configuring How Quick Behaves](ConfiguringQuick.md)**: Read this to learn how you can change how Quick behaves when running your test suite. - **[Using Quick in Objective-C](QuickInObjectiveC.md)**: Read this if you experience trouble using Quick in Objective-C. - **[Installing Quick](InstallingQuick.md)**: Read this for instructions on how to add Quick to your project, using Git submodules, CocoaPods, Carthage, or the Swift Package Manager. - **[Installing Quick File Templates](InstallingFileTemplates.md)**: Read this to learn how to install file templates that make writing Quick specs faster. - **[More Resources](MoreResources.md)** A list of additional resources on OS X and iOS testing. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/SettingUpYourXcodeProject.md ================================================ # Setting Up Tests in Your Xcode Project With the exception of the Command Line Tool project type, when you create a new project in Xcode 7, a unit test target is included by default. [See specific instructions for a Command Line Tool Project](#setting-up-a-test-target-for-a-command-line-tool-project). To write unit tests, you'll need to be able to use your main target's code from within your test target. ## Testing Swift Code Using Swift In order to test code written in Swift, you'll need to do two things: 1. Set "defines module" in your `.xcodeproj` to `YES`. * To do this in Xcode: Choose your project, then "Build Settings" header, then "Defines Modules" line, then select "Yes". 2. `@testable import YourAppModuleName` in your unit tests. This will expose Any `public` and `internal` (the default) symbols to your tests. `private` symbols are still unavailable. ```swift // MyAppTests.swift import XCTest @testable import MyModule class MyClassTests: XCTestCase { // ... } ``` > Some developers advocate adding Swift source files to your test target. However, this leads to [subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91), and is not recommended. ## Testing Objective-C Code Using Swift 1. Add a bridging header to your test target. 2. In the bridging header, import the file containing the code you'd like to test. ```objc // MyAppTests-BridgingHeader.h #import "MyClass.h" ``` You can now use the code from `MyClass.h` in your Swift test files. ## Testing Swift Code Using Objective-C 1. Bridge Swift classes and functions you'd like to test to Objective-C by using the `@objc` attribute. 2. Import your module's Swift headers in your unit tests. ```objc @import XCTest; #import "MyModule-Swift.h" @interface MyClassTests: XCTestCase // ... @end ``` ## Testing Objective-C Code Using Objective-C Import the file defining the code you'd like to test from within your test target: ```objc // MyAppTests.m @import XCTest; #import "MyClass.h" @interface MyClassTests: XCTestCase // ... @end ``` ### Setting Up a Test Target for a Command Line Tool Project 1. Add a target to your project in the project pane. 2. Select "OS X Unit Testing Bundle". 3. Edit the scheme of your main target. 4. Select the "Test" node, click the "+" under the "Info" heading, and select your testing bundle. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/SharedExamples.md ================================================ # Reducing Test Boilerplate with Shared Assertions In some cases, the same set of specifications apply to multiple objects. For example, consider a protocol called `Edible`. When a dolphin eats something `Edible`, the dolphin becomes happy. `Mackerel` and `Cod` are both edible. Quick allows you to easily test that a dolphin is happy to eat either one. The example below defines a set of "shared examples" for "something edible", and specifies that both mackerel and cod behave like "something edible": ```swift // Swift import Quick import Nimble class EdibleSharedExamplesConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("something edible") { (sharedExampleContext: SharedExampleContext) in it("makes dolphins happy") { let dolphin = Dolphin(happy: false) let edible = sharedExampleContext()["edible"] dolphin.eat(edible) expect(dolphin.isHappy).to(beTruthy()) } } } } class MackerelSpec: QuickSpec { override func spec() { var mackerel: Mackerel! beforeEach { mackerel = Mackerel() } itBehavesLike("something edible") { ["edible": mackerel] } } } class CodSpec: QuickSpec { override func spec() { var cod: Cod! beforeEach { cod = Cod() } itBehavesLike("something edible") { ["edible": cod] } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickConfigurationBegin(EdibleSharedExamplesConfiguration) + (void)configure:(Configuration *configuration) { sharedExamples(@"something edible", ^(QCKDSLSharedExampleContext exampleContext) { it(@"makes dolphins happy") { Dolphin *dolphin = [[Dolphin alloc] init]; dolphin.happy = NO; id edible = exampleContext()[@"edible"]; [dolphin eat:edible]; expect(dolphin.isHappy).to(beTruthy()) } }); } QuickConfigurationEnd QuickSpecBegin(MackerelSpec) __block Mackerel *mackerel = nil; beforeEach(^{ mackerel = [[Mackerel alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": mackerel }; }); QuickSpecEnd QuickSpecBegin(CodSpec) __block Mackerel *cod = nil; beforeEach(^{ cod = [[Cod alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": cod }; }); QuickSpecEnd ``` Shared examples can include any number of `it`, `context`, and `describe` blocks. They save a *lot* of typing when running the same tests against several different kinds of objects. In some cases, you won't need any additional context. In Swift, you can simply use `sharedExamples` closures that take no parameters. This might be useful when testing some sort of global state: ```swift // Swift import Quick sharedExamples("everything under the sea") { // ... } itBehavesLike("everything under the sea") ``` > In Objective-C, you'll have to pass a block that takes a `QCKDSLSharedExampleContext`, even if you don't plan on using that argument. Sorry, but that's the way the cookie crumbles! :cookie: :bomb: You can also "focus" shared examples using the `fitBehavesLike` function. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/en-us/TestingApps.md ================================================ # Testing OS X and iOS Applications *[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)* covers everything you need to know to test any Objective-C or Swift function or class. In this section, we'll go over a few additional hints for testing classes like `UIViewController` subclasses. > You can see a short lightning talk covering most of these topics [here](https://vimeo.com/115671189#t=37m50s) (the talk begins at 37'50"). ## Triggering `UIViewController` Lifecycle Events Normally, UIKit triggers lifecycle events for your view controller as it's presented within the app. When testing a `UIViewController`, however, you'll need to trigger these yourself. You can do so in one of three ways: 1. Accessing `UIViewController.view`, which triggers things like `UIViewController.viewDidLoad()`. 2. Use `UIViewController.beginAppearanceTransition()` to trigger most lifecycle events. 3. Directly calling methods like `UIViewController.viewDidLoad()` or `UIViewController.viewWillAppear()`. ```swift // Swift import Quick import Nimble import BananaApp class BananaViewControllerSpec: QuickSpec { override func spec() { var viewController: BananaViewController! beforeEach { viewController = BananaViewController() } describe(".viewDidLoad()") { beforeEach { // Method #1: Access the view to trigger BananaViewController.viewDidLoad(). let _ = viewController.view } it("sets the banana count label to zero") { // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal("0")) } } describe("the view") { beforeEach { // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. viewController.beginAppearanceTransition(true, animated: false) viewController.endAppearanceTransition() } // ... } describe(".viewWillDisappear()") { beforeEach { // Method #3: Directly call the lifecycle event. viewController.viewWillDisappear(false) } // ... } } } ``` ```objc // Objective-C @import Quick; @import Nimble; #import "BananaViewController.h" QuickSpecBegin(BananaViewControllerSpec) __block BananaViewController *viewController = nil; beforeEach(^{ viewController = [[BananaViewController alloc] init]; }); describe(@"-viewDidLoad", ^{ beforeEach(^{ // Method #1: Access the view to trigger -[BananaViewController viewDidLoad]. [viewController view]; }); it(@"sets the banana count label to zero", ^{ // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal(@"0")) }); }); describe(@"the view", ^{ beforeEach(^{ // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. [viewController beginAppearanceTransition:YES animated:NO]; [viewController endAppearanceTransition]; }); // ... }); describe(@"-viewWillDisappear", ^{ beforeEach(^{ // Method #3: Directly call the lifecycle event. [viewController viewWillDisappear:NO]; }); // ... }); QuickSpecEnd ``` ## Initializing View Controllers Defined in Storyboards To initialize view controllers defined in a storyboard, you'll need to assign a **Storyboard ID** to the view controller: ![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png) Once you've done so, you can instantiate the view controller from within your tests: ```swift // Swift var viewController: BananaViewController! beforeEach { // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. let storyboard = UIStoryboard(name: "Main", bundle: nil) // 2. Use the storyboard to instantiate the view controller. viewController = storyboard.instantiateViewControllerWithIdentifier( "BananaViewControllerID") as! BananaViewController } ``` ```objc // Objective-C __block BananaViewController *viewController = nil; beforeEach(^{ // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // 2. Use the storyboard to instantiate the view controller. viewController = [storyboard instantiateViewControllerWithIdentifier:@"BananaViewControllerID"]; }); ``` ## Triggering UIControl Events Like Button Taps Buttons and other UIKit classes inherit from `UIControl`, which defines methods that allow us to send control events, like button taps, programmatically. To test behavior that occurs when a button is tapped, you can write: ```swift // Swift describe("the 'more bananas' button") { it("increments the banana count label when tapped") { viewController.moreButton.sendActionsForControlEvents( UIControlEvents.TouchUpInside) expect(viewController.bananaCountLabel.text).to(equal("1")) } } ``` ```objc // Objective-C describe(@"the 'more bananas' button", ^{ it(@"increments the banana count label when tapped", ^{ [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside]; expect(viewController.bananaCountLabel.text).to(equal(@"1")); }); }); ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/ArrangeActAssert.md ================================================ # Effective Tests Using XCTest: Arrange, Act, and Assert XCTest や Quick に限らず、テストフレームワークを使用する際、このパターンに従うことで効率的なユニットテストを書くことができます。 1. Arrange(環境構築) 2. Act(実行) 3. Assert(動作確認) ## パターンに従ってテストを書く 例として Banana クラスを用意します。 ```swift // Banana/Banana.swift /** A delicious banana. Tastes better if you peel it first. */ public class Banana { private var isPeeled = false /** Peels the banana. */ public func peel() { isPeeled = true } /** You shouldn't eat a banana unless it's been peeled. */ public var isEdible: Bool { return isPeeled } } ``` ここでは `Banana.peel()` のテストをしてみましょう。このメソッドの期待する振る舞いはこのようになります。 ```swift // BananaTests/BananaTests.swift class BananaTests: XCTestCase { func testPeel() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } } ``` ## 簡潔なテスト名を用いる この `testPeel()` テストのおかげで `Banana.peel()` が正しく動作しない場合、すぐ気付くことができます。 我々のアプリケーションコードを変更することで正しく動作しないケース(テストが失敗するケース)はしばしば起こります。 テストが失敗する場合は下記どちらかのケースになります。 1. 間違えてアプリケーションコードを壊してしまっているため、直す必要がある 2. アプリケーションコードは期待したとおりに動いているが、もともと期待した機能が変わっているためテストコードを直す必要がある もしテストが失敗した場合、どちらのケースに当てはまる判断する必要が出てきます。そのためテスト名が分かりやすいことが重要になります。 良いテスト名とは、 1. 何をテストしているか明確であること 2. どのような時にテストがパスするか・失敗するか明確であること 例に挙げた `testPeel()` は良いテスト名でしょうか?分かりやすくしてみましょう。 ```diff // BananaTests.swift -func testPeel() { +func testPeel_makesTheBananaEdible() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } ``` 新しいテスト名は、 1. 何をテストしているか明確である: `testPeel` は `Banana.peel()` メソッドをテストしてることを示す。 2. どのような時にテストがパスするか明確である: `makesTheBananaEdible` はバナナが食べられるか(edible)どうかをテストしていることを示す。 ## テスト時の条件 人々がバナナを欲しい時、`offer()` というメソッドを使います。 ```swift // Banana/Offer.swift /** Given a banana, returns a string that can be used to offer someone the banana. */ public func offer(banana: Banana) -> String { if banana.isEdible { return "Hey, want a banana?" } else { return "Hey, want me to peel this banana for you?" } } ``` 私達のアプリケーションコードは2つのうちどちらかを実行します: 1. 食べられる(すでに皮がむかれている)バナナを注文するか 2. まだ食べられない(すでに皮がむかれている)バナナを注文するか 両方のケースをテストしてみましょう。 ```swift // BananaTests/OfferTests.swift class OfferTests: XCTestCase { func testOffer_whenTheBananaIsPeeled_offersTheBanana() { // Arrange: Create a banana and peel it. let banana = Banana() banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { // Arrange: Create a banana. let banana = Banana() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` 私達のテスト名は'どのような条件でテストをパスするか'を明確に表しています。 `whenTheBananaIsPeeled`, `offer()` のケースでは `offersTheBanana` となるべきです。またバナナの皮がむかれていない場合は? ここでは両方共テストしています。 ここで大事なことはアプリケーションコード内の各if文に対してそれぞれ1つのテストを持っていることです。 これはテストを書く際の重要なアプローチです。このアプローチでは全ての条件(if文)に関してテストされていることを保証します。 テストのうちどれか1つがでも失敗するようになったらコードの見直しをする必要があります。テスト名が分かりやすいとすぐにチェックすべき箇所が分かります。 ## `XCTestCase.setUp()`を用いて簡潔に環境構築をする `OfferTests` の2つのテストのどちらにも同じ"環境構築"のコードが入っています。 どちらのテストでも banana を作っています。このコードは一箇所にまとめるべきです。なぜでしょう? 1. そのままにしておく場合、もし `Banana` の生成方法が変わったら, 私たちは全てのテストを修正しないといけなくなります。 2. テストコードが短くなり、テストの可読性が向上します。 Banana の生成方法を `XCTestCase.setUp()` の中に移しましょう。`XCTestCase.setUp()` は各テストの実行前に一度呼び出されます。 ```diff // OfferTests.swift class OfferTests: XCTestCase { + var banana: Banana! + + override func setUp() { + super.setUp() + banana = Banana() + } + func testOffer_whenTheBananaIsPeeled_offersTheBanana() { - // Arrange: Create a banana and peel it. - let banana = Banana() + // Arrange: Peel the banana. banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { - // Arrange: Create a banana. - let banana = Banana() - // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` ## 複数のテストにまたがって環境構築を共有する もし複数のテストにまたがって同じ環境構築のコードを使っている部分があれば、 test target 内に'ヘルパー関数'を定義しましょう。 ```swift // BananaTests/BananaHelpers.swift internal func createNewPeeledBanana() -> Banana { let banana = Banana() banana.peel() return banana } ``` > 共通操作を定義するのに関数を使いましょう。関数は継承できず、状態を保持することができません。継承や状態を持たせる場合、テストの可読性が落ちてしまいます。 ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/BehavioralTesting.md ================================================ # コードをテストせず、動作を確認する テストはアプリケーションが**期待と異なる動作** をした時のみ失敗するようにすべきです。 アプリケーションコードが *何を* したかをテストすべきで、*どのように* したかをテストすべきではありません。 - アプリケーションが *何を* したかを確認するテストは **動作テスト(behavioral tests)** といいます。 - アプリケーションの動作が変わっていなくても、コードを変更すると失敗するようになるテストは **脆弱なテスト(brittle tests)** といいます。 ここで `GorillaDB` というバナナのデータベースを用意します。 `GorillaDB`は Key-Value 型のデータベースでバナナを保存することができます。 ```swift let database = GorillaDB() let banana = Banana() database.save(banana: banana, key: "my-banana") ``` そしてバナナをディスクから取り出すことができます。 ```swift let banana = database.load(key: "my-banana") ``` ## 脆弱なテスト(Brittle Tests) どのようにして動作をテストするのでしょう?一つの方法としてここではバナナを保存した後にバナナのデータベースのサイズをチェックします。 ```swift // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") // Assert: The size of the database should have increased by one. XCTAssertEqual(database.size, originalSize + 1) } ``` ここで `GorillaDB` のソースコードを変更したとします。データベースからの読み出しを速くするためにもっとも頻繁に使用するバナナをキャッシュに保持するようにします。 `GorillaDB.size` はキャッシュのサイズに合わせて大きくなります。この場合ディスクに保存しなくなるため上記のテストは失敗します。 ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/Screenshot_database_size_fail.png) ## 動作テスト(Behavioral Tests) 動作のテストの重要なポイントは アプリケーションコードに期待する動作を明確にすることです。 `testSave_savesTheBananaToTheDatabase` というテストで期待する動作は バナナをデータベースに "保存する" ことでしょうか? "保存する"というのは 後から読み出すことができる、という意味です。そのためデータベースのサイズが大きくなることをテストするのではなく、 バナナを読みだすことができるかをテストすべきです。 ```diff // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() - let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") - // Assert: The size of the database should have increased by one. - XCTAssertEqual(database.size, originalSize + 1) + // Assert: The bananas saved to and loaded from the database should be the same. + XCTAssertEqual(database.load(key: "test-banana"), banana) } ``` 動作テストを書く際の重要なポイント: - アプリケーションコードが何をすべきか明確にしているか? - テストが *動作のみ* をテストしているか?コードの動作が他の要因で意図しない動きにならないか。 ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/ConfiguringQuick.md ================================================ # Quickの挙動をカスタマイズしましょう QuickConfiguration を継承したクラスを作成し、`QuickConfiguration.Type.configure()` をオーバーライドすることで Quick の挙動をカスラマイズすることができます。 ```swift // Swift import Quick class ProjectDataTestConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { // ...set options on the configuration object here. } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(ProjectDataTestConfiguration) + (void)configure:(Configuration *configuration) { // ...set options on the configuration object here. } QuickConfigurationEnd ``` 一つのプロジェクトで複数の configuration を持つこともできますが どの順に configuration が実行されるか保証されません。 ## テスト全体で使う `beforeEach` と `afterEach` を追加する `QuickConfiguration.beforeEach` と `QuickConfiguration.afterEach` を使うと テストスイート内の各テストの実行前・実行後に走らせる処理を記述することができます。 ```swift // Swift import Quick import Sea class FinConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { Dorsal.sharedFin().height = 0 } } } ``` ```objc // Objective-C @import Quick; #import "Dorsal.h" QuickConfigurationBegin(FinConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEach:^{ [Dorsal sharedFin].height = 0; }]; } QuickConfigurationEnd ``` さらに現在実行中のテストに関するメタデータを取得することもできます。 ```swift // Swift import Quick class SeaConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { exampleMetadata in // ...use the example metadata object to access the current example name, and more. } } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(SeaConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { // ...use the example metadata object to access the current example name, and more. }]; } QuickConfigurationEnd ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/InstallingFileTemplates.md ================================================ # Quickファイル・テンプレートのインストール方法: Quick のリポジトリには Swift, Objective-C の両方で使用できるテンプレートが含まれています。 ## Alcatraz Quick のテンプレートは Xcode のパッケージマネージャーの [Alcatraz](https://github.com/supermarin/Alcatraz) 経由でインストールできます。 パッケージマネージャーから検索してみてください。 ![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png) ## Rakefile から手動でインストールする 手動でインストールすることもできます。 リポジトリを clone して rake task の `templates:install` を実行してください。 ```sh $ git clone git@github.com:Quick/Quick.git $ rake templates:install ``` アンインストールも簡単です、下記コマンドを実行してください。 ```sh $ rake templates:uninstall ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/InstallingQuick.md ================================================ # Quickのインストール方法 > **もし Xcode 7.1 を使用していたら** 現時点で最新バージョンの Quick--`v0.9.0` を使用してください > 最新のリリースは `swift-2.0` branch で開発されています。 Quick は examples(テスト) and example groups(テストグループ)の文法を提供します。 Nimble は `expect(...).to` の文法を提供します。 テストでは両方を使ってもいいですし、どちらか片方を使う、ということもできます。 Quick をテストに組み込むには3つの方法があります。 1. [Git Submodules](#git-submodules) 2. [CocoaPods](#cocoapods) 3. [Carthage](#carthage) 下記のインストール手順の中からどれか選択してインストールを進めてください。 インストール完了後、テストターゲット内のファイルで Quick を使用(`import Quick`)できるようになります。 ## Git Submodules Git submodules を使って Quick と Nimble をリンクします。手順の流れとしては下記の通りです。 1. Quick を submodule として追加. 2. プロジェクトで`.xcworkspace`を使っていなければ作成してください。 ([こちらを参照](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html)) 3. `Quick.xcodeproj` をプロジェクトの`.xcworkspace`に追加してください。 4. `Nimble.xcodeproj` をプロジェクトの`.xcworkspace`に追加してください。 `Nimble.xcodeproj` は `path/to/Quick/Externals/Nimble` にあります。 Quick が依存している Niimble を追加することで Quick のバージョンと Nimble のバージョンを合わせられます。 5. `Quick.framework` と `Nimble.framework` を BuildPhase の "Link Binary with Libraries" でリンクします。 もしまだ git submodules 用のディレクトリを作っていなかったら、まず始めにディレクトリを作成します。 `Vendor` という名前のディレクトリを用意しましょう。 **Step One:** Quick と Nimble を Git submodules としてダウンロードする ```sh git submodule add git@github.com:Quick/Quick.git Vendor/Quick git submodule add git@github.com:Quick/Nimble.git Vendor/Nimble git submodule update --init --recursive ``` **Step Two:** `Quick.xcodeproj` と `Nimble.xcodeproj` をプロジェクトの `.xcworkspace` に追加してください。 例として `Guanaco.xcworkspace` という workspace に Quick と Nimble を追加します。 ![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png) **Step Three:** build phase の `Link Binary with Libraries` に `Quick.framework` を追加してください。 2種類の `Quick.frameworks` が表示されますが 1 つは OS X 用で、もう 1 つが iOS 用です。 ![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png) `Nimble.framework` も同様に追加してください。これで完了です! **Submodules をアップデートする:** Quick と Nimble を最新バージョンにアップデートしたい場合は Quick ディレクトリに入って master リポジトリから pull してください。 ```sh cd /path/to/your/project/Vendor/Quick git checkout master git pull --rebase origin master ``` あなたのプロジェクトの Git リポジトリは submodule の変更もトラッキングしているので Quick submodules の更新を commit しておきます。 ```sh cd /path/to/your/project git commit -m "Updated Quick submodule" ``` **Quick Submodule を含んだ リポジトリを git clone する:** 他の開発者があなたのリポジトリを clone したあと、submodules を同様に pull してくる必要があります。`git submodule update` コマンドを実行することで pull できます。 ```sh git submodule update --init --recursive ``` git submodules に詳細な情報は[こちら](http://git-scm.com/book/en/Git-Tools-Submodules). ## CocoaPods CocoaPods でインストールする場合、バージョンは 0.36.0 以降である必要(CocoaPods が Swift をサポートしているバージョン)があります。 Podfile に Quick と Nimble を追加して下さい。 Swift では ```use_frameworks!``` も必要です。 ```rb # Podfile use_frameworks! def testing_pods pod 'Quick', '~> 0.9.0' pod 'Nimble', '3.0.0' end target 'MyTests' do testing_pods end target 'MyUITests' do testing_pods end ``` その後 pod install でダウンロード、リンクします。 ```sh pod install ``` ### Swift 1.2 で使う Quick の最新版(0.4.0)は Swift 2 (Xcode 7) 用ですが、Nimble の最新版(1.0.0) は Swift 1.2 (Xcode 6) 用です。 もし Xcode6 で使いたい場合は下記のようにバージョン指定してください。 ```sh target 'MyTests' do use_frameworks! pod 'Quick', '~>0.3.0' pod 'Nimble', '~>1.0.0' end ``` ## [Carthage](https://github.com/Carthage/Carthage) テストターゲットは "Embedded Binaries" section がないので framework はターゲットの "Link Binary With Libraries" に追加する必要があります。 build phase の "Copy Files" も同様にターゲットの framework destination を指定して下さい。 > Carthage は dynamic frameworks をビルドするので code signing identity に有効なものを設定しておく必要があります。 1. Quick を [`Cartfile.private`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate) に追加してください。 ``` github "Quick/Quick" github "Quick/Nimble" ``` 2. `carthage update` を実行してください。 3. `Carthage/Build/[platform]/` ディレクトリから Quick と Nimble をテストターゲットの "Link Binary With Libraries" に追加してください。 ![](http://i.imgur.com/pBkDDk5.png) 4. テストターゲットの build phase で "New Copy Files Phase" を選択してください。 ![](http://i.imgur.com/jZATIjQ.png) 5. "Destination" を "Frameworks" に設定して、2つの framework を追加してください。 ![](http://i.imgur.com/rpnyWGH.png) Carthage の dependency の管理方法はこの方法だけではありません。 詳細な情報はこちらを参照してください [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md) 。 ### (非推奨) 実機で Quick のテストを走らせる Quick で書かれたテストを実機で走らせるためには `Quick.framework` と `Nimble.framework` を `Embedded Binaries` としてテストターゲットの `ホストアプリケーション` に追加されます。 Embedded binary として framework を追加すると Xcode が自動的にホストアプリケーションにリンクしてしまいます。 ![](http://indiedev.kapsi.fi/images/embed-in-host.png) ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/MoreResources.md ================================================ # その他の参考資料 ## Quick のテストのサンプル Quick は[GitHub](https://github.com/github)や[ReactiveCocoa](https://github.com/ReactiveCocoa)を含む多くの企業、OSS プロジェクト、個人で利用されています。 下記リポジトリを参考にしてみてください。 - https://github.com/ReactiveCocoa/ReactiveCocoa - https://github.com/github/Archimedes - https://github.com/libgit2/objective-git - https://github.com/jspahrsummers/RXSwift - https://github.com/artsy/eidolon - https://github.com/Moya/Moya - https://github.com/nerdyc/Squeal - https://github.com/pepibumur/SugarRecord ## OS X と iOS Apps のテストに関する参考資料 - **[Quality Coding](http://qualitycoding.org/)**: ユニットテストにフォーカスした iOS 開発に関するブログ。 - **[OCMock Tutorials](http://ocmock.org/support/)**: テストでモックが必要な時に使用する OCMock のチュートリアル。 - **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**: 通信を行うコードをテストする時はこのライブラリを使用して下さい。 - **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**: Nimble の matcher の書き方に関するドキュメントはこちら([the Nimble documentation](https://github.com/Quick/Nimble)) ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/NimbleAssertions.md ================================================ # Nimble Assertions を使ってテストをより簡潔に テストが期待した通りに動作しない時、ユニットテストは **何が問題か** を明確にすべきです。 次の関数はサルの集団から馬鹿なサルだけを取得します。 ```swift public func silliest(monkeys: [Monkey]) -> [Monkey] { return monkeys.filter { $0.silliness == .VerySilly } } ``` ここでこの関数に対するテストを書いてみましょう。 ```swift func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) XCTAssertTrue(contains(sillyMonkeys, kiki)) } ``` このテストは下記のメッセージとともに失敗します。 ``` XCTAssertTrue failed ``` ![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png) 失敗した時は多くの情報を残すことが望ましいです。このメッセージのままではよく分かりません。 true や false だけではそれがなにか分かりません。このままではテストコードから原因を見つけるまでに時間がかかってしまいます。 ## 良い失敗メッセージを残す: Part 1: XCTAssert に手動でメッセージを渡す `XCTAssert` は失敗時にメッセージを指定することができます。 ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki)) + XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") } ``` しかし`XCTAssert`では自分でメッセージを指定しないといけません。 ## 良い失敗メッセージを残す: Part 2: Nimble Failure Messages を使う Nimble は Assert, 失敗時のメッセージを読みやすくしてくれます。 ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") + expect(sillyMonkeys).to(contain(kiki)) } ``` Nimble では自分でメッセージを指定しなくても Nimble がとても読みやすいメッセージを返してくれます。 ``` expected to contain , got <[Monkey(name: Jane, silliness: VerySilly)]> ``` ![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png) 失敗メッセージは何が問題かを明確にします:ここでは `kiki` が `silliest()` の戻り値に含まれることを期待していますが このテストでは 'jane' しか含まれていません。Nimble からのメッセージで何が問題かが分かりやすく伝えられるので、簡単に直すことができます。 ```diff public func silliest(monkeys: [Monkey]) -> [Monkey] { - return monkeys.filter { $0.silliness == .VerySilly } + return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly } } ``` Nimble は具体的な失敗メッセージを返してくれる多くの種類の Assertion を提供します。 `XCTAssert` と違って毎回自分でメッセージを指定することはありません。 Nimble の全ての assertion はこちらで確認できます: [Nimble README](https://github.com/Quick/Nimble) 。 下記に幾つかの例を示します。 ```swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/QuickExamplesAndGroups.md ================================================ # QuickのExamplesとExample Groupsで、たくさんのテストでも整理整頓 Quick では **examples** と **example groups** という特別な文法があります。 *[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)* では, 良いテスト名をつけることがとても重要だということを学びました。 テストが失敗した時、テスト名はアプリケーションコードを直すべきかテストを修正すべきかを判断する際の重要な材料になります。 Quick の examples(テスト) と example groups(テストグループ) は二つの役に立ちます。 1. 記述的なテスト名を書くためことをサポートします 2. テスト中の "環境構築" 部分におけるコードを簡略化します ## Examples の `it` Examples は 'it' という「コードがどのように動作すべきかを宣言する」関数を持ちます。 これは XCTest の test methods のようなものです。 'it' 関数は2つのパラメータ、example の名前と closure です。 下記のテストでは `Sea.Dolphin` クラスがどのように動作すべきかを記述しています。 この example では「新しく生成された Dolphin は smart で friendly であるべき」と書いています。 ```swift // Swift import Quick import Nimble import Sea class DolphinSpec: QuickSpec { override func spec() { it("is friendly") { expect(Dolphin().isFriendly).to(beTruthy()) } it("is smart") { expect(Dolphin().isSmart).to(beTruthy()) } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) it(@"is friendly", ^{ expect(@([[Dolphin new] isFriendly])).to(beTruthy()); }); it(@"is smart", ^{ expect(@([[Dolphin new] isSmart])).to(beTruthy()); }); QuickSpecEnd ``` Examples が何をテストしているかを明確にするために Description を使います。 Description は文字数制限がなくどの文字でも(絵文字さえも!)使うことができます。 :v: :sunglasses: ## Example Groups の `describe` と `context` Example groups では Example のグルーピングができ、 setup と teardown のコードを共有できます。 ### `describe` を使ってクラスと関数について記述する `Dolphin` クラスの `click` 関数の動作を記述する際に、 言い換えると関数が動作していることをテストする際に、 複数の 'it' example を `describe` を用いてグルーピングすることができます。 似ている examples をまとめることで可読性が向上します。 ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { describe("its click") { it("is loud") { let click = Dolphin().click() expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { let click = Dolphin().click() expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ describe(@"its click", ^{ it(@"is loud", ^{ Click *click = [[Dolphin new] click]; expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ Click *click = [[Dolphin new] click]; expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` Xcode でこれらの examples を実行すると`describe` と `it` の記述内容も表示されます。上記のテストの場合、下記のような出力になります。 1. `DolphinSpec.a_dolphin_its_click_is_loud` 2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency` それぞれの Example が何をテストしているかが明確ですね。 ### `beforeEach` と `afterEach` を使って Setup/Teardown のコードを共有する Example groups はテストの内容をただ分かりやすくするだけでなく同一グループ内のsetup/teardownコードを共有することができます。 下記の例では`its click`の Example group のテストを実行する前に `beforeEach`を使って新しい Dolphin のインスタンスを生成しています。 各 Example において "新しい" 状態でテストが行えます。 ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { var click: Click! beforeEach { click = dolphin.click() } it("is loud") { expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ __block Click *click = nil; beforeEach(^{ click = [dolphin click]; }); it(@"is loud", ^{ expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` この例では setup を共有することはあまりメリットがないように見えるかもしれませんが 複数の複雑なオブジェクトを生成する時などコード量を節約することができます。 それぞれの Example を実行した後に実行したいコードについては`afterEach`を使います。 ### 'context' を使ってある条件での動作を記述する 例の Dolphins(イルカ達) はエコーロケーションのために カチッと音を立てます('click ' 関数を呼び出します)。 イルカ達は特に興味のあるものに近づく時、それが何かを調べるために連続してエコーロケーション('click' 関数を呼び出します)を行います。 このシナリオにおいてテストが 異なる状況において click 関数の動作は異なる ということを表す必要があります。 基本的にイルカは一度音を鳴らすだけですが、イルカ達が興味があるものが近くにあると連続して音を鳴らします。 この状況について 'context' 関数を使って表します。ある 'context' では通常のケースで、もう一方の'context'ではイルカが興味あるものに近づいているケースです。 ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { context("when the dolphin is not near anything interesting") { it("is only emitted once") { expect(dolphin!.click().count).to(equal(1)) } } context("when the dolphin is near something interesting") { beforeEach { let ship = SunkenShip() Jamaica.dolphinCove.add(ship) Jamaica.dolphinCove.add(dolphin) } it("is emitted three times") { expect(dolphin.click().count).to(equal(3)) } } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ context(@"when the dolphin is not near anything interesting", ^{ it(@"is only emitted once", ^{ expect(@([[dolphin click] count])).to(equal(@1)); }); }); context(@"when the dolphin is near something interesting", ^{ beforeEach(^{ [[Jamaica dolphinCove] add:[SunkenShip new]]; [[Jamaica dolphinCove] add:dolphin]; }); it(@"is emitted three times", ^{ expect(@([[dolphin click] count])).to(equal(@3)); }); }); }); }); QuickSpecEnd ``` 厳密には `context` キーワードは `describe`と同じですがテストを理解しやすくなるので使い分けるとよいです。 ### テストの可読性: Quick と XCTest *[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)*で各条件についてそれぞれテストを用意するのがテストを書く際の重要な方法と述べましたが このアプローチで XCTest でテストを書くとテスト名が長くなってしまいます。 ```swift func testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() { // ... } ``` Quick を使うと条件について読みやすく、しかもそれぞれの Example group について環境構築が効率的に行えます。 ```swift describe("a dolphin") { describe("its click") { context("when the dolphin is near something interesting") { it("is emitted three times") { // ... } } } } ``` ## 一時的に Examples や Example Groups を無効にする 通っていない Example を一時的に無効にすることもできます。 Example や Example Groups の先頭に 'x' をつけると無効になります。 Examples の名前がテスト結果の中に出力されますがテストは実行されなくなります。 ```swift // Swift xdescribe("its click") { // ...none of the code in this closure will be run. } xcontext("when the dolphin is not near anything interesting") { // ...none of the code in this closure will be run. } xit("is only emitted once") { // ...none of the code in this closure will be run. } ``` ```objc // Objective-C xdescribe(@"its click", ^{ // ...none of the code in this closure will be run. }); xcontext(@"when the dolphin is not near anything interesting", ^{ // ...none of the code in this closure will be run. }); xit(@"is only emitted once", ^{ // ...none of the code in this closure will be run. }); ``` ## 指定した Examples だけ一時的に実行する 一部の Example だけ実行できると便利なこともあります。 そのような時は実行したい Example を 'fit' 関数を用いて指定します。 特定の Example group だけ実行したい時は`fdescribe` か `fcontext` を記述します。 ※もともと書いてあるテストコードの先頭に 'f' を追記するだけです。 ```swift fit("is loud") { // ...only this focused example will be run. } it("has a high frequency") { // ...this example is not focused, and will not be run. } fcontext("when the dolphin is near something interesting") { // ...examples in this group are also focused, so they'll be run. } ``` ```objc fit(@"is loud", { // ...only this focused example will be run. }); it(@"has a high frequency", ^{ // ...this example is not focused, and will not be run. }); fcontext(@"when the dolphin is near something interesting", ^{ // ...examples in this group are also focused, so they'll be run. }); ``` ## `beforeSuite` と `afterSuite` を使ってテスト全体に対する Setup/Teardown を行う テストの環境構築の中にはどの Example よりも先に、または最後に実行したいものがある場合もあります。 このような時は `beforeSuite` か `afterSuite` を使います。 下記の例では 全ての Example が実行される前に一度だけ海の全ての生物のデータベースが生成され、全ての Exmample が実行された後にデータベースを削除しています。 ```swift // Swift import Quick class DolphinSpec: QuickSpec { override func spec() { beforeSuite { OceanDatabase.createDatabase(name: "test.db") OceanDatabase.connectToDatabase(name: "test.db") } afterSuite { OceanDatabase.teardownDatabase(name: "test.db") } describe("a dolphin") { // ... } } } ``` ```objc // Objective-C @import Quick; QuickSpecBegin(DolphinSpec) beforeSuite(^{ [OceanDatabase createDatabase:@"test.db"]; [OceanDatabase connectToDatabase:@"test.db"]; }); afterSuite(^{ [OceanDatabase teardownDatabase:@"test.db"]; }); describe(@"a dolphin", ^{ // ... }); QuickSpecEnd ``` `beforeSuite` and `afterSuite` は必要な数だけ定義することができます。 全ての `beforeSuite` の closure は全てのテストが実行される前に実行され、 全ての `afterSuite` の closure は全てのテストが実行された後に実行されます。 複数の `beforeSuite`(`afterSuite`) の closure を記述した場合、これらの実行順序は記述した順序で実行されるかは保証されません。 ## 実行中の Example でメタデータにアクセスする 実行中の Example の中で、Example名を知りたいケース、これまでに何件の Example を実行したかを知りたいケースがあるかもしれません。 Quick ではこれらの情報に `beforeEach` と `afterEach` の closure の中からアクセスすることができます。 ```swift beforeEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) is about to be run.") } afterEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) has run.") } ``` ```objc beforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l is about to be run.", (long)exampleMetadata.exampleIndex); }); afterEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l has run.", (long)exampleMetadata.exampleIndex); }); ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/QuickInObjectiveC.md ================================================ # Objective-C で Quick を使う Quick は Swift でも Objective-C でも問題なく動作します。 ですが、Objective-C で Quick を使う場合、2点気を付けておきべきことがあります。 ## 簡略記法 Objective-C で Quick を import すると 'it' と `itShouldBehaveLike` というマクロが定義されます。 また、`context()` and `describe()`といった関数も同様に定義されます。 もしプロジェクトですでに同じ名前のシンボルを定義していた場合、重複のためビルドエラーになります。 その場合は下記のように`QUICK_DISABLE_SHORT_SYNTAX`を定義してこの機能を無効にしてください。 ```objc #define QUICK_DISABLE_SHORT_SYNTAX 1 @import Quick; QuickSpecBegin(DolphinSpec) // ... QuickSpecEnd ``` `QUICK_DISABLE_SHORT_SYNTAX`マクロは Quick ヘッダを import する前に定義する必要があります。 ## Swift のファイルを テストターゲットに含める テストターゲットの中に Swift のファイルが含まれていないと Swift stlib が リンクされないため Quick が正しく実行されません。 Swift のファイルが含まれていないと下記のようなエラーが発生します。 ``` *** Test session exited(82) without checking in. Executable cannot be loaded for some other reason, such as a problem with a library it depends on or a code signature/entitlements mismatch. ``` To fix the problem, add a blank file called `SwiftSpec.swift` to your test target: 修正するためには `SwiftSpec.swift` という名前の空のファイルをテストターゲットに追加してください。 ```swift // SwiftSpec.swift import Quick ``` > この問題に関する詳細情報はこちら https://github.com/Quick/Quick/issues/164. ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/README.md ================================================ # テストの書き方、Quickの使い方 Quickでテストを書くと、SwiftとObjective-Cで書かれたプログラムがどう動作しているか楽に確認できます。 ところが、有用なテストはQuickを使わなくても書けます。 役に立つテストが書けるようになるには、Quickのようなフレームワークの使い方を覚える必要はありません。 このディレクトリにあるファイルは、QuickかXCTestかを問わず、 「役に立つ」テストとは何か、そしてどうやってそういったテストが書けるか、 それを拙文ながら説明しようとしています。 目次: (テストについて事前知識がまったくない方は、順に読んでいくことをオススメします。) - **[Xcodeでテストを用意しましょう](SettingUpYourXcodeProject.md)**: アプリのコードがテスト・ファイルから参照できない場合や、 その他スムーズにテストが動かない場合はこのファイルを読み返すといいかもしれません。 - **[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)**: 役に立つテストを書くための基本中の基本。これさえ覚えれば、 XCTestを使ってあなたも正確に動作するコードをすばやく書けるようになります。 - **[コードをテストするのではなく、動作の確認をしましょう](BehavioralTesting.md)**: 同じ「テスト」でも、開発を進めやすくするテストと、邪魔ばかりするテストとがあります。 見分ける方法は、このファイルを読めば分かります。 - **[Nimbleのassertでテストをより読みやすくしましょう](NimbleAssertions.md)**: Nimbleを使って、テストが失敗したときわかりやすいエラーメッセージを出すようにしましょう。 わかりやすいメッセージで、テストがなぜ失敗したのかが一瞬でわかって開発の速度があがります。 - **[QuickのExamplesとExample Groupsで、たくさんのテストでも整理整頓](QuickExamplesAndGroups.md)**: Quickを使う大きなメリットのひとつはexamplesとexample groupsです。 これでより簡潔にたくさんのテストが書けるようになります。 - **[OS XとiOSアプリのテスト](TestingApps.md)**: AppKitとUIKitを使ったコードをどうやってテストできるか説明します。 - **[assertの共有でボイラープレートコードをなくしましょう](SharedExamples.md)**: どうやってassertを共有できるか、なぜそうするのが望ましいのか説明します。 - **[Quickの挙動をカスタマイズしましょう](ConfiguringQuick.md)**: Quickがテストを実行するときの挙動をどうやって変えられるか説明します。 - **[Objective-CでQuickを使う方法・注意点](QuickInObjectiveC.md)**: QuickをObjective-Cで使ったときに思わぬ不具合・トラブルがあった場合、 これを読んでください。 - **[Quickのインストール方法](InstallingQuick.md)**: あなたのプロジェクトにQuickを導入する方法を説明します。Git submodules、 CocoaPods、Carthage、全部サポートしています! - **[Quickファイル・テンプレートのインストール方法](InstallingFileTemplates.md)**: Quickテストをすばやく作成するためのファイル・テンプレートをインストールする方法を説明します。 - **[その他の参考資料](MoreResources.md)** OS X・iOSのテストに関しての資料集を用意しています。 ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/SettingUpYourXcodeProject.md ================================================ # テストの準備をする Xcode7 では Command Line Tool プロジェクトを除き、デフォルトで Unit test target が生成されます。 [参照:コマンドラインツールプロジェクトでテストの準備をする](#コマンドラインツールプロジェクトでテストの準備をする). テストを書くためには Unit test targetから Main target のコードが使用できる必要があります。 ## Swift のコードを Swift でテストする Swift で書かれたコードをテストするためには下記2つの作業を行います。 1. プロジェクトファイル `.xcodeproj` の "defines module" を `YES` に設定します。 * Xcode で対象のプロジェクトを開き、"Build Settings" の "Defines Modules" の 項目を "Yes" にします。 2. 各テストファイルで `@testable import YourAppModuleName` を追記します。 追記することで public, internal のシンボルにアクセスできるようになります。`private` シンボルはアクセスできないままです。 ```swift // MyAppTests.swift import XCTest @testable import MyModule class MyClassTests: XCTestCase { // ... } ``` > Swift のファイルを Test target に含める、という方法もありますが、不具合を引き起こす([subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91)) ことがあるためお勧めしません。 ## Objective-C のコードを Swift でテストする 1. Bridging header を test target に追加します。 2. Bridging header 内で テストしたいコードを import します。 ```objc // MyAppTests-BridgingHeader.h #import "MyClass.h" ``` これで `MyClass.h' のコードを Swift のテストコードから使用できるようになります。 ## Swift のコードを Objective-C でテストする 1. テストしたい Swift のクラスと関数に`@objc`属性を付加します。 2. テストコードで Module の Swift header を import します。 ```objc @import XCTest; #import "MyModule-Swift.h" @interface MyClassTests: XCTestCase // ... @end ``` ## Objective-C のコードを Objective-C でテストする テストコード内でテスト対象を import します。 ```objc // MyAppTests.m @import XCTest; #import "MyClass.h" @interface MyClassTests: XCTestCase // ... @end ``` ### コマンドラインツールプロジェクトでテストの準備をする 1. プロジェクトのペインからターゲットを追加(+ボタンを押下) 2. "OS X Unit Testing Bundle" または "iOS Unit Testing Bundle" を選択 3. Main target で "Edit the scheme" を選択 4. "Test" を選択, "Info" タブで "+" をクリックして追加した testing bundle を選択 ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/SharedExamples.md ================================================ # assertの共有でボイラープレートコードをなくしましょう 複数のオブジェクトに対象して同じ内容のテストを行いたい場合があります。 例えば `Edible` という protocol があるとします。 イルカ(dolphin)が何か食べられる(`Edible`)なものを食べるとイルカが幸せになります。 サバ(Mackerel)とタラ(Cod)は食べられる(Edibleな)ものです。 Quick は「イルカがどちらかを食べて幸せになる」ということを簡単にテストすることできます。 下記で示すテストは "(何かを食べる)something edible" という共有できるテスト(Shared examples)を定義しています。 また、この共有できるテストでサバ(Mackerel)とタラ(Cod)を食べることについてのテストを記述しています。 ```swift // Swift import Quick import Nimble class EdibleSharedExamplesConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("something edible") { (sharedExampleContext: SharedExampleContext) in it("makes dolphins happy") { let dolphin = Dolphin(happy: false) let edible = sharedExampleContext()["edible"] dolphin.eat(edible) expect(dolphin.isHappy).to(beTruthy()) } } } } class MackerelSpec: QuickSpec { override func spec() { var mackerel: Mackerel! beforeEach { mackerel = Mackerel() } itBehavesLike("something edible") { ["edible": mackerel] } } } class CodSpec: QuickSpec { override func spec() { var cod: Cod! beforeEach { cod = Cod() } itBehavesLike("something edible") { ["edible": cod] } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickConfigurationBegin(EdibleSharedExamplesConfiguration) + (void)configure:(Configuration *configuration) { sharedExamples(@"something edible", ^(QCKDSLSharedExampleContext exampleContext) { it(@"makes dolphins happy") { Dolphin *dolphin = [[Dolphin alloc] init]; dolphin.happy = NO; id edible = exampleContext()[@"edible"]; [dolphin eat:edible]; expect(dolphin.isHappy).to(beTruthy()) } }); } QuickConfigurationEnd QuickSpecBegin(MackerelSpec) __block Mackerel *mackerel = nil; beforeEach(^{ mackerel = [[Mackerel alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": mackerel }; }); QuickSpecEnd QuickSpecBegin(CodSpec) __block Mackerel *cod = nil; beforeEach(^{ cod = [[Cod alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": cod }; }); QuickSpecEnd ``` Shared examples は `it`, `context` や `describe` のブロックをいくつでも含めることができます。 これは異なる種類の対象についてテストをする際のコードを節約することができます。 あるケースでは context を追加する必要もありません。 Swift では `sharedExamples` closure を使って共有できるテストを定義することができます。 このテクニックはある時点での状態をテストしたい時などに役に立つかもしれません。 In some cases, you won't need any additional context. In Swift, you can simply use `sharedExamples` closures that take no parameters. This might be useful when testing some sort of global state: ```swift // Swift import Quick sharedExamples("everything under the sea") { // ... } itBehavesLike("everything under the sea") ``` > Objective-Cでは, `QCKDSLSharedExampleContext` を引数に取る block を渡すことができます。※QCKDSLSharedExampleContext を使う予定がなくても引数に取る block を用意してください。めんどくさくても。世の中そんなもんです。 :cookie: :bomb: 'itBehavesLike' の先頭に 'f' を加えて(`fitBehavesLike`) として共有できるテストのみ実行することもできます。 ================================================ FILE: Carthage/Checkouts/Quick/Documentation/ja/TestingApps.md ================================================ # Testing OS X and iOS Applications *[Xcodeでテストを用意しましょう](SettingUpYourXcodeProject.md)*では Objective-C や Swift の関数やクラスを テストするために必要なことを述べました。ここでは `UIViewController` のサブクラスなどをテストする際のポイントを述べます。 > 関連する LT がありますのでこちらも参考にしてください。 [here](https://vimeo.com/115671189#t=37m50s) (37'50" から始まる部分です)。 ## `UIViewController` のライフサイクルイベントを発火させる 通常は UIKit が view controller のライフサイクルイベントを発火しますが、 テストをする時は自分たちでライフサイクルイベントを発火させる必要があります。 呼び出すには3つの方法があります。 1. `UIViewController.view`にアクセスする、すると `UIViewController.viewDidLoad()` のイベントが発火します。 2. `UIViewController.beginAppearanceTransition()` を呼び出すとほとんどのライフサイクルイベントが発火します。。 3. `UIViewController.viewDidLoad()` や `UIViewController.viewWillAppear()` などのライフサイクルに関わる関数を直接呼び出す。 ```swift // Swift import Quick import Nimble import BananaApp class BananaViewControllerSpec: QuickSpec { override func spec() { var viewController: BananaViewController! beforeEach { viewController = BananaViewController() } describe(".viewDidLoad()") { beforeEach { // Method #1: Access the view to trigger BananaViewController.viewDidLoad(). let _ = viewController.view } it("sets the banana count label to zero") { // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal("0")) } } describe("the view") { beforeEach { // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. viewController.beginAppearanceTransition(true, animated: false) viewController.endAppearanceTransition() } // ... } describe(".viewWillDisappear()") { beforeEach { // Method #3: Directly call the lifecycle event. viewController.viewWillDisappear(false) } // ... } } } ``` ```objc // Objective-C @import Quick; @import Nimble; #import "BananaViewController.h" QuickSpecBegin(BananaViewControllerSpec) __block BananaViewController *viewController = nil; beforeEach(^{ viewController = [[BananaViewController alloc] init]; }); describe(@"-viewDidLoad", ^{ beforeEach(^{ // Method #1: Access the view to trigger -[BananaViewController viewDidLoad]. [viewController view]; }); it(@"sets the banana count label to zero", ^{ // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal(@"0")) }); }); describe(@"the view", ^{ beforeEach(^{ // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. [viewController beginAppearanceTransition:YES animated:NO]; [viewController endAppearanceTransition]; }); // ... }); describe(@"-viewWillDisappear", ^{ beforeEach(^{ // Method #3: Directly call the lifecycle event. [viewController viewWillDisappear:NO]; }); // ... }); QuickSpecEnd ``` ## Storyboard 内に定義した View Controller を初期化する Storyboard 内に定義した View Controller を初期化する際は **Storyboard ID** を定義しておく必要があります。 ![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png) **Storyboard ID** を定義しておくとテストコードから ViewController を初期化することができます。 ```swift // Swift var viewController: BananaViewController! beforeEach { // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. let storyboard = UIStoryboard(name: "Main", bundle: nil) // 2. Use the storyboard to instantiate the view controller. viewController = storyboard.instantiateViewControllerWithIdentifier( "BananaViewControllerID") as! BananaViewController } ``` ```objc // Objective-C __block BananaViewController *viewController = nil; beforeEach(^{ // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // 2. Use the storyboard to instantiate the view controller. viewController = [storyboard instantiateViewControllerWithIdentifier:@"BananaViewControllerID"]; }); ``` ## ボタンをタップされた、などの UIControl Events を発火させる ボタンや他の UIControl を継承したクラスは UIControl イベントを発火させる関数を持っています。 ボタンをタップされた時の動作をテストするにはこのように書くことができます: ```swift // Swift describe("the 'more bananas' button") { it("increments the banana count label when tapped") { viewController.moreButton.sendActionsForControlEvents( UIControlEvents.TouchUpInside) expect(viewController.bananaCountLabel.text).to(equal("1")) } } ``` ```objc // Objective-C describe(@"the 'more bananas' button", ^{ it(@"increments the banana count label when tapped", ^{ [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside]; expect(viewController.bananaCountLabel.text).to(equal(@"1")); }); }); ``` ================================================ FILE: Carthage/Checkouts/Quick/Documentation/zh-cn/SettingUpYourXcodeProject.md ================================================ # 在项目中添加测试 除了命令行项目以外, 当你在Xcode 7中创建新项目时, 单元测试Target默认是包含的. [为命令行项目设置测试Target](#setting-up-a-test-target-for-a-command-line-tool-project). 要编写单元测试, 你需要能够在测试Target中使用主target代码. ## 用Swift测试Swift项目代码 为了测试用Swift写的代码, 你需要做以下两件事: 1. 将`.xcodeproj`中的 "defines module" 设置为 `YES`. * Xcode中具体操作方法: 选中你的项目, 选择 "Build Settings" 选项列表, 选中 "Defines Modules" 行, 修改其值为 "Yes". 2. 在单元测试中添加 `@testable import YourAppModuleName`. 这会把所有 `public` 和 `internal` (默认访问修饰符) 修饰符暴露给测试代码. 但`private` 修饰符仍旧保持私有. ```swift // MyAppTests.swift import XCTest @testable import MyModule class MyClassTests: XCTestCase { // ... } ``` > 一些开发者提倡添加Swift源文件至测试target. 然而这会导致以下问题 [subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91), 所以并不推荐. ## 使用Swift测试Objective-C项目代码 1. 给你的测试target添加bridging header文件. 2. 在bridging header文件中, 引入待测试的代码文件. ```objc // MyAppTests-BridgingHeader.h #import "MyClass.h" ``` 现在就可以在Swift测试文件中使用 `MyClass.h` 中的代码了 ## 使用Objective-C测试Swift项目代码 1. 使用 `@objc` 桥接需要使用Objective-C测试的Swift类和方法. 2. 在单元测试中引入模块的Swift头文件. ```objc @import XCTest; #import "MyModule-Swift.h" @interface MyClassTests: XCTestCase // ... @end ``` ## 使用Objective-C测试Objective-C项目代码 在测试target中引入待测试的代码文件: ```objc // MyAppTests.m @import XCTest; #import "MyClass.h" @interface MyClassTests: XCTestCase // ... @end ``` ### 为命令行项目设置测试Target 1. 在项目窗格中添加一个项目target. 2. 选择 "OS X Unit Testing Bundle". 3. 编辑主target的 scheme. 4. 选中 "Test" 条目, 单击 "Info" 下的 "+", 选择需要测试的 bundle. ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/.gitignore ================================================ .DS_Store xcuserdata/ build/ .idea DerivedData/ Nimble.framework.zip # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ .build/ ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/.ruby-version ================================================ system ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-02-25-a ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/.travis.yml ================================================ osx_image: xcode7.3 language: generic matrix: include: - os: osx sudo: required env: TYPE=podspec - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=9.0 TYPE=tvos - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx - os: osx env: TYPE=swiftpm - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=10.0 TYPE=ios osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=10.0 TYPE=tvos osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.12 TYPE=osx osx_image: xcode8 - os: linux dist: trusty sudo: required env: TYPE=swiftpm install: - if [[ "$TYPE" == "swiftpm" ]]; then eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)"; fi - if [[ "$TYPE" == "podspec" ]]; then sudo gem install bundler; bundle install; fi script: - ./test $TYPE ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/CONTRIBUTING.md ================================================ - [Welcome to Nimble!](#welcome-to-nimble!) - [Reporting Bugs](#reporting-bugs) - [Building the Project](#building-the-project) - [Pull Requests](#pull-requests) - [Style Conventions](#style-conventions) - [Core Members](#core-members) - [Code of Conduct](#code-of-conduct) # Welcome to Nimble! We're building a testing framework for a new generation of Swift and Objective-C developers. Nimble should be easy to use and easy to maintain. Let's keep things simple and well-tested. **tl;dr:** If you've added a file to the project, make sure it's included in both the OS X and iOS targets. ## Reporting Bugs Nothing is off-limits. If you're having a problem, we want to hear about it. - See a crash? File an issue. - Code isn't compiling, but you don't know why? Sounds like you should submit a new issue, bud. - Went to the kitchen, only to forget why you went in the first place? Better submit an issue. Be sure to include in your issue: - Your Xcode version (eg - Xcode 7.0.1 7A1001) - Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`) - What are the steps to reproduce this issue? - What platform are you using? (eg - OS X, iOS, watchOS, tvOS) - If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration - Are you using carthage or cocoapods? ## Building the Project - Use `Nimble.xcodeproj` to work on Nimble. ## Pull Requests - Nothing is trivial. Submit pull requests for anything: typos, whitespace, you name it. - Not all pull requests will be merged, but all will be acknowledged. If no one has provided feedback on your request, ping one of the owners by name. - Make sure your pull request includes any necessary updates to the README or other documentation. - Be sure the unit tests for both the OS X and iOS targets of Nimble before submitting your pull request. You can run all the OS X & iOS unit tests using `./test`. - If you've added a file to the project, make sure it's included in both the OS X and iOS targets. - The `master` branch will always support the stable Xcode version. Other branches will point to their corresponding versions they support. - If you're making a configuration change, make sure to edit both the xcode project and the podspec file. ### Style Conventions - Indent using 4 spaces. - Keep lines 100 characters or shorter. Break long statements into shorter ones over multiple lines. - In Objective-C, use `#pragma mark -` to mark public, internal, protocol, and superclass methods. ## Core Members If a few of your pull requests have been merged, and you'd like a controlling stake in the project, file an issue asking for write access to the repository. ### Code of Conduct Your conduct as a core member is your own responsibility, but here are some "ground rules": - Feel free to push whatever you want to master, and (if you have ownership permissions) to create any repositories you'd like. Ideally, however, all changes should be submitted as GitHub pull requests. No one should merge their own pull request, unless no other core members respond for at least a few days. If you'd like to create a new repository, it'd be nice if you created a GitHub issue and gathered some feedback first. - It'd be awesome if you could review, provide feedback on, and close issues or pull requests submitted to the project. Please provide kind, constructive feedback. Please don't be sarcastic or snarky. ### Creating a Release The process is relatively straight forward, but here's is a useful checklist for tagging: - Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` - Run the release script: `./script/release A.B.C release-notes-file` - The script will prompt you to create a new [GitHub release](https://github.com/Quick/Nimble/releases). - Use the same release notes you created for the tag, but tweak up formatting for GitHub. - Update [Quick](https://github.com/Quick/Quick) - Update Quick's submodule reference to the newly released Nimble version - Update Nimble version in `README.md` and Documentation in [Quick](https://github.com/Quick/Quick) if it's not a patch version update. - Announce! ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Gemfile ================================================ # A sample Gemfile source "https://rubygems.org" gem 'cocoapods' ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/LICENSE.md ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2014 Quick Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Nimble.podspec ================================================ Pod::Spec.new do |s| s.name = "Nimble" s.version = "4.1.0" s.summary = "A Matcher Framework for Swift and Objective-C" s.description = <<-DESC Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar. DESC s.homepage = "https://github.com/Quick/Nimble" s.license = { :type => "Apache 2.0", :file => "LICENSE.md" } s.author = "Quick Contributors" s.ios.deployment_target = "7.0" s.osx.deployment_target = "10.9" s.tvos.deployment_target = "9.0" s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } s.source_files = "Sources/Nimble/**/*.{swift,h,m}" s.private_header_files = "Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h" s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" s.weak_framework = "XCTest" s.requires_arc = true s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"' } end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; }; 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; }; 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; }; 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531; remoteInfo = "Nimble-tvOS"; }; 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = ""; }; 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = ""; }; 1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = ""; }; 1F1871BC1CA89EDB00A34BF2 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = ""; }; 1F1871BD1CA89EDB00A34BF2 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = ""; }; 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = ""; }; 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = ""; }; 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBStringify.h; sourceTree = ""; }; 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBStringify.m; sourceTree = ""; }; 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBExpectation.swift; sourceTree = ""; }; 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBObjCMatcher.swift; sourceTree = ""; }; 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExceptionCapture.swift; sourceTree = ""; }; 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = ""; }; 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = ""; }; 1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = ""; }; 1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = ""; }; 1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.markdown; }; 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = ""; }; 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = ""; }; 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = ""; }; 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = ""; }; 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = ""; }; 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = ""; }; 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = ""; }; 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = ""; }; 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = ""; }; 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = ""; }; 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = ""; }; 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = ""; }; 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = ""; }; 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = ""; }; 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = ""; }; 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = ""; }; 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = ""; }; 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = ""; }; 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = ""; }; 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = ""; }; 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = ""; }; 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = ""; }; 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = ""; }; 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoidTest.swift; sourceTree = ""; }; 1F91DD301C74BF61002C309F /* BeVoid.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoid.swift; sourceTree = ""; }; 1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = ""; }; 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = ""; }; 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = ""; }; 1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = ""; }; 1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = ""; }; 1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = ""; }; 1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = ""; }; 1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = ""; }; 1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = ""; }; 1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = ""; }; 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = ""; }; 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = ""; }; 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = ""; }; 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = ""; }; 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = ""; }; 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = ""; }; 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = ""; }; 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotificationTest.swift; sourceTree = ""; }; 1FCF91521C61C8A400B15DCB /* PostNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotification.swift; sourceTree = ""; }; 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = ""; }; 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = ""; }; 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = ""; }; 1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; 1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = ""; }; 1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = ""; }; 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = ""; }; 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = ""; }; 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = ""; }; 1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = ""; }; 1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = ""; }; 1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = ""; }; 1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = ""; }; 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = ""; }; 1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; 1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; 1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = ""; }; 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = ""; }; 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = ""; }; 29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = ""; }; 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; 472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = ""; }; 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = ""; }; 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = ""; }; 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = ""; }; 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = ""; }; 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjcStringersTest.m; sourceTree = ""; }; 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = ""; }; 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = ""; }; AE4BA9AC1C88DDB500B73906 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; AE7ADE441C80BF8000B94CD3 /* MatchError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchError.swift; sourceTree = ""; }; AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchErrorTest.swift; sourceTree = ""; }; DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; DDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = ""; }; DDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = ""; }; DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = ""; }; F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+Register.m"; sourceTree = ""; }; F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CurrentTestCaseTracker.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 1F1A74251940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74311940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1511BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA9195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB4195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1F14FB61194180A7009F2A08 /* Helpers */ = { isa = PBXGroup; children = ( 1F14FB63194180C5009F2A08 /* utils.swift */, 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */, 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */, ); path = Helpers; sourceTree = ""; }; 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */ = { isa = PBXGroup; children = ( F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */, 1F1871BC1CA89EDB00A34BF2 /* DSL.h */, 1F1871BD1CA89EDB00A34BF2 /* DSL.m */, 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */, 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */, 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */, 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */, 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */, 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */, F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */, ); path = ObjectiveC; sourceTree = ""; }; 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */ = { isa = PBXGroup; children = ( 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */, ); path = NonObjectiveC; sourceTree = ""; }; 1F1A741F1940169200FFFC47 = { isa = PBXGroup; children = ( 1F2752D119445B8400052A26 /* README.md */, 1F1A742B1940169200FFFC47 /* Nimble */, 1F1A74381940169200FFFC47 /* NimbleTests */, 1F1A742A1940169200FFFC47 /* Products */, ); sourceTree = ""; }; 1F1A742A1940169200FFFC47 /* Products */ = { isa = PBXGroup; children = ( 1F1A74291940169200FFFC47 /* Nimble.framework */, 1F1A74341940169200FFFC47 /* NimbleTests.xctest */, 1F925EAD195C0D6300ED456B /* Nimble.framework */, 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, ); name = Products; sourceTree = ""; }; 1F1A742B1940169200FFFC47 /* Nimble */ = { isa = PBXGroup; children = ( 1FD8CD041968AB07008ED995 /* Adapters */, 1FD8CD081968AB07008ED995 /* DSL.swift */, DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */, 1FD8CD091968AB07008ED995 /* Expectation.swift */, 1FD8CD0A1968AB07008ED995 /* Expression.swift */, 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */, 1F1A742D1940169200FFFC47 /* Info.plist */, 1FD8CD0C1968AB07008ED995 /* Matchers */, 1F1A742E1940169200FFFC47 /* Nimble.h */, 1FD8CD241968AB07008ED995 /* Utils */, ); name = Nimble; path = Sources/Nimble; sourceTree = ""; }; 1F1A74381940169200FFFC47 /* NimbleTests */ = { isa = PBXGroup; children = ( 1F925EE5195C121200ED456B /* AsynchronousTest.swift */, 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */, 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */, 1FFD729A1963FC8200CD29A2 /* objc */, 1F14FB61194180A7009F2A08 /* Helpers */, 1F925EE3195C11B000ED456B /* Matchers */, 1F1A74391940169200FFFC47 /* Supporting Files */, ); name = NimbleTests; path = Tests/Nimble; sourceTree = ""; }; 1F1A74391940169200FFFC47 /* Supporting Files */ = { isa = PBXGroup; children = ( 1F1A743A1940169200FFFC47 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 1F925EE3195C11B000ED456B /* Matchers */ = { isa = PBXGroup; children = ( DD72EC631A93874A002F7651 /* AllPassTest.swift */, 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */, 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */, 1F925EF5195C147800ED456B /* BeCloseToTest.swift */, 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */, 1F925EFB195C186800ED456B /* BeginWithTest.swift */, 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */, 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */, DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */, 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */, 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */, 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */, 1F925EEE195C136500ED456B /* BeLogicalTest.swift */, 1F925EF8195C175000ED456B /* BeNilTest.swift */, 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */, 1F925F01195C189500ED456B /* ContainTest.swift */, 1F925EFE195C187600ED456B /* EndWithTest.swift */, 1F925F04195C18B700ED456B /* EqualTest.swift */, 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */, DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */, 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */, 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */, 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */, 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */, AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD041968AB07008ED995 /* Adapters */ = { isa = PBXGroup; children = ( 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */, 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */, 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */, 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */, 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */, 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */, 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */, ); path = Adapters; sourceTree = ""; }; 1FD8CD0C1968AB07008ED995 /* Matchers */ = { isa = PBXGroup; children = ( DDB1BC781A92235600F743C3 /* AllPass.swift */, 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */, 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */, 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */, 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */, 1FD8CD101968AB07008ED995 /* BeEmpty.swift */, 1FD8CD111968AB07008ED995 /* BeginWith.swift */, 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */, 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */, 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */, 1FD8CD151968AB07008ED995 /* BeLessThan.swift */, 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */, 1FD8CD171968AB07008ED995 /* BeLogical.swift */, 1FD8CD181968AB07008ED995 /* BeNil.swift */, 1F91DD301C74BF61002C309F /* BeVoid.swift */, 1FD8CD1A1968AB07008ED995 /* Contain.swift */, 1FD8CD1B1968AB07008ED995 /* EndWith.swift */, 1FD8CD1C1968AB07008ED995 /* Equal.swift */, 472FD1341B9E085700C7B8DA /* HaveCount.swift */, DDB4D5EC19FE43C200E9D9FE /* Match.swift */, 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */, 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */, AE7ADE441C80BF8000B94CD3 /* MatchError.swift */, 1FCF91521C61C8A400B15DCB /* PostNotification.swift */, 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */, 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */, 29EA59651B551EE6002D767E /* ThrowError.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD241968AB07008ED995 /* Utils */ = { isa = PBXGroup; children = ( 1FD8CD251968AB07008ED995 /* Functional.swift */, 1FD8CD261968AB07008ED995 /* Async.swift */, 1FD8CD271968AB07008ED995 /* SourceLocation.swift */, 1FD8CD281968AB07008ED995 /* Stringers.swift */, AE4BA9AC1C88DDB500B73906 /* Errors.swift */, ); path = Utils; sourceTree = ""; }; 1FFD729A1963FC8200CD29A2 /* objc */ = { isa = PBXGroup; children = ( 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */, 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */, 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */, 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */, 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */, 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */, 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */, 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */, 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */, 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */, 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */, 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */, 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */, 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */, 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */, 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */, 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */, 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */, 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */, 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */, 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */, 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */, 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */, 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */, 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */, DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */, 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */, 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */, ); path = objc; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 1F1A74261940169200FFFC47 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */, 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */, 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */, 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1521BDCA0CE00C3A531 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */, 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */, 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */, 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAA195C0D6300ED456B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */, 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */, 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */, 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 1F1A74281940169200FFFC47 /* Nimble-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */; buildPhases = ( 1F1A74241940169200FFFC47 /* Sources */, 1F1A74251940169200FFFC47 /* Frameworks */, 1F1A74261940169200FFFC47 /* Headers */, 1F1A74271940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-iOS"; productName = "Nimble-iOS"; productReference = 1F1A74291940169200FFFC47 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */; buildPhases = ( 1F1A74301940169200FFFC47 /* Sources */, 1F1A74311940169200FFFC47 /* Frameworks */, 1F1A74321940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( 1F1A74371940169200FFFC47 /* PBXTargetDependency */, 1F925EA5195C0C8500ED456B /* PBXTargetDependency */, 1F925EA7195C0C8500ED456B /* PBXTargetDependency */, 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */, ); name = "Nimble-iOSTests"; productName = "Nimble-iOSTests"; productReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */; buildPhases = ( 1F5DF1501BDCA0CE00C3A531 /* Sources */, 1F5DF1511BDCA0CE00C3A531 /* Frameworks */, 1F5DF1521BDCA0CE00C3A531 /* Headers */, 1F5DF1531BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-tvOS"; productName = "Nimble-tvOS"; productReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */; buildPhases = ( 1F5DF15A1BDCA0CE00C3A531 /* Sources */, 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */, 1F5DF15C1BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */, ); name = "Nimble-tvOSTests"; productName = "Nimble-tvOSTests"; productReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F925EAC195C0D6300ED456B /* Nimble-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */; buildPhases = ( 1F925EA8195C0D6300ED456B /* Sources */, 1F925EA9195C0D6300ED456B /* Frameworks */, 1F925EAA195C0D6300ED456B /* Headers */, 1F925EAB195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-OSX"; productName = "Nimble-OSX"; productReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */; buildPhases = ( 1F925EB3195C0D6300ED456B /* Sources */, 1F925EB4195C0D6300ED456B /* Frameworks */, 1F925EB5195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( 1F925EBA195C0D6300ED456B /* PBXTargetDependency */, 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */, 1F9B7C001968AD760094EB8F /* PBXTargetDependency */, 1F9B7C021968AD820094EB8F /* PBXTargetDependency */, ); name = "Nimble-OSXTests"; productName = "Nimble-OSXTests"; productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 1F1A74201940169200FFFC47 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0710; ORGANIZATIONNAME = "Jeff Hui"; TargetAttributes = { 1F1A74281940169200FFFC47 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 1F1A74331940169200FFFC47 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 1F1A74281940169200FFFC47; }; 1F5DF1541BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F5DF15D1BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F925EAC195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 1F925EB6195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 1F925EAC195C0D6300ED456B; }; }; }; buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 1F1A741F1940169200FFFC47; productRefGroup = 1F1A742A1940169200FFFC47 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 1F1A74281940169200FFFC47 /* Nimble-iOS */, 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, 1F925EAC195C0D6300ED456B /* Nimble-OSX */, 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */, 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 1F1A74271940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74321940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1531BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15C1BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAB195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB5195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 1F1A74241940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */, 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */, AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */, DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */, 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */, 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */, 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */, 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */, AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */, 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */, 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74301940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */, 1F14FB64194180C5009F2A08 /* utils.swift in Sources */, DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F02195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1501BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */, 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */, 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */, 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */, 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */, 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */, 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */, 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */, 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */, 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */, AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */, 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */, 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */, 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */, 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */, 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */, 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */, 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */, 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */, 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */, 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */, 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */, 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */, 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */, AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */, 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */, 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */, 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */, 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */, 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */, 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */, 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */, 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */, 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */, 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */, 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */, 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */, 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */, 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */, 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15A1BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */, CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */, 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */, 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */, CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */, CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */, CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */, 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */, 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */, 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */, 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */, 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */, CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */, 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */, AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */, 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */, 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */, CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */, CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */, CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */, 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */, 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */, 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */, 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */, CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */, 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */, 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */, 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */, 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */, 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */, CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */, 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */, CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */, 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */, CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */, 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */, CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */, CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */, 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */, 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */, 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */, CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */, 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */, CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */, 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */, CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */, 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */, CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */, CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */, CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */, CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */, CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA8195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */, 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */, AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */, 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */, DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */, 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */, 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */, 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */, AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */, 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */, 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB3195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */, 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */, DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F03195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 1F1A74371940169200FFFC47 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */; }; 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */; targetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */; }; 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */; }; 1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */; }; 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1F1A743D1940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; 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_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_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 1F1A743E1940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 1F1A74401940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74411940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; }; name = Release; }; 1F1A74431940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74441940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; }; name = Release; }; 1F5DF1661BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1671BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { 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 = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F5DF1681BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1691BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F925EC1195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; 1F925EC2195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; 1F925EC4195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F925EC5195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A743D1940169200FFFC47 /* Debug */, 1F1A743E1940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74401940169200FFFC47 /* Debug */, 1F1A74411940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74431940169200FFFC47 /* Debug */, 1F1A74441940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1661BDCA0CE00C3A531 /* Debug */, 1F5DF1671BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1681BDCA0CE00C3A531 /* Debug */, 1F5DF1691BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC1195C0D6300ED456B /* Debug */, 1F925EC2195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC4195C0D6300ED456B /* Debug */, 1F925EC5195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 1F1A74201940169200FFFC47 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Package.swift ================================================ import PackageDescription let package = Package( name: "Nimble" ) ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/README.md ================================================ # Nimble Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by [Cedar](https://github.com/pivotal/cedar). ```swift // Swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` # How to Use Nimble **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest) - [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto) - [Custom Failure Messages](#custom-failure-messages) - [Type Checking](#type-checking) - [Operator Overloads](#operator-overloads) - [Lazily Computed Values](#lazily-computed-values) - [C Primitives](#c-primitives) - [Asynchronous Expectations](#asynchronous-expectations) - [Objective-C Support](#objective-c-support) - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) - [Built-in Matcher Functions](#built-in-matcher-functions) - [Equivalence](#equivalence) - [Identity](#identity) - [Comparisons](#comparisons) - [Types/Classes](#typesclasses) - [Truthiness](#truthiness) - [Swift Error Handling](#swift-error-handling) - [Exceptions](#exceptions) - [Collection Membership](#collection-membership) - [Strings](#strings) - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition) - [Verify collection count](#verify-collection-count) - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) - [Writing Your Own Matchers](#writing-your-own-matchers) - [Lazy Evaluation](#lazy-evaluation) - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - [Customizing Failure Messages](#customizing-failure-messages) - [Supporting Objective-C](#supporting-objective-c) - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers) - [Installing Nimble](#installing-nimble) - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) - [Using Nimble without XCTest](#using-nimble-without-xctest) # Some Background: Expressing Outcomes Using Assertions in XCTest Apple's Xcode includes the XCTest framework, which provides assertion macros to test whether code behaves properly. For example, to assert that `1 + 1 = 2`, XCTest has you write: ```swift // Swift XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two") ``` Or, in Objective-C: ```objc // Objective-C XCTAssertEqual(1 + 1, 2, @"expected one plus one to equal two"); ``` XCTest assertions have a couple of drawbacks: 1. **Not enough macros.** There's no easy way to assert that a string contains a particular substring, or that a number is less than or equal to another. 2. **It's hard to write asynchronous tests.** XCTest forces you to write a lot of boilerplate code. Nimble addresses these concerns. # Nimble: Expectations Using `expect(...).to` Nimble allows you to express expectations using a natural, easily understood language: ```swift // Swift import Nimble expect(seagull.squawk).to(equal("Squee!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).to(equal(@"Squee!")); ``` > The `expect` function autocompletes to include `file:` and `line:`, but these parameters are optional. Use the default values to have Xcode highlight the correct line when an expectation is not met. To perform the opposite expectation--to assert something is *not* equal--use `toNot` or `notTo`: ```swift // Swift import Nimble expect(seagull.squawk).toNot(equal("Oh, hello there!")) expect(seagull.squawk).notTo(equal("Oh, hello there!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).toNot(equal(@"Oh, hello there!")); expect(seagull.squawk).notTo(equal(@"Oh, hello there!")); ``` ## Custom Failure Messages Would you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text: ```swift // Swift expect(1 + 1).to(equal(3)) // failed - expected to equal <3>, got <2> expect(1 + 1).to(equal(3), description: "Make sure libKindergartenMath is loaded") // failed - Make sure libKindergartenMath is loaded // expected to equal <3>, got <2> ``` Or the *WithDescription version in Objective-C: ```objc // Objective-C @import Nimble; expect(@(1+1)).to(equal(@3)); // failed - expected to equal <3.0000>, got <2.0000> expect(@(1+1)).toWithDescription(equal(@3), @"Make sure libKindergartenMath is loaded"); // failed - Make sure libKindergartenMath is loaded // expected to equal <3.0000>, got <2.0000> ``` ## Type Checking Nimble makes sure you don't compare two types that don't match: ```swift // Swift // Does not compile: expect(1 + 1).to(equal("Squee!")) ``` > Nimble uses generics--only available in Swift--to ensure type correctness. That means type checking is not available when using Nimble in Objective-C. :sob: ## Operator Overloads Tired of so much typing? With Nimble, you can use overloaded operators like `==` for equivalence, or `>` for comparisons: ```swift // Swift // Passes if squawk does not equal "Hi!": expect(seagull.squawk) != "Hi!" // Passes if 10 is greater than 2: expect(10) > 2 ``` > Operator overloads are only available in Swift, so you won't be able to use this syntax in Objective-C. :broken_heart: ## Lazily Computed Values The `expect` function doesn't evaluate the value it's given until it's time to match. So Nimble can test whether an expression raises an exception once evaluated: ```swift // Swift // Note: Swift currently doesn't have exceptions. // Only Objective-C code can raise exceptions // that Nimble will catch. // (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) let exception = NSException( name: NSInternalInconsistencyException, reason: "Not enough fish in the sea.", userInfo: ["something": "is fishy"]) expect { exception.raise() }.to(raiseException()) // Also, you can customize raiseException to be more specific expect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException)) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea")) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea", userInfo: ["something": "is fishy"])) ``` Objective-C works the same way, but you must use the `expectAction` macro when making an expectation on an expression that has no return value: ```objc // Objective-C NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Not enough fish in the sea." userInfo:nil]; expectAction(^{ [exception raise]; }).to(raiseException()); // Use the property-block syntax to be more specific. expectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea"). userInfo(@{@"something": @"is fishy"})); // You can also pass a block for custom matching of the raised exception expectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(NSInternalInconsistencyException)); })); ``` ## C Primitives Some testing frameworks make it hard to test primitive C values. In Nimble, it just works: ```swift // Swift let actual: CInt = 1 let expectedValue: CInt = 1 expect(actual).to(equal(expectedValue)) ``` In fact, Nimble uses type inference, so you can write the above without explicitly specifying both types: ```swift // Swift expect(1 as CInt).to(equal(1)) ``` > In Objective-C, Nimble only supports Objective-C objects. To make expectations on primitive C values, wrap then in an object literal: ```objc expect(@(1 + 1)).to(equal(@2)); ``` ## Asynchronous Expectations In Nimble, it's easy to make expectations on values that are updated asynchronously. Just use `toEventually` or `toEventuallyNot`: ```swift // Swift dispatch_async(dispatch_get_main_queue()) { ocean.add("dolphins") ocean.add("whales") } expect(ocean).toEventually(contain("dolphins", "whales")) ``` ```objc // Objective-C dispatch_async(dispatch_get_main_queue(), ^{ [ocean add:@"dolphins"]; [ocean add:@"whales"]; }); expect(ocean).toEventually(contain(@"dolphins", @"whales")); ``` Note: toEventually triggers its polls on the main thread. Blocking the main thread will cause Nimble to stop the run loop. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In the above example, `ocean` is constantly re-evaluated. If it ever contains dolphins and whales, the expectation passes. If `ocean` still doesn't contain them, even after being continuously re-evaluated for one whole second, the expectation fails. Sometimes it takes more than a second for a value to update. In those cases, use the `timeout` parameter: ```swift // Swift // Waits three seconds for ocean to contain "starfish": expect(ocean).toEventually(contain("starfish"), timeout: 3) ``` ```objc // Objective-C // Waits three seconds for ocean to contain "starfish": expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); ``` You can also provide a callback by using the `waitUntil` function: ```swift // Swift waitUntil { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(0.5) done() } ``` ```objc // Objective-C waitUntil(^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:0.5]; done(); }); ``` `waitUntil` also optionally takes a timeout parameter: ```swift // Swift waitUntil(timeout: 10) { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(1) done() } ``` ```objc // Objective-C waitUntilTimeout(10, ^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:1]; done(); }); ``` Note: waitUntil triggers its timeout code on the main thread. Blocking the main thread will cause Nimble to stop the run loop to continue. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In some cases (e.g. when running on slower machines) it can be useful to modify the default timeout and poll interval values. This can be done as follows: ```swift // Swift // Increase the global timeout to 5 seconds: Nimble.AsyncDefaults.Timeout = 5 // Slow the polling interval to 0.1 seconds: Nimble.AsyncDefaults.PollInterval = 0.1 ``` ## Objective-C Support Nimble has full support for Objective-C. However, there are two things to keep in mind when using Nimble in Objective-C: 1. All parameters passed to the `expect` function, as well as matcher functions like `equal`, must be Objective-C objects: ```objc // Objective-C @import Nimble; expect(@(1 + 1)).to(equal(@2)); expect(@"Hello world").to(contain(@"world")); ``` 2. To make an expectation on an expression that does not return a value, such as `-[NSException raise]`, use `expectAction` instead of `expect`: ```objc // Objective-C expectAction(^{ [exception raise]; }).to(raiseException()); ``` ## Disabling Objective-C Shorthand Nimble provides a shorthand for expressing expectations using the `expect` function. To disable this shorthand in Objective-C, define the `NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before importing Nimble: ```objc #define NIMBLE_DISABLE_SHORT_SYNTAX 1 @import Nimble; NMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@"Squee!")); ``` > Disabling the shorthand is useful if you're testing functions with names that conflict with Nimble functions, such as `expect` or `equal`. If that's not the case, there's no point in disabling the shorthand. # Built-in Matcher Functions Nimble includes a wide variety of matcher functions. ## Equivalence ```swift // Swift // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) expect(actual) == expected // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) expect(actual) != expected ``` ```objc // Objective-C // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) ``` Values must be `Equatable`, `Comparable`, or subclasses of `NSObject`. `equal` will always fail when used to compare one or more `nil` values. ## Identity ```swift // Swift // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)) expect(actual) === expected // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)) expect(actual) !== expected ``` Its important to remember that `beIdenticalTo` only makes sense when comparing types with reference semantics, which have a notion of identity. In Swift, that means a `class`. This matcher will not work with types with value semantics such as `struct` or `enum`. If you need to compare two value types, you can either compare individual properties or if it makes sense to do so, make your type implement `Equatable` and use Nimble's equivalence matchers instead. ```objc // Objective-C // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)); // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)); ``` ## Comparisons ```swift // Swift expect(actual).to(beLessThan(expected)) expect(actual) < expected expect(actual).to(beLessThanOrEqualTo(expected)) expect(actual) <= expected expect(actual).to(beGreaterThan(expected)) expect(actual) > expected expect(actual).to(beGreaterThanOrEqualTo(expected)) expect(actual) >= expected ``` ```objc // Objective-C expect(actual).to(beLessThan(expected)); expect(actual).to(beLessThanOrEqualTo(expected)); expect(actual).to(beGreaterThan(expected)); expect(actual).to(beGreaterThanOrEqualTo(expected)); ``` > Values given to the comparison matchers above must implement `Comparable`. Because of how computers represent floating point numbers, assertions that two floating point numbers be equal will sometimes fail. To express that two numbers should be close to one another within a certain margin of error, use `beCloseTo`: ```swift // Swift expect(actual).to(beCloseTo(expected, within: delta)) ``` ```objc // Objective-C expect(actual).to(beCloseTo(expected).within(delta)); ``` For example, to assert that `10.01` is close to `10`, you can write: ```swift // Swift expect(10.01).to(beCloseTo(10, within: 0.1)) ``` ```objc // Objective-C expect(@(10.01)).to(beCloseTo(@10).within(0.1)); ``` There is also an operator shortcut available in Swift: ```swift // Swift expect(actual) ≈ expected expect(actual) ≈ (expected, delta) ``` (Type Option-x to get ≈ on a U.S. keyboard) The former version uses the default delta of 0.0001. Here is yet another way to do this: ```swift // Swift expect(actual) ≈ expected ± delta expect(actual) == expected ± delta ``` (Type Option-Shift-= to get ± on a U.S. keyboard) If you are comparing arrays of floating point numbers, you'll find the following useful: ```swift // Swift expect([0.0, 2.0]) ≈ [0.0001, 2.0001] expect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1)) ``` > Values given to the `beCloseTo` matcher must be coercable into a `Double`. ## Types/Classes ```swift // Swift // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)) // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)) ``` ```objc // Objective-C // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)); // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)); ``` > Instances must be Objective-C objects: subclasses of `NSObject`, or Swift objects bridged to Objective-C with the `@objc` prefix. For example, to assert that `dolphin` is a kind of `Mammal`: ```swift // Swift expect(dolphin).to(beAKindOf(Mammal)) ``` ```objc // Objective-C expect(dolphin).to(beAKindOf([Mammal class])); ``` > `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`. ## Truthiness ```swift // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()) // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()) // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()) // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()) // Passes if actual is nil: expect(actual).to(beNil()) ``` ```objc // Objective-C // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()); // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()); // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()); // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()); // Passes if actual is nil: expect(actual).to(beNil()); ``` ## Swift Error Handling If you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown. ```swift // Swift // Passes if somethingThatThrows() throws an ErrorType: expect{ try somethingThatThrows() }.to(throwError()) // Passes if somethingThatThrows() throws an error with a given domain: expect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in expect(error._domain).to(equal(NSCocoaErrorDomain)) }) // Passes if somethingThatThrows() throws an error with a given case: expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) // Passes if somethingThatThrows() throws an error with a given type: expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) ``` If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. ```swift // Swift let actual: ErrorType = … // Passes if actual contains any error value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum)) // Passes if actual contains the Timeout value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum.Timeout)) // Passes if actual contains an NSError equal to the given one: expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) ``` Note: This feature is only available in Swift. ## Exceptions ```swift // Swift // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name: expect(actual).to(raiseException(named: name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException(named: name, reason: reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect { exception.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(beginWith("a r")) }) ``` ```objc // Objective-C // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name expect(actual).to(raiseException().named(name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException().named(name).reason(reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(@"a r")); })); ``` Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise exceptions that Nimble will catch. ## Collection Membership ```swift // Swift // Passes if all of the expected values are members of actual: expect(actual).to(contain(expected...)) // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()) ``` ```objc // Objective-C // Passes if expected is a member of actual: expect(actual).to(contain(expected)); // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()); ``` > In Swift `contain` takes any number of arguments. The expectation passes if all of them are members of the collection. In Objective-C, `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27). For example, to assert that a list of sea creature names contains "dolphin" and "starfish": ```swift // Swift expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish")) ``` ```objc // Objective-C expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"dolphin")); expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"starfish")); ``` > `contain` and `beEmpty` expect collections to be instances of `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements. To test whether a set of elements is present at the beginning or end of an ordered collection, use `beginWith` and `endWith`: ```swift // Swift // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected...)) // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected...)) ``` ```objc // Objective-C // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected)); // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected)); ``` > `beginWith` and `endWith` expect collections to be instances of `NSArray`, or ordered Swift collections composed of `Equatable` elements. Like `contain`, in Objective-C `beginWith` and `endWith` only support a single argument [for now](https://github.com/Quick/Nimble/issues/27). ## Strings ```swift // Swift // Passes if actual contains substring expected: expect(actual).to(contain(expected)) // Passes if actual begins with substring: expect(actual).to(beginWith(expected)) // Passes if actual ends with substring: expect(actual).to(endWith(expected)) // Passes if actual is an empty string, "": expect(actual).to(beEmpty()) // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ```objc // Objective-C // Passes if actual contains substring expected: expect(actual).to(contain(expected)); // Passes if actual begins with substring: expect(actual).to(beginWith(expected)); // Passes if actual ends with substring: expect(actual).to(endWith(expected)); // Passes if actual is an empty string, "": expect(actual).to(beEmpty()); // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ## Checking if all elements of a collection pass a condition ```swift // Swift // with a custom function: expect([1,2,3,4]).to(allPass({$0 < 5})) // with another matcher: expect([1,2,3,4]).to(allPass(beLessThan(5))) ``` ```objc // Objective-C expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); ``` For Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type. For Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which uses another matcher is available here. ## Verify collection count ```swift // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` ```objc // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` For Swift the actual value must be a `CollectionType` such as array, dictionary or set. For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. ## Matching a value to any of a group of matchers ```swift // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) // in Swift you also have the option to use the || operator to achieve a similar function expect(82).to(beLessThan(50) || beGreaterThan(80)) ``` ```objc // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) ``` Note: This matcher allows you to chain any number of matchers together. This provides flexibility, but if you find yourself chaining many matchers together in one test, consider whether you could instead refactor that single test into multiple, more precisely focused tests for better coverage. # Writing Your Own Matchers In Nimble, matchers are Swift functions that take an expected value and return a `MatcherFunc` closure. Take `equal`, for example: ```swift // Swift public func equal(expectedValue: T?) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(expectedValue)>" return actualExpression.evaluate() == expectedValue } } ``` The return value of a `MatcherFunc` closure is a `Bool` that indicates whether the actual value matches the expectation: `true` if it does, or `false` if it doesn't. > The actual `equal` matcher function does not match when either `actual` or `expected` are nil; the example above has been edited for brevity. Since matchers are just Swift functions, you can define them anywhere: at the top of your test file, in a file shared by all of your tests, or in an Xcode project you distribute to others. > If you write a matcher you think everyone can use, consider adding it to Nimble's built-in set of matchers by sending a pull request! Or distribute it yourself via GitHub. For examples of how to write your own matchers, just check out the [`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Sources/Nimble/Matchers) to see how Nimble's built-in set of matchers are implemented. You can also check out the tips below. ## Lazy Evaluation `actualExpression` is a lazy, memoized closure around the value provided to the `expect` function. The expression can either be a closure or a value directly passed to `expect(...)`. In order to determine whether that value matches, custom matchers should call `actualExpression.evaluate()`: ```swift // Swift public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" return actualExpression.evaluate() == nil } } ``` In the above example, `actualExpression` is not `nil`--it is a closure that returns a value. The value it returns, which is accessed via the `evaluate()` method, may be `nil`. If that value is `nil`, the `beNil` matcher function returns `true`, indicating that the expectation passed. Use `expression.isClosure` to determine if the expression will be invoking a closure to produce its value. ## Type Checking via Swift Generics Using Swift's generics, matchers can constrain the type of the actual value passed to the `expect` function by modifying the return type. For example, the following matcher, `haveDescription`, only accepts actual values that implement the `Printable` protocol. It checks their `description` against the one provided to the matcher function, and passes if they are the same: ```swift // Swift public func haveDescription(description: String) -> MatcherFunc { return MatcherFunc { actual, failureMessage in return actual.evaluate().description == description } } ``` ## Customizing Failure Messages By default, Nimble outputs the following failure message when an expectation fails: ``` expected to match, got <\(actual)> ``` You can customize this message by modifying the `failureMessage` struct from within your `MatcherFunc` closure. To change the verb "match" to something else, update the `postfixMessage` property: ```swift // Swift // Outputs: expected to be under the sea, got <\(actual)> failureMessage.postfixMessage = "be under the sea" ``` You can change how the `actual` value is displayed by updating `failureMessage.actualValue`. Or, to remove it altogether, set it to `nil`: ```swift // Swift // Outputs: expected to be under the sea failureMessage.actualValue = nil failureMessage.postfixMessage = "be under the sea" ``` ## Supporting Objective-C To use a custom matcher written in Swift from Objective-C, you'll have to extend the `NMBObjCMatcher` class, adding a new class method for your custom matcher. The example below defines the class method `+[NMBObjCMatcher beNilMatcher]`: ```swift // Swift extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualBlock, failureMessage, location in let block = ({ actualBlock() as NSObject? }) let expr = Expression(expression: block, location: location) return beNil().matches(expr, failureMessage: failureMessage) } } } ``` The above allows you to use the matcher from Objective-C: ```objc // Objective-C expect(actual).to([NMBObjCMatcher beNilMatcher]()); ``` To make the syntax easier to use, define a C function that calls the class method: ```objc // Objective-C FOUNDATION_EXPORT id beNil() { return [NMBObjCMatcher beNilMatcher]; } ``` ### Properly Handling `nil` in Objective-C Matchers When supporting Objective-C, make sure you handle `nil` appropriately. Like [Cedar](https://github.com/pivotal/cedar/issues/100), **most matchers do not match with nil**. This is to bring prevent test writers from being surprised by `nil` values where they did not expect them. Nimble provides the `beNil` matcher function for test writer that want to make expectations on `nil` objects: ```objc // Objective-C expect(nil).to(equal(nil)); // fails expect(nil).to(beNil()); // passes ``` If your matcher does not want to match with nil, you use `NonNilMatcherFunc` and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will automatically generate expected value failure messages when they're nil. ```swift public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.evaluate() let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return beginWith(expected).matches(expr, failureMessage: failureMessage) } } } ``` # Installing Nimble > Nimble can be used on its own, or in conjunction with its sister project, [Quick](https://github.com/Quick/Quick). To install both Quick and Nimble, follow [the installation instructions in the Quick README](https://github.com/Quick/Quick#how-to-install-quick). Nimble can currently be installed in one of two ways: using CocoaPods, or with git submodules. ## Installing Nimble as a Submodule To use Nimble as a submodule to test your iOS or OS X applications, follow these 4 easy steps: 1. Clone the Nimble repository 2. Add Nimble.xcodeproj to the Xcode workspace for your project 3. Link Nimble.framework to your test target 4. Start writing expectations! For more detailed instructions on each of these steps, read [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick). Ignore the steps involving adding Quick to your project in order to install just Nimble. ## Installing Nimble via CocoaPods To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift support for CocoaPods. ```ruby platform :ios, '8.0' source 'https://github.com/CocoaPods/Specs.git' # Whatever pods you need for your app go here target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do use_frameworks! pod 'Nimble', '~> 4.0.0' end ``` Finally run `pod install`. ## Using Nimble without XCTest Nimble is integrated with XCTest to allow it work well when used in Xcode test bundles, however it can also be used in a standalone app. After installing Nimble using one of the above methods, there are two additional steps required to make this work. 1. Create a custom assertion handler and assign an instance of it to the global `NimbleAssertionHandler` variable. For example: ```swift class MyAssertionHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if (!assertion) { print("Expectation failed: \(message.stringValue)") } } } ``` ```swift // Somewhere before you use any assertions NimbleAssertionHandler = MyAssertionHandler() ``` 2. Add a post-build action to fix an issue with the Swift XCTest support library being unnecessarily copied into your app * Edit your scheme in Xcode, and navigate to Build -> Post-actions * Click the "+" icon and select "New Run Script Action" * Open the "Provide build settings from" dropdown and select your target * Enter the following script contents: ``` rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" ``` You can now use Nimble assertions in your code and handle failures as you see fit. ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift ================================================ import Foundation /// Protocol for the assertion handler that Nimble uses for all expectations. public protocol AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) } /// Global backing interface for assertions that Nimble creates. /// Defaults to a private test handler that passes through to XCTest. /// /// If XCTest is not available, you must assign your own assertion handler /// before using any matchers, otherwise Nimble will abort the program. /// /// @see AssertionHandler public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() }() ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift ================================================ /// AssertionDispatcher allows multiple AssertionHandlers to receive /// assertion messages. /// /// @warning Does not fully dispatch if one of the handlers raises an exception. /// This is possible with XCTest-based assertion handlers. /// public class AssertionDispatcher: AssertionHandler { let handlers: [AssertionHandler] public init(handlers: [AssertionHandler]) { self.handlers = handlers } public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { for handler in handlers { handler.assert(assertion, message: message, location: location) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift ================================================ import Foundation /// A data structure that stores information about an assertion when /// AssertionRecorder is set as the Nimble assertion handler. /// /// @see AssertionRecorder /// @see AssertionHandler public struct AssertionRecord: CustomStringConvertible { /// Whether the assertion succeeded or failed public let success: Bool /// The failure message the assertion would display on failure. public let message: FailureMessage /// The source location the expectation occurred on. public let location: SourceLocation public var description: String { return "AssertionRecord { success=\(success), message='\(message.stringValue)', location=\(location) }" } } /// An AssertionHandler that silently records assertions that Nimble makes. /// This is useful for testing failure messages for matchers. /// /// @see AssertionHandler public class AssertionRecorder : AssertionHandler { /// All the assertions that were captured by this recorder public var assertions = [AssertionRecord]() public init() {} public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { assertions.append( AssertionRecord( success: assertion, message: message, location: location)) } } /// Allows you to temporarily replace the current Nimble assertion handler with /// the one provided for the scope of the closure. /// /// Once the closure finishes, then the original Nimble assertion handler is restored. /// /// @see AssertionHandler public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { let environment = NimbleEnvironment.activeInstance let oldRecorder = environment.assertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ environment.assertionHandler = oldRecorder })) environment.assertionHandler = tempAssertionHandler capturer.tryBlock { try! closure() } } /// Captures expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about expectations /// that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherFailingExpectations public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler let recorder = AssertionRecorder() let handlers: [AssertionHandler] if silently { handlers = [recorder] } else { handlers = [recorder, previousRecorder] } let dispatcher = AssertionDispatcher(handlers: handlers) withAssertionHandler(dispatcher, closure: closure) return recorder.assertions } /// Captures failed expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about failed /// expectations that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherExpectations /// @see raiseException source for an example use case. public func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let assertions = gatherExpectations(silently: silently, closure: closure) return assertions.filter { assertion in !assertion.success } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift ================================================ import Foundation /// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this /// class' existance internal class NimbleEnvironment { static var activeInstance: NimbleEnvironment { get { let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] if let env = env as? NimbleEnvironment { return env } else { let newEnv = NimbleEnvironment() self.activeInstance = newEnv return newEnv } } set { NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue } } // TODO: eventually migrate the global to this environment value var assertionHandler: AssertionHandler { get { return NimbleAssertionHandler } set { NimbleAssertionHandler = newValue } } #if _runtime(_ObjC) var awaiter: Awaiter init() { awaiter = Awaiter( waitLock: AssertionWaitLock(), asyncQueue: dispatch_get_main_queue(), timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) } #endif } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift ================================================ import Foundation import XCTest /// Default handler for Nimble. This assertion handler passes failures along to /// XCTest. public class NimbleXCTestHandler : AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { recordFailure("\(message.stringValue)\n", location: location) } } } /// Alternative handler for Nimble. This assertion handler passes failures along /// to XCTest by attempting to reduce the failure message size. public class NimbleShortXCTestHandler: AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { let msg: String if let actual = message.actualValue { msg = "got: \(actual) \(message.postfixActual)" } else { msg = "expected \(message.to) \(message.postfixMessage)" } recordFailure("\(msg)\n", location: location) } } } /// Fallback handler in case XCTest is unavailable. This assertion handler will abort /// the program if it is invoked. class NimbleXCTestUnavailableHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") } } #if _runtime(_ObjC) /// Helper class providing access to the currently executing XCTestCase instance, if any @objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { @objc static let sharedInstance = CurrentTestCaseTracker() private(set) var currentTestCase: XCTestCase? @objc func testCaseWillStart(testCase: XCTestCase) { currentTestCase = testCase } @objc func testCaseDidFinish(testCase: XCTestCase) { currentTestCase = nil } } #endif func isXCTestAvailable() -> Bool { #if _runtime(_ObjC) // XCTest is weakly linked and so may not be present return NSClassFromString("XCTestCase") != nil #else return true #endif } private func recordFailure(message: String, location: SourceLocation) { #if _runtime(_ObjC) if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) } else { let msg = "Attempted to report a test failure to XCTest while no test case was running. " + "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() } #else XCTFail("\(message)\n", file: location.file, line: location.line) #endif } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift ================================================ import Foundation #if !_runtime(_ObjC) // swift-corelibs-foundation doesn't provide NSException at all, so provide a dummy class NSException {} #endif // NOTE: This file is not intended to be included in the Xcode project. It // is picked up by the Swift Package Manager during its build process. /// A dummy reimplementation of the `NMBExceptionCapture` class to serve /// as a stand-in for build and runtime environments that don't support /// Objective C. internal class ExceptionCapture { let finally: (() -> Void)? init(handler: ((NSException!) -> Void)?, finally: (() -> Void)?) { self.finally = finally } func tryBlock(unsafeBlock: (() -> Void)) { // We have no way of handling Objective C exceptions in Swift, // so we just go ahead and run the unsafeBlock as-is unsafeBlock() finally?() } } /// Compatibility with the actual Objective-C implementation typealias NMBExceptionCapture = ExceptionCapture ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h ================================================ #import #import SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") @interface CurrentTestCaseTracker : NSObject + (CurrentTestCaseTracker *)sharedInstance; @end @interface CurrentTestCaseTracker (Register) @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h ================================================ #import @class NMBExpectation; @class NMBObjCBeCloseToMatcher; @class NMBObjCRaiseExceptionMatcher; @protocol NMBMatcher; #define NIMBLE_EXPORT FOUNDATION_EXPORT #ifdef NIMBLE_DISABLE_SHORT_SYNTAX #define NIMBLE_SHORT(PROTO, ORIGINAL) #else #define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); } #endif NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT id NMB_equal(id expectedValue); NIMBLE_SHORT(id equal(id expectedValue), NMB_equal(expectedValue)); NIMBLE_EXPORT id NMB_haveCount(id expectedValue); NIMBLE_SHORT(id haveCount(id expectedValue), NMB_haveCount(expectedValue)); NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue), NMB_beCloseTo(expectedValue)); NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); NIMBLE_SHORT(id beAnInstanceOf(Class expectedClass), NMB_beAnInstanceOf(expectedClass)); NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); NIMBLE_SHORT(id beAKindOf(Class expectedClass), NMB_beAKindOf(expectedClass)); NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); NIMBLE_SHORT(id beginWith(id itemElementOrSubstring), NMB_beginWith(itemElementOrSubstring)); NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThan(NSNumber *expectedValue), NMB_beGreaterThan(expectedValue)); NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThanOrEqualTo(NSNumber *expectedValue), NMB_beGreaterThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), NMB_beIdenticalTo(expectedInstance)); NIMBLE_EXPORT id NMB_be(id expectedInstance); NIMBLE_SHORT(id be(id expectedInstance), NMB_be(expectedInstance)); NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), NMB_beLessThan(expectedValue)); NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThanOrEqualTo(NSNumber *expectedValue), NMB_beLessThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beTruthy(void); NIMBLE_SHORT(id beTruthy(void), NMB_beTruthy()); NIMBLE_EXPORT id NMB_beFalsy(void); NIMBLE_SHORT(id beFalsy(void), NMB_beFalsy()); NIMBLE_EXPORT id NMB_beTrue(void); NIMBLE_SHORT(id beTrue(void), NMB_beTrue()); NIMBLE_EXPORT id NMB_beFalse(void); NIMBLE_SHORT(id beFalse(void), NMB_beFalse()); NIMBLE_EXPORT id NMB_beNil(void); NIMBLE_SHORT(id beNil(void), NMB_beNil()); NIMBLE_EXPORT id NMB_beEmpty(void); NIMBLE_SHORT(id beEmpty(void), NMB_beEmpty()); NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; #define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define contain(...) NMB_contain(__VA_ARGS__) #endif NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); NIMBLE_SHORT(id endWith(id itemElementOrSubstring), NMB_endWith(itemElementOrSubstring)); NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), NMB_raiseException()); NIMBLE_EXPORT id NMB_match(id expectedValue); NIMBLE_SHORT(id match(id expectedValue), NMB_match(expectedValue)); NIMBLE_EXPORT id NMB_allPass(id matcher); NIMBLE_SHORT(id allPass(id matcher), NMB_allPass(matcher)); NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); #define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) #endif // In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, // define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout // and action arguments. See https://github.com/Quick/Quick/pull/185 for details. typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void))); typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void))); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); #define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__) #define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__) #define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__) #define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__) #define fail() failWithMessage(@"fail() always fails") #define waitUntilTimeout NMB_waitUntilTimeout #define waitUntil NMB_waitUntil #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m ================================================ #import #import SWIFT_CLASS("_TtC6Nimble7NMBWait") @interface NMBWait : NSObject + (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action; + (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action; @end NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) { return [[NMBExpectation alloc] initWithActualBlock:actualBlock negative:NO file:file line:line]; } NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) { return NMB_expect(^id{ actualBlock(); return nil; }, file, line); } NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) { return [NMBExpectation failWithMessage:msg file:file line:line]; } NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; } NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; } NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; } NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_be(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beTruthy() { return [NMBObjCMatcher beTruthyMatcher]; } NIMBLE_EXPORT id NMB_beFalsy() { return [NMBObjCMatcher beFalsyMatcher]; } NIMBLE_EXPORT id NMB_beTrue() { return [NMBObjCMatcher beTrueMatcher]; } NIMBLE_EXPORT id NMB_beFalse() { return [NMBObjCMatcher beFalseMatcher]; } NIMBLE_EXPORT id NMB_beNil() { return [NMBObjCMatcher beNilMatcher]; } NIMBLE_EXPORT id NMB_beEmpty() { return [NMBObjCMatcher beEmptyMatcher]; } NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; if (itemOrSubstring) { [itemOrSubstringArray addObject:itemOrSubstring]; va_list args; va_start(args, itemOrSubstring); id next; while ((next = va_arg(args, id))) { [itemOrSubstringArray addObject:next]; } va_end(args); } return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; } NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_equal(id expectedValue) { return [NMBObjCMatcher equalMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_haveCount(id expectedValue) { return [NMBObjCMatcher haveCountMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_match(id expectedValue) { return [NMBObjCMatcher matchMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_allPass(id expectedValue) { return [NMBObjCMatcher allPassMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; } NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { return [NMBObjCMatcher raiseExceptionMatcher]; } NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { [NMBWait untilTimeout:timeout file:file line:line action:action]; }; } NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) { return ^(void (^action)(void (^)(void))) { [NMBWait untilFile:file line:line action:action]; }; } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h ================================================ #import #import @interface NMBExceptionCapture : NSObject - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally; - (void)tryBlock:(void(^)())unsafeBlock; @end typedef void(^NMBSourceCallbackBlock)(BOOL successful); ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m ================================================ #import "NMBExceptionCapture.h" @interface NMBExceptionCapture () @property (nonatomic, copy) void(^handler)(NSException *exception); @property (nonatomic, copy) void(^finally)(); @end @implementation NMBExceptionCapture - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally { self = [super init]; if (self) { self.handler = handler; self.finally = finally; } return self; } - (void)tryBlock:(void(^)())unsafeBlock { @try { unsafeBlock(); } @catch (NSException *exception) { if (self.handler) { self.handler(exception); } } @finally { if (self.finally) { self.finally(); } } } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift ================================================ import Foundation #if _runtime(_ObjC) internal struct ObjCMatcherWrapper : Matcher { let matcher: NMBMatcher func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.matches( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.doesNotMatch( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } } // Equivalent to Expectation, but for Nimble's Objective-C interface public class NMBExpectation : NSObject { internal let _actualBlock: () -> NSObject! internal var _negative: Bool internal let _file: FileString internal let _line: UInt internal var _timeout: NSTimeInterval = 1.0 public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { self._actualBlock = actualBlock self._negative = negative self._file = file self._line = line } private var expectValue: Expectation { return expect(_file, line: _line){ self._actualBlock() as NSObject? } } public var withTimeout: (NSTimeInterval) -> NMBExpectation { return ({ timeout in self._timeout = timeout return self }) } public var to: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) }) } public var toWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) }) } public var toNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher) ) }) } public var toNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher), description: description ) }) } public var notTo: (NMBMatcher) -> Void { return toNot } public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } public var toEventually: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toEventuallyNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot } public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } public class func failWithMessage(message: String, file: FileString, line: UInt) { fail(message, location: SourceLocation(file: file, line: line)) } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift ================================================ import Foundation #if _runtime(_ObjC) public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool public class NMBObjCMatcher : NSObject, NMBMatcher { let _match: MatcherBlock let _doesNotMatch: MatcherBlock let canMatchNil: Bool public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) { self.canMatchNil = canMatchNil self._match = matcher self._doesNotMatch = notMatcher } public convenience init(matcher: MatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: MatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in return !matcher(actualExpression: actualExpression, failureMessage: failureMessage) })) } public convenience init(matcher: FullMatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false) }), notMatcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true) })) } private func canMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { do { if !canMatchNil { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return false } } } catch let error { failureMessage.actualValue = "an unexpected error thrown: \(error)" return false } return true } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _match( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _doesNotMatch( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h ================================================ @class NSString; /** * Returns a string appropriate for displaying in test output * from the provided value. * * @param value A value that will show up in a test's output. * * @return The string that is returned can be * customized per type by conforming a type to the `TestOutputStringConvertible` * protocol. When stringifying a non-`TestOutputStringConvertible` type, this * function will return the value's debug description and then its * normal description if available and in that order. Otherwise it * will return the result of constructing a string from the value. * * @see `TestOutputStringConvertible` */ extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m ================================================ #import "NMBStringify.h" #import NSString *_Nonnull NMBStringify(id _Nullable anyObject) { return [NMBStringer stringify:anyObject]; } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m ================================================ #import "CurrentTestCaseTracker.h" #import #import #pragma mark - Method Swizzling /// Swaps the implementations between two instance methods. /// /// @param class The class containing `originalSelector`. /// @param originalSelector Original method to replace. /// @param replacementSelector Replacement method. void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method replacementMethod = class_getInstanceMethod(class, replacementSelector); BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(replacementMethod), method_getTypeEncoding(replacementMethod)); if (didAddMethod) { class_replaceMethod(class, replacementSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, replacementMethod); } } #pragma mark - Private @interface XCTestObservationCenter (Private) - (void)_addLegacyTestObserver:(id)observer; @end @implementation XCTestObservationCenter (Register) /// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary /// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early /// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. /// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, /// falling back to registering after the first normal observer if this private method ever changes. + (void)load { if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { // Swizzle -_addLegacyTestObserver: swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); } else { // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); } } #pragma mark - Replacement Methods /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. - (void)NMB_original__addLegacyTestObserver:(id)observer { [self NMB_original__addLegacyTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. /// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) - (void)NMB_original_addTestObserver:(id)observer { [self NMB_original_addTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL+Wait.swift ================================================ import Foundation #if _runtime(_ObjC) private enum ErrorResult { case Exception(NSException) case Error(ErrorType) case None } /// Only classes, protocols, methods, properties, and subscript declarations can be /// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style /// asynchronous waiting logic so that it may be called from Objective-C and Swift. internal class NMBWait: NSObject { internal class func until( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in action() { done() } } } // Using a throwable closure makes this method not objc compatible. internal class func throwableUntil( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) throws -> Void) -> Void { let awaiter = NimbleEnvironment.activeInstance.awaiter let leeway = timeout / 2.0 let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in dispatch_async(dispatch_get_main_queue()) { let capture = NMBExceptionCapture( handler: ({ exception in done(.Exception(exception)) }), finally: ({ }) ) capture.tryBlock { do { try action() { done(.None) } } catch let e { done(.Error(e)) } } } }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) switch result { case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") case .BlockedRunLoop: fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), file: file, line: line) case .TimedOut: let pluralize = (timeout == 1 ? "" : "s") fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) case let .RaisedException(exception): fail("Unexpected exception raised: \(exception)") case let .ErrorThrown(error): fail("Unexpected error thrown: \(error)") case .Completed(.Exception(let exception)): fail("Unexpected exception raised: \(exception)") case .Completed(.Error(let error)): fail("Unexpected error thrown: \(error)") case .Completed(.None): // success break } } @objc(untilFile:line:action:) internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { until(timeout: 1, file: file, line: line, action: action) } } internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." } /// Wait asynchronously until the done closure is called or the timeout has been reached. /// /// @discussion /// Call the done() closure to indicate the waiting has completed. /// /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { NMBWait.until(timeout: timeout, file: file, line: line, action: action) } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL.swift ================================================ import Foundation /// Make an expectation on a given actual value. The value given is lazily evaluated. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Make an expectation on a given actual value. The closure is lazily invoked. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Always fails the test with a message and a specified location. public func fail(message: String, location: SourceLocation) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(false, message: FailureMessage(stringValue: message), location: location) } /// Always fails the test with a message. public func fail(message: String, file: FileString = #file, line: UInt = #line) { fail(message, location: SourceLocation(file: file, line: line)) } /// Always fails the test. public func fail(file: FileString = #file, line: UInt = #line) { fail("fail() always fails", file: file, line: line) } /// Like Swift's precondition(), but raises NSExceptions instead of sigaborts internal func nimblePrecondition( @autoclosure expr: () -> Bool, @autoclosure _ name: () -> String, @autoclosure _ message: () -> String, file: StaticString = #file, line: UInt = #line) -> Bool { let result = expr() if !result { #if _runtime(_ObjC) let e = NSException( name: name(), reason: message(), userInfo: nil) e.raise() #else preconditionFailure("\(name()) - \(message())", file: file, line: line) #endif } return result } @noreturn internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { fatalError( "Nimble Bug Found: \(msg) at \(file):\(line).\n" + "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + "code snippet that caused this error." ) } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expectation.swift ================================================ import Foundation internal func expressionMatches(expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = to do { let pass = try matcher.matches(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } internal func expressionDoesNotMatch(expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = toNot do { let pass = try matcher.doesNotMatch(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } public struct Expectation { public let expression: Expression public func verify(pass: Bool, _ message: FailureMessage) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(pass, message: message, location: expression.location) } /// Tests the actual value using a matcher to match. public func to(matcher: U, description: String? = nil) { let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. public func toNot(matcher: U, description: String? = nil) { let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. /// /// Alias to toNot(). public func notTo(matcher: U, description: String? = nil) { toNot(matcher, description: description) } // see: // - AsyncMatcherWrapper for extension // - NMBExpectation for Objective-C interface } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expression.swift ================================================ import Foundation // Memoizes the given closure, only calling the passed // closure once; even if repeat calls to the returned closure internal func memoizedClosure(closure: () throws -> T) -> (Bool) throws -> T { var cache: T? return ({ withoutCaching in if (withoutCaching || cache == nil) { cache = try closure() } return cache! }) } /// Expression represents the closure of the value inside expect(...). /// Expressions are memoized by default. This makes them safe to call /// evaluate() multiple times without causing a re-evaluation of the underlying /// closure. /// /// @warning Since the closure can be any code, Objective-C code may choose /// to raise an exception. Currently, Expression does not memoize /// exception raising. /// /// This provides a common consumable API for matchers to utilize to allow /// Nimble to change internals to how the captured closure is managed. public struct Expression { internal let _expression: (Bool) throws -> T? internal let _withoutCaching: Bool public let location: SourceLocation public let isClosure: Bool /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. The expression is memoized. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) { self._expression = memoizedClosure(expression) self.location = location self._withoutCaching = false self.isClosure = isClosure } /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param withoutCaching Indicates if the struct should memoize the given /// closure's result. Subsequent evaluate() calls will /// not call the given closure if this is true. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) { self._expression = memoizedExpression self.location = location self._withoutCaching = withoutCaching self.isClosure = isClosure } /// Returns a new Expression from the given expression. Identical to a map() /// on this type. This should be used only to typecast the Expression's /// closure value. /// /// The returned expression will preserve location and isClosure. /// /// @param block The block that can cast the current Expression value to a /// new type. public func cast(block: (T?) throws -> U?) -> Expression { return Expression(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) } public func evaluate() throws -> T? { return try self._expression(_withoutCaching) } public func withoutCaching() -> Expression { return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/FailureMessage.swift ================================================ import Foundation /// Encapsulates the failure message that matchers can report to the end user. /// /// This is shared state between Nimble and matchers that mutate this value. public class FailureMessage: NSObject { public var expected: String = "expected" public var actualValue: String? = "" // empty string -> use default; nil -> exclude public var to: String = "to" public var postfixMessage: String = "match" public var postfixActual: String = "" /// An optional message that will be appended as a new line and provides additional details /// about the failure. This message will only be visible in the issue navigator / in logs but /// not directly in the source editor since only a single line is presented there. public var extendedMessage: String? = nil public var userDescription: String? = nil public var stringValue: String { get { if let value = _stringValueOverride { return value } else { return computeStringValue() } } set { _stringValueOverride = newValue } } internal var _stringValueOverride: String? public override init() { } public init(stringValue: String) { _stringValueOverride = stringValue } internal func stripNewlines(str: String) -> String { var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } return lines.joinWithSeparator("") } internal func computeStringValue() -> String { var value = "\(expected) \(to) \(postfixMessage)" if let actualValue = actualValue { value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" } value = stripNewlines(value) if let extendedMessage = extendedMessage { value += "\n\(stripNewlines(extendedMessage))" } if let userDescription = userDescription { return "\(userDescription)\n\(value)" } return value } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSHumanReadableCopyright Copyright © 2014 Jeff Hui. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AllPass.swift ================================================ import Foundation public func allPass (passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return allPass("pass a condition", passFunc) } public func allPass (passName: String, _ passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return createAllPassMatcher() { expression, failureMessage in failureMessage.postfixMessage = passName return passFunc(try expression.evaluate()) } } public func allPass (matcher: V) -> NonNilMatcherFunc { return createAllPassMatcher() { try matcher.matches($0, failureMessage: $1) } } private func createAllPassMatcher (elementEvaluator:(Expression, FailureMessage) throws -> Bool) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.actualValue = nil if let actualValue = try actualExpression.evaluate() { for currentElement in actualValue { let exp = Expression( expression: {currentElement}, location: actualExpression.location) if try !elementEvaluator(exp, failureMessage) { failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)," + " but failed first at element <\(stringify(currentElement))>" + " in <\(stringify(actualValue))>" return false } } failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)" } else { failureMessage.postfixMessage = "all pass (use beNil() to match nils)" return false } return true } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() var nsObjects = [NSObject]() var collectionIsUsable = true if let value = actualValue as? NSFastEnumeration { let generator = NSFastGenerator(value) while let obj:AnyObject = generator.next() { if let nsObject = obj as? NSObject { nsObjects.append(nsObject) } else { collectionIsUsable = false break } } } else { collectionIsUsable = false } if !collectionIsUsable { failureMessage.postfixMessage = "allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects" failureMessage.expected = "" failureMessage.to = "" return false } let expr = Expression(expression: ({ nsObjects }), location: location) let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location) } return try! createAllPassMatcher(elementEvaluator).matches( expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift ================================================ import Foundation #if _runtime(_ObjC) public struct AsyncDefaults { public static var Timeout: NSTimeInterval = 1 public static var PollInterval: NSTimeInterval = 0.01 } internal struct AsyncMatcherWrapper: Matcher { let fullMatcher: U let timeoutInterval: NSTimeInterval let pollInterval: NSTimeInterval init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { self.fullMatcher = fullMatcher self.timeoutInterval = timeoutInterval self.pollInterval = pollInterval } func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let fnName = "expect(...).toEventually(...)" let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: fnName) { try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventually(...).") } } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: "expect(...).toEventuallyNot(...)") { try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventuallyNot(...).") } } } private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function") extension Expectation { /// Tests the actual value using a matcher to match by checking continuously /// at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionMatches( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), to: "to eventually", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionDoesNotMatch( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), toNot: "to eventually not", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// Alias of toEventuallyNot() /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift ================================================ import Foundation #if _runtime(_ObjC) // A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAKindOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAnInstanceOf if you want to match against the exact class public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" return instance != nil && instance!.isKindOfClass(expectedClass) } } extension NMBObjCMatcher { public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift ================================================ import Foundation // A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types public func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAKindOf if you want to match against subclasses public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be an instance of \(classAsString(expectedClass))" #if _runtime(_ObjC) return instance != nil && instance!.isMemberOfClass(expectedClass) #else return instance != nil && instance!.dynamicType == expectedClass #endif } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift ================================================ #if os(Linux) import Glibc #endif import Foundation internal let DefaultDelta = 0.0001 internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" failureMessage.actualValue = "<\(stringify(actualValue))>" return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } #if _runtime(_ObjC) public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { var _expected: NSNumber var _delta: CDouble init(expected: NSNumber, within: CDouble) { _expected = expected _delta = within } public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.doesNotMatch(expr, failureMessage: failureMessage) } public var within: (CDouble) -> NMBObjCBeCloseToMatcher { return ({ delta in return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) }) } } extension NMBObjCMatcher { public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { return NMBObjCBeCloseToMatcher(expected: expected, within: within) } } #endif public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" if let actual = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actual))>" if actual.count != expectedValues.count { return false } else { for (index, actualItem) in actual.enumerate() { if fabs(actualItem - expectedValues[index]) > delta { return false } } return true } } return false } } // MARK: - Operators infix operator ≈ { associativity none precedence 130 } public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } public func ==(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } // make this higher precedence than exponents so the Doubles either end aren't pulled in // unexpectantly infix operator ± { precedence 170 } public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { return (expected: lhs, delta: rhs) } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeEmpty.swift ================================================ import Foundation /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualSeq = try actualExpression.evaluate() if actualSeq == nil { return true } var generator = actualSeq!.generate() return generator.next() == nil } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || NSString(string: actualString!).length == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For NSString instances, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || actualString!.length == 0 } } // Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray, // etc, since they conform to SequenceType as well as NMBCollection. /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualDictionary = try actualExpression.evaluate() return actualDictionary == nil || actualDictionary!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualArray = try actualExpression.evaluate() return actualArray == nil || actualArray!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actual = try actualExpression.evaluate() return actual == nil || actual!.count == 0 } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beEmptyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() failureMessage.postfixMessage = "be empty" if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" return try actualExpression.evaluate() > expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending return matches } } public func >(lhs: Expectation, rhs: T) { lhs.to(beGreaterThan(rhs)) } public func >(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beGreaterThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue >= expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending return matches } } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actual = try actualExpression.evaluate() failureMessage.actualValue = "\(identityAsString(actual))" failureMessage.postfixMessage = "be identical to \(identityAsString(expected))" return actual === expected && actual !== nil } } public func ===(lhs: Expectation, rhs: AnyObject?) { lhs.to(beIdenticalTo(rhs)) } public func !==(lhs: Expectation, rhs: AnyObject?) { lhs.toNot(beIdenticalTo(rhs)) } /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. /// /// Alias for "beIdenticalTo". public func be(expected: AnyObject?) -> NonNilMatcherFunc { return beIdenticalTo(expected) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let aExpr = actualExpression.cast { $0 as AnyObject? } return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" return try actualExpression.evaluate() < expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending return matches } } public func <(lhs: Expectation, rhs: T) { lhs.to(beLessThan(rhs)) } public func <(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beLessThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as! NMBComparable? } return try! beLessThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" return try actualExpression.evaluate() <= expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending } } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLogical.swift ================================================ import Foundation internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in defer { postprocessor(failureMessage) } return try matcher.matcher(actualExpression, failureMessage) } } // MARK: beTrue() / beFalse() /// A Nimble matcher that succeeds when the actual value is exactly true. /// This matcher will not match against nils. public func beTrue() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(true)) { failureMessage in failureMessage.postfixMessage = "be true" } } /// A Nimble matcher that succeeds when the actual value is exactly false. /// This matcher will not match against nils. public func beFalse() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(false)) { failureMessage in failureMessage.postfixMessage = "be false" } } // MARK: beTruthy() / beFalsy() /// A Nimble matcher that succeeds when the actual value is not logically false. public func beTruthy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be truthy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue == true } } return actualValue != nil } } /// A Nimble matcher that succeeds when the actual value is logically false. /// This matcher will match against nils. public func beFalsy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be falsy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue != true } } return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beTruthyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beTruthy().matches(expr, failureMessage: failureMessage) } } public class func beFalsyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beFalsy().matches(expr, failureMessage: failureMessage) } } public class func beTrueMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beTrue().matches(expr, failureMessage: failureMessage) } } public class func beFalseMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beFalse().matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeNil.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is nil. public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" let actualValue = try actualExpression.evaluate() return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in return try! beNil().matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeVoid.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is Void. public func beVoid() -> MatcherFunc<()> { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be void" let actualValue: ()? = try actualExpression.evaluate() return actualValue != nil } } public func ==(lhs: Expectation<()>, rhs: ()) { lhs.to(beVoid()) } public func !=(lhs: Expectation<()>, rhs: ()) { lhs.toNot(beVoid()) } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeginWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's first element /// is equal to the expected value. public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's first element /// is equal to the expected object. public func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(startingElement) == 0 } } /// A Nimble matcher that succeeds when the actual string contains expected substring /// where the expected substring's location is zero. public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingSubstring)>" if let actual = try actualExpression.evaluate() { let range = actual.rangeOfString(startingSubstring) return range != nil && range!.startIndex == actual.startIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! beginWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Contain.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence contains the expected value. public func contain(items: T...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [T]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" if let actual = try actualExpression.evaluate() { return items.all { return actual.contains($0) } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: String...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [String]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { let range = actual.rangeOfString($0) return range != nil && !range!.isEmpty } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: NSString...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [NSString]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { actual.rangeOfString($0.description).length != 0 } } return false } } /// A Nimble matcher that succeeds when the actual collection contains the expected object. public func contain(items: AnyObject?...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [AnyObject?]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" guard let actual = try actualExpression.evaluate() else { return false } return items.all { item in return item != nil && actual.containsObject(item!) } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBContainer { let expr = Expression(expression: ({ value as NMBContainer }), location: location) // A straightforward cast on the array causes this to crash, so we have to cast the individual items let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? }) return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage) } else if actualValue != nil { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" } else { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/EndWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's last element /// is equal to the expected value. public func endWith(endingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() var lastItem: T? var item: T? repeat { lastItem = item item = actualGenerator.next() } while(item != nil) return lastItem == endingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's last element /// is equal to the expected object. public func endWith(endingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1 } } /// A Nimble matcher that succeeds when the actual string contains the expected substring /// where the expected substring's location is the actual string's length minus the /// expected substring's length. public func endWith(endingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingSubstring)>" if let collection = try actualExpression.evaluate() { let range = collection.rangeOfString(endingSubstring) return range != nil && range!.endIndex == collection.endIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! endWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Equal.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue == expectedValue && expectedValue != nil if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return matches } } /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. /// Items must implement the Equatable protocol. public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher allowing comparison of collection with optional type public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let actualValue = try actualExpression.evaluate() { if expectedValue.count != actualValue.count { return false } for (index, item) in actualValue.enumerate() { let otherItem = expectedValue[index] if item == nil && otherItem == nil { continue } else if item == nil && otherItem != nil { return false } else if item != nil && otherItem == nil { return false } else if item! != otherItem! { return false } } return true } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: stringify) } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: { if let set = $0 { return stringify(Array(set).sort { $0 < $1 }) } else { return "nil" } }) } private func equal(expectedValue: Set?, stringify: Set? -> String) -> NonNilMatcherFunc> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let expectedValue = expectedValue { if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actualValue))>" if expectedValue == actualValue { return true } let missing = expectedValue.subtract(actualValue) if missing.count > 0 { failureMessage.postfixActual += ", missing <\(stringify(missing))>" } let extra = actualValue.subtract(expectedValue) if extra.count > 0 { failureMessage.postfixActual += ", extra <\(stringify(extra))>" } } } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } public func ==(lhs: Expectation, rhs: T?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation, rhs: T?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T]>, rhs: [T]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T]>, rhs: [T]?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.toNot(equal(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func equalMatcher(expected: NSObject) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! equal(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/HaveCount.swift ================================================ import Foundation // The `haveCount` matchers do not print the full string representation of the collection value, // instead they only print the type name and the expected count. This makes it easier to understand // the reason for failed expectations. See: https://github.com/Quick/Nimble/issues/308. // The representation of the collection content is provided in a new line as an `extendedMessage`. /// A Nimble matcher that succeeds when the actual CollectionType's count equals /// the expected value public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" return result } else { return false } } } /// A Nimble matcher that succeeds when the actual collection's count equals /// the expected value public func haveCount(expectedValue: Int) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" return result } else { return false } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection}), location: location) return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Match.swift ================================================ import Foundation #if _runtime(_ObjC) /// A Nimble matcher that succeeds when the actual string satisfies the regular expression /// described by the expected string. public func match(expectedValue: String?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "match <\(stringify(expectedValue))>" if let actual = try actualExpression.evaluate() { if let regexp = expectedValue { return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil } } return false } } extension NMBObjCMatcher { public class func matchMatcher(expected: NSString) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.cast { $0 as? String } return try! match(expected.description).matches(actual, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatchError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. public func matchError(error: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) return errorMatchesNonNilFieldsOrClosure(actualError, error: error) } } /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error of the specified type public func matchError(errorType: T.Type) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift ================================================ /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil /// values are recieved in an expectation. /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct MatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try matcher(actualExpression, failureMessage) } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try !matcher(actualExpression, failureMessage) } } /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// Unlike MatcherFunc, this will always fail if an expectation contains nil. /// This applies regardless of using to() or toNot(). /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct NonNilMatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try !matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } internal func attachNilErrorIfNeeded(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return true } return false } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift ================================================ import Foundation /// Implement this protocol to implement a custom matcher for Swift public protocol Matcher { associatedtype ValueType func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool } #if _runtime(_ObjC) /// Objective-C interface to the Swift variant of Matcher. @objc public protocol NMBMatcher { func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool } #endif #if _runtime(_ObjC) /// Protocol for types that support contain() matcher. @objc public protocol NMBContainer { func containsObject(object: AnyObject!) -> Bool } extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet #else public protocol NMBContainer { func containsObject(object: AnyObject) -> Bool } #endif extension NSArray : NMBContainer {} extension NSSet : NMBContainer {} #if _runtime(_ObjC) /// Protocol for types that support only beEmpty(), haveCount() matchers @objc public protocol NMBCollection { var count: Int { get } } extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet extension NSMapTable : NMBCollection {} #else public protocol NMBCollection { var count: Int { get } } #endif extension NSSet : NMBCollection {} extension NSIndexSet : NMBCollection {} extension NSDictionary : NMBCollection {} #if _runtime(_ObjC) /// Protocol for types that support beginWith(), endWith(), beEmpty() matchers @objc public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject!) -> Int } #else public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject) -> Int } #endif extension NSArray : NMBOrderedCollection {} #if _runtime(_ObjC) /// Protocol for types to support beCloseTo() matcher @objc public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } #else public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } extension Double : NMBDoubleConvertible { public var doubleValue: CDouble { get { return self } } } extension Float : NMBDoubleConvertible { public var doubleValue: CDouble { get { return CDouble(self) } } } #endif extension NSNumber : NMBDoubleConvertible { } private let dateFormatter: NSDateFormatter = { let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") return formatter }() #if _runtime(_ObjC) extension NSDate: NMBDoubleConvertible { public var doubleValue: CDouble { get { return self.timeIntervalSinceReferenceDate } } } #endif extension NSDate: TestOutputStringConvertible { public var testDescription: String { return dateFormatter.stringFromDate(self) } } /// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), /// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. /// /// Types that conform to Swift's Comparable protocol will work implicitly too #if _runtime(_ObjC) @objc public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #else // This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #endif extension NSNumber : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! NSNumber) } } extension NSString : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! String) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/PostNotification.swift ================================================ import Foundation internal class NotificationCollector { private(set) var observedNotifications: [NSNotification] private let notificationCenter: NSNotificationCenter #if _runtime(_ObjC) private var token: AnyObject? #else private var token: NSObjectProtocol? #endif required init(notificationCenter: NSNotificationCenter) { self.notificationCenter = notificationCenter self.observedNotifications = [] } func startObserving() { self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { // linux-swift gets confused by .append(n) [weak self] n in self?.observedNotifications += [n] } } deinit { #if _runtime(_ObjC) if let token = self.token { self.notificationCenter.removeObserver(token) } #else if let token = self.token as? AnyObject { self.notificationCenter.removeObserver(token) } #endif } } private let mainThread = pthread_self() public func postNotifications( notificationsMatcher: T, fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) -> MatcherFunc { let _ = mainThread // Force lazy-loading of this value let collector = NotificationCollector(notificationCenter: center) collector.startObserving() var once: Bool = false return MatcherFunc { actualExpression, failureMessage in let collectorNotificationsExpression = Expression(memoizedExpression: { _ in return collector.observedNotifications }, location: actualExpression.location, withoutCaching: true) assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") if !once { once = true try actualExpression.evaluate() } let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) if collector.observedNotifications.isEmpty { failureMessage.actualValue = "no notifications" } else { failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" } return match } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/RaisesException.swift ================================================ import Foundation // This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager #if _runtime(_ObjC) && !SWIFT_PACKAGE /// A Nimble matcher that succeeds when the actual expression raises an /// exception with the specified name, reason, and/or userInfo. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the raised exception. The closure only gets called when an exception /// is raised. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func raiseException( named named: String? = nil, reason: String? = nil, userInfo: NSDictionary? = nil, closure: ((NSException) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var exception: NSException? let capture = NMBExceptionCapture(handler: ({ e in exception = e }), finally: nil) capture.tryBlock { try! actualExpression.evaluate() return } setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure) return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure) } } internal func setFailureMessageForException( failureMessage: FailureMessage, exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) { failureMessage.postfixMessage = "raise exception" if let named = named { failureMessage.postfixMessage += " with name <\(named)>" } if let reason = reason { failureMessage.postfixMessage += " with reason <\(reason)>" } if let userInfo = userInfo { failureMessage.postfixMessage += " with userInfo <\(userInfo)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if named == nil && reason == nil && userInfo == nil && closure == nil { failureMessage.postfixMessage = "raise any exception" } if let exception = exception { failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" } else { failureMessage.actualValue = "no exception" } } internal func exceptionMatchesNonNilFieldsOrClosure( exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) -> Bool { var matches = false if let exception = exception { matches = true if named != nil && exception.name != named { matches = false } if reason != nil && exception.reason != reason { matches = false } if userInfo != nil && exception.userInfo != userInfo { matches = false } if let closure = closure { let assertions = gatherFailingExpectations { closure(exception) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } public class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher { internal var _name: String? internal var _reason: String? internal var _userInfo: NSDictionary? internal var _block: ((NSException) -> Void)? internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { _name = name _reason = reason _userInfo = userInfo _block = block } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let block: () -> Any? = ({ actualBlock(); return nil }) let expr = Expression(expression: block, location: location) return try! raiseException( named: _name, reason: _reason, userInfo: _userInfo, closure: _block ).matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { return !matches(actualBlock, failureMessage: failureMessage, location: location) } public var named: (name: String) -> NMBObjCRaiseExceptionMatcher { return ({ name in return NMBObjCRaiseExceptionMatcher( name: name, reason: self._reason, userInfo: self._userInfo, block: self._block ) }) } public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher { return ({ reason in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: reason, userInfo: self._userInfo, block: self._block ) }) } public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { return ({ userInfo in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: userInfo, block: self._block ) }) } public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { return ({ block in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: self._userInfo, block: block ) }) } } extension NMBObjCMatcher { public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value matches with any of the matchers /// provided in the variable list of matchers. public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { return satisfyAnyOf(matchers) } internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let postfixMessages = NSMutableArray() var matches = false for matcher in matchers { if try matcher.matches(actualExpression, failureMessage: failureMessage) { matches = true } postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) } failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "\(actualValue)" } return matches } } public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in if matchers.isEmpty { failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" return false } var elementEvaluators = [NonNilMatcherFunc]() for matcher in matchers { let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) } elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) } return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/ThrowError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression throws an /// error of the specified type or from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the thrown error. The closure only gets called when an error was thrown. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func throwError( error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) } } /// A Nimble matcher that succeeds when the actual expression throws any /// error or when the passed closures' arbitrary custom matching succeeds. /// /// This duplication to it's generic adequate is required to allow to receive /// values of the existential type ErrorType in the closure. /// /// The closure only gets called when an error was thrown. public func throwError( closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Nimble.h ================================================ #import #import "NMBExceptionCapture.h" #import "NMBStringify.h" #import "DSL.h" FOUNDATION_EXPORT double NimbleVersionNumber; FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Async.swift ================================================ import Foundation #if _runtime(_ObjC) import Dispatch private let timeoutLeeway: UInt64 = NSEC_PER_MSEC private let pollLeeway: UInt64 = NSEC_PER_MSEC /// Stores debugging information about callers internal struct WaitingInfo: CustomStringConvertible { let name: String let file: FileString let lineNumber: UInt var description: String { return "\(name) at \(file):\(lineNumber)" } } internal protocol WaitLock { func acquireWaitingLock(fnName: String, file: FileString, line: UInt) func releaseWaitingLock() func isWaitingLocked() -> Bool } internal class AssertionWaitLock: WaitLock { private var currentWaiter: WaitingInfo? = nil init() { } func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { let info = WaitingInfo(name: fnName, file: file, lineNumber: line) nimblePrecondition( NSThread.isMainThread(), "InvalidNimbleAPIUsage", "\(fnName) can only run on the main thread." ) nimblePrecondition( currentWaiter == nil, "InvalidNimbleAPIUsage", "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + "The call to\n\t\(info)\n" + "triggered this exception because\n\t\(currentWaiter!)\n" + "is currently managing the main run loop." ) currentWaiter = info } func isWaitingLocked() -> Bool { return currentWaiter != nil } func releaseWaitingLock() { currentWaiter = nil } } internal enum AwaitResult { /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) case Incomplete /// TimedOut indicates the result reached its defined timeout limit before returning case TimedOut /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger /// the timeout code. /// /// This may also mean the async code waiting upon may have never actually ran within the /// required time because other timers & sources are running on the main run loop. case BlockedRunLoop /// The async block successfully executed and returned a given result case Completed(T) /// When a Swift Error is thrown case ErrorThrown(ErrorType) /// When an Objective-C Exception is raised case RaisedException(NSException) func isIncomplete() -> Bool { switch self { case .Incomplete: return true default: return false } } func isCompleted() -> Bool { switch self { case .Completed(_): return true default: return false } } } /// Holds the resulting value from an asynchronous expectation. /// This class is thread-safe at receiving an "response" to this promise. internal class AwaitPromise { private(set) internal var asyncResult: AwaitResult = .Incomplete private var signal: dispatch_semaphore_t init() { signal = dispatch_semaphore_create(1) } /// Resolves the promise with the given result if it has not been resolved. Repeated calls to /// this method will resolve in a no-op. /// /// @returns a Bool that indicates if the async result was accepted or rejected because another /// value was recieved first. func resolveResult(result: AwaitResult) -> Bool { if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { self.asyncResult = result return true } else { return false } } } internal struct AwaitTrigger { let timeoutSource: dispatch_source_t let actionSource: dispatch_source_t? let start: () throws -> Void } /// Factory for building fully configured AwaitPromises and waiting for their results. /// /// This factory stores all the state for an async expectation so that Await doesn't /// doesn't have to manage it. internal class AwaitPromiseBuilder { let awaiter: Awaiter let waitLock: WaitLock let trigger: AwaitTrigger let promise: AwaitPromise internal init( awaiter: Awaiter, waitLock: WaitLock, promise: AwaitPromise, trigger: AwaitTrigger) { self.awaiter = awaiter self.waitLock = waitLock self.promise = promise self.trigger = trigger } func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { // = Discussion = // // There's a lot of technical decisions here that is useful to elaborate on. This is // definitely more lower-level than the previous NSRunLoop based implementation. // // // Why Dispatch Source? // // // We're using a dispatch source to have better control of the run loop behavior. // A timer source gives us deferred-timing control without having to rely as much on // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) // which is ripe for getting corrupted by application code. // // And unlike dispatch_async(), we can control how likely our code gets prioritized to // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. // // This timer is assumed to run on the HIGH priority queue to ensure it maintains the // highest priority over normal application / test code when possible. // // // Run Loop Management // // In order to properly interrupt the waiting behavior performed by this factory class, // this timer stops the main run loop to tell the waiter code that the result should be // checked. // // In addition, stopping the run loop is used to halt code executed on the main run loop. dispatch_source_set_timer( trigger.timeoutSource, dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), DISPATCH_TIME_FOREVER, timeoutLeeway ) dispatch_source_set_event_handler(trigger.timeoutSource) { guard self.promise.asyncResult.isIncomplete() else { return } let timedOutSem = dispatch_semaphore_create(0) let semTimedOutOrBlocked = dispatch_semaphore_create(0) dispatch_semaphore_signal(semTimedOutOrBlocked) let runLoop = CFRunLoopGetMain() CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { dispatch_semaphore_signal(timedOutSem) dispatch_semaphore_signal(semTimedOutOrBlocked) if self.promise.resolveResult(.TimedOut) { CFRunLoopStop(CFRunLoopGetMain()) } } } // potentially interrupt blocking code on run loop to let timeout code run CFRunLoopStop(runLoop) let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 if didNotTimeOut && timeoutWasNotTriggered { if self.promise.resolveResult(.BlockedRunLoop) { CFRunLoopStop(CFRunLoopGetMain()) } } } return self } /// Blocks for an asynchronous result. /// /// @discussion /// This function must be executed on the main thread and cannot be nested. This is because /// this function (and it's related methods) coordinate through the main run loop. Tampering /// with the run loop can cause undesireable behavior. /// /// This method will return an AwaitResult in the following cases: /// /// - The main run loop is blocked by other operations and the async expectation cannot be /// be stopped. /// - The async expectation timed out /// - The async expectation succeeded /// - The async expectation raised an unexpected exception (objc) /// - The async expectation raised an unexpected error (swift) /// /// The returned AwaitResult will NEVER be .Incomplete. func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { waitLock.acquireWaitingLock( fnName, file: file, line: line) let capture = NMBExceptionCapture(handler: ({ exception in self.promise.resolveResult(.RaisedException(exception)) }), finally: ({ self.waitLock.releaseWaitingLock() })) capture.tryBlock { do { try self.trigger.start() } catch let error { self.promise.resolveResult(.ErrorThrown(error)) } dispatch_resume(self.trigger.timeoutSource) while self.promise.asyncResult.isIncomplete() { // Stopping the run loop does not work unless we run only 1 mode NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) } dispatch_suspend(self.trigger.timeoutSource) dispatch_source_cancel(self.trigger.timeoutSource) if let asyncSource = self.trigger.actionSource { dispatch_source_cancel(asyncSource) } } return promise.asyncResult } } internal class Awaiter { let waitLock: WaitLock let timeoutQueue: dispatch_queue_t let asyncQueue: dispatch_queue_t internal init( waitLock: WaitLock, asyncQueue: dispatch_queue_t, timeoutQueue: dispatch_queue_t) { self.waitLock = waitLock self.asyncQueue = asyncQueue self.timeoutQueue = timeoutQueue } private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { return dispatch_source_create( DISPATCH_SOURCE_TYPE_TIMER, 0, DISPATCH_TIMER_STRICT, queue ) } func performBlock( closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) var completionCount = 0 let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { try closure() { completionCount += 1 nimblePrecondition( completionCount < 2, "InvalidNimbleAPIUsage", "Done closure's was called multiple times. waitUntil(..) expects its " + "completion closure to only be called once.") if promise.resolveResult(.Completed($0)) { CFRunLoopStop(CFRunLoopGetMain()) } } } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) let asyncSource = createTimerSource(asyncQueue) let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) dispatch_source_set_event_handler(asyncSource) { do { if let result = try closure() { if promise.resolveResult(.Completed(result)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } catch let error { if promise.resolveResult(.ErrorThrown(error)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } dispatch_resume(asyncSource) } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } } internal func pollBlock( pollInterval pollInterval: NSTimeInterval, timeoutInterval: NSTimeInterval, file: FileString, line: UInt, fnName: String = #function, expression: () throws -> Bool) -> AwaitResult { let awaiter = NimbleEnvironment.activeInstance.awaiter let result = awaiter.poll(pollInterval) { () throws -> Bool? in do { if try expression() { return true } return nil } catch let error { throw error } }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) return result } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Errors.swift ================================================ import Foundation // Generic internal func setFailureMessageForError( failureMessage: FailureMessage, postfixMessageVerb: String = "throw", actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) { failureMessage.postfixMessage = "\(postfixMessageVerb) error" if let error = error { if let error = error as? CustomDebugStringConvertible { failureMessage.postfixMessage += " <\(error.debugDescription)>" } else { failureMessage.postfixMessage += " <\(error)>" } } else if errorType != nil || closure != nil { failureMessage.postfixMessage += " from type <\(T.self)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if error == nil && errorType == nil && closure == nil { failureMessage.postfixMessage = "\(postfixMessageVerb) any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { return actualError._domain == expectedError._domain && actualError._code == expectedError._code } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { if let actualError = actualError as? T { return actualError == expectedError } return false } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> Bool { var matches = false if let actualError = actualError { matches = true if let error = error { if !errorMatchesExpectedError(actualError, expectedError: error) { matches = false } } if let actualError = actualError as? T { if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError as T) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } else if errorType != nil && closure != nil { // The closure expects another ErrorType as argument, so this // is _supposed_ to fail, so that it becomes more obvious. let assertions = gatherExpectations { expect(actualError is T).to(equal(true)) } precondition(assertions.map { $0.message }.count > 0) matches = false } } return matches } // Non-generic internal func setFailureMessageForError( failureMessage: FailureMessage, actualError: ErrorType?, closure: ((ErrorType) -> Void)?) { failureMessage.postfixMessage = "throw error" if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } else { failureMessage.postfixMessage = "throw any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, closure: ((ErrorType) -> Void)?) -> Bool { var matches = false if let actualError = actualError { matches = true if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Functional.swift ================================================ import Foundation extension SequenceType { internal func all(fn: Generator.Element -> Bool) -> Bool { for item in self { if !fn(item) { return false } } return true } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/SourceLocation.swift ================================================ import Foundation // Ideally we would always use `StaticString` as the type for tracking the file name // that expectations originate from, for consistency with `assert` etc. from the // stdlib, and because recent versions of the XCTest overlay require `StaticString` // when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we // have to use `String` instead because StaticString can't be generated from Objective-C #if _runtime(_ObjC) public typealias FileString = String #else public typealias FileString = StaticString #endif public final class SourceLocation : NSObject { public let file: FileString public let line: UInt override init() { file = "Unknown File" line = 0 } init(file: FileString, line: UInt) { self.file = file self.line = line } override public var description: String { return "\(file):\(line)" } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Stringers.swift ================================================ import Foundation internal func identityAsString(value: AnyObject?) -> String { if let value = value { return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description } else { return "nil" } } internal func classAsString(cls: AnyClass) -> String { #if _runtime(_ObjC) return NSStringFromClass(cls) #else return String(cls) #endif } internal func arrayAsString(items: [T], joiner: String = ", ") -> String { return items.reduce("") { accum, item in let prefix = (accum.isEmpty ? "" : joiner) return accum + prefix + "\(stringify(item))" } } /// A type with a customized test output text representation. /// /// This textual representation is produced when values will be /// printed in test runs, and may be useful when producing /// error messages in custom matchers. /// /// - SeeAlso: `CustomDebugStringConvertible` public protocol TestOutputStringConvertible { var testDescription: String { get } } extension Double: TestOutputStringConvertible { public var testDescription: String { return NSNumber(double: self).testDescription } } extension Float: TestOutputStringConvertible { public var testDescription: String { return NSNumber(float: self).testDescription } } extension NSNumber: TestOutputStringConvertible { // This is using `NSString(format:)` instead of // `String(format:)` because the latter somehow breaks // the travis CI build on linux. public var testDescription: String { let description = self.description if description.containsString(".") { // Travis linux swiftpm build doesn't like casting String to NSString, // which is why this annoying nested initializer thing is here. // Maybe this will change in a future snapshot. let decimalPlaces = NSString(string: NSString(string: description) .componentsSeparatedByString(".")[1]) if decimalPlaces.length > 4 { return NSString(format: "%0.4f", self.doubleValue).description } } return self.description } } extension Array: TestOutputStringConvertible { public var testDescription: String { let list = self.map(Nimble.stringify).joinWithSeparator(", ") return "[\(list)]" } } extension AnySequence: TestOutputStringConvertible { public var testDescription: String { let generator = self.generate() var strings = [String]() var value: AnySequence.Generator.Element? repeat { value = generator.next() if let value = value { strings.append(stringify(value)) } } while value != nil let list = strings.joinWithSeparator(", ") return "[\(list)]" } } extension NSArray: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension NSIndexSet: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension String: TestOutputStringConvertible { public var testDescription: String { return self } } extension NSData: TestOutputStringConvertible { public var testDescription: String { #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) return "NSData" #else return "NSData" #endif } } /// /// Returns a string appropriate for displaying in test output /// from the provided value. /// /// - parameter value: A value that will show up in a test's output. /// /// - returns: The string that is returned can be /// customized per type by conforming a type to the `TestOutputStringConvertible` /// protocol. When stringifying a non-`TestOutputStringConvertible` type, this /// function will return the value's debug description and then its /// normal description if available and in that order. Otherwise it /// will return the result of constructing a string from the value. /// /// - SeeAlso: `TestOutputStringConvertible` @warn_unused_result public func stringify(value: T) -> String { if let value = value as? TestOutputStringConvertible { return value.testDescription } if let value = value as? CustomDebugStringConvertible { return value.debugDescription } return String(value) } /// -SeeAlso: `stringify(value: T)` @warn_unused_result public func stringify(value: T?) -> String { if let unboxed = value { return stringify(unboxed) } return "nil" } #if _runtime(_ObjC) @objc public class NMBStringer: NSObject { @warn_unused_result @objc public class func stringify(obj: AnyObject?) -> String { return Nimble.stringify(obj) } } #endif // MARK: Collection Type Stringers /// Attempts to generate a pretty type string for a given value. If the value is of a Objective-C /// collection type, or a subclass thereof, (e.g. `NSArray`, `NSDictionary`, etc.). /// This function will return the type name of the root class of the class cluster for better /// readability (e.g. `NSArray` instead of `__NSArrayI`). /// /// For values that don't have a type of an Objective-C collection, this function returns the /// default type description. /// /// - parameter value: A value that will be used to determine a type name. /// /// - returns: The name of the class cluster root class for Objective-C collection types, or the /// the `dynamicType` of the value for values of any other type. public func prettyCollectionType(value: T) -> String { #if _runtime(_ObjC) // Check for types that are not in corelibs-foundation separately if value is NSHashTable { return String(NSHashTable.self) } #endif switch value { case is NSArray: return String(NSArray.self) case is NSDictionary: return String(NSDictionary.self) case is NSSet: return String(NSSet.self) case is NSIndexSet: return String(NSIndexSet.self) default: return String(value) } } /// Returns the type name for a given collection type. This overload is used by Swift /// collection types. /// /// - parameter collection: A Swift `CollectionType` value. /// /// - returns: A string representing the `dynamicType` of the value. public func prettyCollectionType(collection: T) -> String { return String(collection.dynamicType) } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/LinuxMain.swift ================================================ import XCTest @testable import Nimbletest // This is the entry point for NimbleTests on Linux XCTMain([ // AsynchronousTests(), SynchronousTest(), UserDescriptionTest(), // Matchers AllPassTest(), // BeAKindOfTest(), BeAnInstanceOfTest(), BeCloseToTest(), BeginWithTest(), BeGreaterThanOrEqualToTest(), BeGreaterThanTest(), BeIdenticalToObjectTest(), BeIdenticalToTest(), BeLessThanOrEqualToTest(), BeLessThanTest(), BeTruthyTest(), BeTrueTest(), BeFalsyTest(), BeFalseTest(), BeNilTest(), ContainTest(), EndWithTest(), EqualTest(), HaveCountTest(), // MatchTest(), // RaisesExceptionTest(), ThrowErrorTest(), SatisfyAnyOfTest(), PostNotificationTest(), ]) ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/AsynchronousTest.swift ================================================ import Foundation import XCTest import Nimble // These tests require the ObjC runtimes do not currently have the GCD and run loop facilities // required for working with Nimble's async matchers #if _runtime(_ObjC) class AsyncTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToEventuallyPositiveMatches", testToEventuallyPositiveMatches), ("testToEventuallyNegativeMatches", testToEventuallyNegativeMatches), ("testWaitUntilPositiveMatches", testWaitUntilPositiveMatches), ("testToEventuallyWithCustomDefaultTimeout", testToEventuallyWithCustomDefaultTimeout), ("testWaitUntilTimesOutIfNotCalled", testWaitUntilTimesOutIfNotCalled), ("testWaitUntilTimesOutWhenExceedingItsTime", testWaitUntilTimesOutWhenExceedingItsTime), ("testWaitUntilNegativeMatches", testWaitUntilNegativeMatches), ("testWaitUntilDetectsStalledMainThreadActivity", testWaitUntilDetectsStalledMainThreadActivity), ("testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed", testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed), ("testWaitUntilErrorsIfDoneIsCalledMultipleTimes", testWaitUntilErrorsIfDoneIsCalledMultipleTimes), ("testWaitUntilMustBeInMainThread", testWaitUntilMustBeInMainThread), ("testToEventuallyMustBeInMainThread", testToEventuallyMustBeInMainThread), ] } let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testToEventuallyPositiveMatches() { var value = 0 deferToMainQueue { value = 1 } expect { value }.toEventually(equal(1)) deferToMainQueue { value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testToEventuallyNegativeMatches() { let value = 0 failsWithErrorMessage("expected to eventually not equal <0>, got <0>") { expect { value }.toEventuallyNot(equal(0)) } failsWithErrorMessage("expected to eventually equal <1>, got <0>") { expect { value }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually not equal <0>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventuallyNot(equal(0)) } } func testToEventuallyWithCustomDefaultTimeout() { AsyncDefaults.Timeout = 2 defer { AsyncDefaults.Timeout = 1 } var value = 0 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 1 } expect { value }.toEventually(equal(1)) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testWaitUntilPositiveMatches() { waitUntil { done in done() } waitUntil { done in deferToMainQueue { done() } } } func testWaitUntilTimesOutIfNotCalled() { failsWithErrorMessage("Waited more than 1.0 second") { waitUntil(timeout: 1) { done in return } } } func testWaitUntilTimesOutWhenExceedingItsTime() { var waiting = true failsWithErrorMessage("Waited more than 0.01 seconds") { waitUntil(timeout: 0.01) { done in dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(0.1) done() waiting = false } } } // "clear" runloop to ensure this test doesn't poison other tests repeat { NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2)) } while(waiting) } func testWaitUntilNegativeMatches() { failsWithErrorMessage("expected to equal <2>, got <1>") { waitUntil { done in NSThread.sleepForTimeInterval(0.1) expect(1).to(equal(2)) done() } } } func testWaitUntilDetectsStalledMainThreadActivity() { let msg = "-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." failsWithErrorMessage(msg) { waitUntil(timeout: 1) { done in NSThread.sleepForTimeInterval(5.0) done() } } } func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() { // Currently we are unable to catch Objective-C exceptions when built by the Swift Package Manager #if !SWIFT_PACKAGE let referenceLine = #line + 9 var msg = "Unexpected exception raised: Nested async expectations are not allowed " msg += "to avoid creating flaky tests." msg += "\n\n" msg += "The call to\n\t" msg += "expect(...).toEventually(...) at \(#file):\(referenceLine + 7)\n" msg += "triggered this exception because\n\t" msg += "waitUntil(...) at \(#file):\(referenceLine + 1)\n" msg += "is currently managing the main run loop." failsWithErrorMessage(msg) { // reference line waitUntil(timeout: 2.0) { done in var protected: Int = 0 dispatch_async(dispatch_get_main_queue()) { protected = 1 } expect(protected).toEventually(equal(1)) done() } } #endif } func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() { #if !SWIFT_PACKAGE waitUntil { done in deferToMainQueue { done() expect { done() }.to(raiseException(named: "InvalidNimbleAPIUsage")) } } #endif } func testWaitUntilMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { waitUntil { done in done() } }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } func testToEventuallyMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { expect(1).toEventually(equal(2)) }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift ================================================ import Foundation class ObjectWithLazyProperty { init() {} lazy var value: String = "hello" lazy var anotherValue: String = { return "world" }() } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift ================================================ import Foundation import XCTest // XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available // in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, // we ensure that the tests fail in Xcode if they haven't been configured properly to // be run with the open-source tools. #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) public protocol XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { get } } extension XCTestCase { override public func tearDown() { if let provider = self as? XCTestCaseProvider { provider.assertContainsTest(invocation!.selector.description) } super.tearDown() } } extension XCTestCaseProvider { private func assertContainsTest(name: String) { let contains = self.allTests.contains({ test in return test.0 == name }) XCTAssert(contains, "Test '\(name)' is missing from the allTests array") } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/utils.swift ================================================ import Foundation @testable import Nimble import XCTest func failsWithErrorMessage(messages: [String], file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) { var filePath = file var lineNumber = line let recorder = AssertionRecorder() withAssertionHandler(recorder, closure: closure) for msg in messages { var lastFailure: AssertionRecord? var foundFailureMessage = false for assertion in recorder.assertions { lastFailure = assertion if assertion.message.stringValue == msg { foundFailureMessage = true break } } if foundFailureMessage { continue } if preferOriginalSourceLocation { if let failure = lastFailure { filePath = failure.location.file lineNumber = failure.location.line } } let message: String if let lastFailure = lastFailure { message = "Got failure message: \"\(lastFailure.message.stringValue)\", but expected \"\(msg)\"" } else { message = "expected failure message, but got none" } NimbleAssertionHandler.assert(false, message: FailureMessage(stringValue: message), location: SourceLocation(file: filePath, line: lineNumber)) } } func failsWithErrorMessage(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { return failsWithErrorMessage( [message], file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure ) } func failsWithErrorMessageForNil(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { failsWithErrorMessage("\(message) (use beNil() to match nils)", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure) } #if _runtime(_ObjC) func deferToMainQueue(action: () -> Void) { dispatch_async(dispatch_get_main_queue()) { NSThread.sleepForTimeInterval(0.01) action() } } #endif public class NimbleHelper : NSObject { public class func expectFailureMessage(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessages(messages: [NSString], block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(messages.map({ String($0) }), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessageForNil(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } } extension NSDate { convenience init(dateTimeString:String) { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") let date = dateFormatter.dateFromString(dateTimeString)! self.init(timeInterval:0, sinceDate:date) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/AllPassTest.swift ================================================ import XCTest import Nimble class AllPassTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAllPassArray", testAllPassArray), ("testAllPassMatcher", testAllPassMatcher), ("testAllPassCollectionsWithOptionalsDontWork", testAllPassCollectionsWithOptionalsDontWork), ("testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer", testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer), ("testAllPassSet", testAllPassSet), ("testAllPassWithNilAsExpectedValue", testAllPassWithNilAsExpectedValue), ] } func testAllPassArray() { expect([1,2,3,4]).to(allPass({$0 < 5})) expect([1,2,3,4]).toNot(allPass({$0 > 5})) failsWithErrorMessage( "expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass({$0 < 3})) } failsWithErrorMessage("expected to not all pass a condition") { expect([1,2,3,4]).toNot(allPass({$0 < 5})) } failsWithErrorMessage( "expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass("be something", {$0 < 3})) } failsWithErrorMessage("expected to not all be something") { expect([1,2,3,4]).toNot(allPass("be something", {$0 < 5})) } } func testAllPassMatcher() { expect([1,2,3,4]).to(allPass(beLessThan(5))) expect([1,2,3,4]).toNot(allPass(beGreaterThan(5))) failsWithErrorMessage( "expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass(beLessThan(3))) } failsWithErrorMessage("expected to not all be less than <5>") { expect([1,2,3,4]).toNot(allPass(beLessThan(5))) } } func testAllPassCollectionsWithOptionalsDontWork() { failsWithErrorMessage("expected to all be nil, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass(beNil())) } failsWithErrorMessage("expected to all pass a condition, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil})) } } func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() { expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil})) expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil})) expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1})) expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1})) expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4})) expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3})) expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3})) } func testAllPassSet() { expect(Set([1,2,3,4])).to(allPass({$0 < 5})) expect(Set([1,2,3,4])).toNot(allPass({$0 > 5})) failsWithErrorMessage("expected to not all pass a condition") { expect(Set([1,2,3,4])).toNot(allPass({$0 < 5})) } failsWithErrorMessage("expected to not all be something") { expect(Set([1,2,3,4])).toNot(allPass("be something", {$0 < 5})) } } func testAllPassWithNilAsExpectedValue() { failsWithErrorMessageForNil("expected to all pass") { expect(nil as [Int]?).to(allPass(beLessThan(5))) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class TestNull : NSNull {} class BeAKindOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(TestNull()).to(beAKindOf(NSNull)) expect(NSObject()).to(beAKindOf(NSObject)) expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be a kind of NSNull, got ") { expect(nil as NSNull?).toNot(beAKindOf(NSNull)) } failsWithErrorMessageForNil("expected to be a kind of NSString, got ") { expect(nil as NSString?).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to be a kind of NSString, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to not be a kind of NSNumber, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAKindOf(Int)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAKindOf(String)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAKindOf(TestEnum)) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift ================================================ import Foundation import XCTest import Nimble class BeAnInstanceOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(NSNull()).to(beAnInstanceOf(NSNull)) expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be an instance of NSNull, got ") { expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull)) } failsWithErrorMessageForNil("expected to be an instance of NSString, got ") { expect(nil as NSString?).to(beAnInstanceOf(NSString)) } #if _runtime(_ObjC) let numberTypeName = "__NSCFNumber" #else let numberTypeName = "NSNumber" #endif failsWithErrorMessage("expected to be an instance of NSString, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString)) } failsWithErrorMessage("expected to not be an instance of NSNumber, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAnInstanceOf(Int)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAnInstanceOf(String)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAnInstanceOf(TestEnum)) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift ================================================ import Foundation import XCTest import Nimble class BeCloseToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeCloseTo", testBeCloseTo), ("testBeCloseToWithin", testBeCloseToWithin), ("testBeCloseToWithNSNumber", testBeCloseToWithNSNumber), ("testBeCloseToWithNSDate", testBeCloseToWithNSDate), ("testBeCloseToOperator", testBeCloseToOperator), ("testBeCloseToWithinOperator", testBeCloseToWithinOperator), ("testPlusMinusOperator", testPlusMinusOperator), ("testBeCloseToOperatorWithNSDate", testBeCloseToOperatorWithNSDate), ("testBeCloseToWithinOperatorWithNSDate", testBeCloseToWithinOperatorWithNSDate), ("testPlusMinusOperatorWithNSDate", testPlusMinusOperatorWithNSDate), ("testBeCloseToArray", testBeCloseToArray), ] } func testBeCloseTo() { expect(1.2).to(beCloseTo(1.2001)) expect(1.2 as CDouble).to(beCloseTo(1.2001)) expect(1.2 as Float).to(beCloseTo(1.2001)) failsWithErrorMessage("expected to not be close to <1.2001> (within 0.0001), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001)) } } func testBeCloseToWithin() { expect(1.2).to(beCloseTo(9.300, within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSNumber() { expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10)) expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10)) expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).to(beCloseTo(NSDate(dateTimeString: "2015-08-26 11:43:05"), within: 10)) failsWithErrorMessage("expected to not be close to <2015-08-26 11:43:00.0050> (within 0.004), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).toNot(beCloseTo(expectedDate, within: 0.004)) } #endif } func testBeCloseToOperator() { expect(1.2) ≈ 1.2001 expect(1.2 as CDouble) ≈ 1.2001 failsWithErrorMessage("expected to be close to <1.2002> (within 0.0001), got <1.2>") { expect(1.2) ≈ 1.2002 } } func testBeCloseToWithinOperator() { expect(1.2) ≈ (9.300, 10) expect(1.2) == (9.300, 10) failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ (1.0, 0.1) } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == (1.0, 0.1) } } func testPlusMinusOperator() { expect(1.2) ≈ 9.300 ± 10 expect(1.2) == 9.300 ± 10 failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ 1.0 ± 0.1 } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == 1.0 ± 0.1 } } func testBeCloseToOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:00") failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.0001), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate } #endif } func testBeCloseToWithinOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (expectedDate, 0.006) } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (expectedDate, 0.006) } #endif } func testPlusMinusOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate ± 0.006 } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == expectedDate ± 0.006 } #endif } func testBeCloseToArray() { expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001] expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1)) failsWithErrorMessage("expected to be close to <[0, 1]> (each within 0.0001), got <[0, 1.1]>") { expect([0.0, 1.1]) ≈ [0.0, 1.0] } failsWithErrorMessage("expected to be close to <[0.2, 1.2]> (each within 0.1), got <[0, 1.1]>") { expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1)) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift ================================================ import Foundation import XCTest import Nimble class BeEmptyTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeEmptyPositive", testBeEmptyPositive), ("testBeEmptyNegative", testBeEmptyNegative), ] } func testBeEmptyPositive() { expect([] as [Int]).to(beEmpty()) expect([1]).toNot(beEmpty()) expect([] as [CInt]).to(beEmpty()) expect([1] as [CInt]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSDictionary() as? [Int:Int]).to(beEmpty()) expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty()) #endif expect(Dictionary()).to(beEmpty()) expect(["hi": 1]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSArray() as? [Int]).to(beEmpty()) expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty()) #endif expect(NSSet()).to(beEmpty()) expect(NSSet(array: [NSNumber(integer: 1)])).toNot(beEmpty()) expect(NSIndexSet()).to(beEmpty()) expect(NSIndexSet(index: 1)).toNot(beEmpty()) expect(NSString()).to(beEmpty()) expect(NSString(string: "hello")).toNot(beEmpty()) expect("").to(beEmpty()) expect("foo").toNot(beEmpty()) } func testBeEmptyNegative() { failsWithErrorMessageForNil("expected to be empty, got ") { expect(nil as NSString?).to(beEmpty()) } failsWithErrorMessageForNil("expected to not be empty, got ") { expect(nil as [CInt]?).toNot(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSArray()).toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got <[1]>") { expect([1]).to(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <{()}>") { expect(NSSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <{(1)}>") { expect(NSSet(object: NSNumber(int: 1))).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSIndexSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <(1)>") { expect(NSIndexSet(index: 1)).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <>") { expect("").toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got ") { expect("foo").to(beEmpty()) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThanOrEqualTo", testGreaterThanOrEqualTo), ("testGreaterThanOrEqualToOperator", testGreaterThanOrEqualToOperator), ] } func testGreaterThanOrEqualTo() { expect(10).to(beGreaterThanOrEqualTo(10)) expect(10).to(beGreaterThanOrEqualTo(2)) expect(1).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2))) #if _runtime(_ObjC) expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0))) #endif failsWithErrorMessage("expected to be greater than or equal to <2>, got <0>") { expect(0).to(beGreaterThanOrEqualTo(2)) return } failsWithErrorMessage("expected to not be greater than or equal to <1>, got <1>") { expect(1).toNot(beGreaterThanOrEqualTo(1)) return } failsWithErrorMessageForNil("expected to be greater than or equal to <-2>, got ") { expect(nil as Int?).to(beGreaterThanOrEqualTo(-2)) } failsWithErrorMessageForNil("expected to not be greater than or equal to <1>, got ") { expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1)) } } func testGreaterThanOrEqualToOperator() { expect(0) >= 0 expect(1) >= 0 expect(NSNumber(int:1)) >= 1 expect(NSNumber(int:1)) >= NSNumber(int:1) failsWithErrorMessage("expected to be greater than or equal to <2>, got <1>") { expect(1) >= 2 return } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThan", testGreaterThan), ("testGreaterThanOperator", testGreaterThanOperator), ] } func testGreaterThan() { expect(10).to(beGreaterThan(2)) expect(1).toNot(beGreaterThan(2)) #if _runtime(_ObjC) expect(NSNumber(int:3)).to(beGreaterThan(2)) #endif expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2))) failsWithErrorMessage("expected to be greater than <2>, got <0>") { expect(0).to(beGreaterThan(2)) } failsWithErrorMessage("expected to not be greater than <0>, got <1>") { expect(1).toNot(beGreaterThan(0)) } failsWithErrorMessageForNil("expected to be greater than <-2>, got ") { expect(nil as Int?).to(beGreaterThan(-2)) } failsWithErrorMessageForNil("expected to not be greater than <0>, got ") { expect(nil as Int?).toNot(beGreaterThan(0)) } } func testGreaterThanOperator() { expect(1) > 0 expect(NSNumber(int:1)) > NSNumber(int:0) #if _runtime(_ObjC) expect(NSNumber(int:1)) > 0 #endif failsWithErrorMessage("expected to be greater than <2>, got <1>") { expect(1) > 2 return } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift ================================================ import Foundation import XCTest import Nimble class BeIdenticalToObjectTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testFailsOnNils", testFailsOnNils), ("testOperators", testOperators), ] } private class BeIdenticalToObjectTester {} private let testObjectA = BeIdenticalToObjectTester() private let testObjectB = BeIdenticalToObjectTester() func testBeIdenticalToPositive() { expect(self.testObjectA).to(beIdenticalTo(testObjectA)) } func testBeIdenticalToNegative() { expect(self.testObjectA).toNot(beIdenticalTo(testObjectB)) } func testBeIdenticalToPositiveMessage() { let message = String(NSString(format: "expected to be identical to <%p>, got <%p>", unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).to(beIdenticalTo(self.testObjectB)) } } func testBeIdenticalToNegativeMessage() { let message = String(NSString(format: "expected to not be identical to <%p>, got <%p>", unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA)) } } func testFailsOnNils() { let message1 = String(NSString(format: "expected to be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message1) { expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA)) } let message2 = String(NSString(format: "expected to not be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message2) { expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA)) } } func testOperators() { expect(self.testObjectA) === testObjectA expect(self.testObjectA) !== testObjectB } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift ================================================ import Foundation import XCTest @testable import Nimble class BeIdenticalToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testOperators", testOperators), ("testBeAlias", testBeAlias) ] } func testBeIdenticalToPositive() { let value = NSDate() expect(value).to(beIdenticalTo(value)) } func testBeIdenticalToNegative() { expect(NSNumber(integer:1)).toNot(beIdenticalTo(NSString(string: "yo"))) expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) } func testBeIdenticalToPositiveMessage() { let num1 = NSNumber(integer:1) let num2 = NSNumber(integer:2) let message = "expected to be identical to \(identityAsString(num2)), got \(identityAsString(num1))" failsWithErrorMessage(message) { expect(num1).to(beIdenticalTo(num2)) } } func testBeIdenticalToNegativeMessage() { let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(beIdenticalTo(value2)) } } func testOperators() { let value = NSDate() expect(value) === value expect(NSNumber(integer:1)) !== NSNumber(integer:2) } func testBeAlias() { let value = NSDate() expect(value).to(be(value)) expect(NSNumber(integer:1)).toNot(be(NSString(stringLiteral: "turtles"))) #if _runtime(_ObjC) expect([1]).toNot(be([1])) #else expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) #endif let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(be(value2)) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThanOrEqualTo", testLessThanOrEqualTo), ("testLessThanOrEqualToOperator", testLessThanOrEqualToOperator), ] } func testLessThanOrEqualTo() { expect(10).to(beLessThanOrEqualTo(10)) expect(2).to(beLessThanOrEqualTo(10)) expect(2).toNot(beLessThanOrEqualTo(1)) expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10)) expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1)) #if _runtime(_ObjC) expect(2).to(beLessThanOrEqualTo(NSNumber(int:10))) expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1))) #endif failsWithErrorMessage("expected to be less than or equal to <0>, got <2>") { expect(2).to(beLessThanOrEqualTo(0)) return } failsWithErrorMessage("expected to not be less than or equal to <0>, got <0>") { expect(0).toNot(beLessThanOrEqualTo(0)) return } failsWithErrorMessageForNil("expected to be less than or equal to <2>, got ") { expect(nil as Int?).to(beLessThanOrEqualTo(2)) return } failsWithErrorMessageForNil("expected to not be less than or equal to <-2>, got ") { expect(nil as Int?).toNot(beLessThanOrEqualTo(-2)) return } } func testLessThanOrEqualToOperator() { expect(0) <= 1 expect(1) <= 1 failsWithErrorMessage("expected to be less than or equal to <1>, got <2>") { expect(2) <= 1 return } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThan", testLessThan), ("testLessThanOperator", testLessThanOperator), ] } func testLessThan() { expect(2).to(beLessThan(10)) expect(2).toNot(beLessThan(1)) #if _runtime(_ObjC) expect(NSNumber(integer:2)).to(beLessThan(10)) expect(NSNumber(integer:2)).toNot(beLessThan(1)) expect(2).to(beLessThan(NSNumber(integer:10))) expect(2).toNot(beLessThan(NSNumber(integer:1))) #endif failsWithErrorMessage("expected to be less than <0>, got <2>") { expect(2).to(beLessThan(0)) } failsWithErrorMessage("expected to not be less than <1>, got <0>") { expect(0).toNot(beLessThan(1)) } failsWithErrorMessageForNil("expected to be less than <2>, got ") { expect(nil as Int?).to(beLessThan(2)) } failsWithErrorMessageForNil("expected to not be less than <-1>, got ") { expect(nil as Int?).toNot(beLessThan(-1)) } } func testLessThanOperator() { expect(0) < 1 #if _runtime(_ObjC) expect(NSNumber(int:0)) < 1 #endif failsWithErrorMessage("expected to be less than <1>, got <2>") { expect(2) < 1 return } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift ================================================ import XCTest import Nimble enum ConvertsToBool : BooleanType, CustomStringConvertible { case TrueLike, FalseLike var boolValue : Bool { switch self { case .TrueLike: return true case .FalseLike: return false } } var description : String { switch self { case .TrueLike: return "TrueLike" case .FalseLike: return "FalseLike" } } } class BeTruthyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNonNilTypes", testShouldMatchNonNilTypes), ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchNilTypes", testShouldNotMatchNilTypes), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ("testShouldMatchBoolConvertibleTypesThatConvertToTrue", testShouldMatchBoolConvertibleTypesThatConvertToTrue), ("testShouldNotMatchBoolConvertibleTypesThatConvertToFalse", testShouldNotMatchBoolConvertibleTypesThatConvertToFalse), ] } func testShouldMatchNonNilTypes() { expect(true as Bool?).to(beTruthy()) expect(1 as Int?).to(beTruthy()) } func testShouldMatchTrue() { expect(true).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(true).toNot(beTruthy()) } } func testShouldNotMatchNilTypes() { expect(false as Bool?).toNot(beTruthy()) expect(nil as Bool?).toNot(beTruthy()) expect(nil as Int?).toNot(beTruthy()) } func testShouldNotMatchFalse() { expect(false).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(false).to(beTruthy()) } } func testShouldNotMatchNilBools() { expect(nil as Bool?).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(nil as Bool?).to(beTruthy()) } } func testShouldMatchBoolConvertibleTypesThatConvertToTrue() { expect(ConvertsToBool.TrueLike).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(ConvertsToBool.TrueLike).toNot(beTruthy()) } } func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() { expect(ConvertsToBool.FalseLike).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(ConvertsToBool.FalseLike).to(beTruthy()) } } } class BeTrueTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldMatchTrue() { expect(true).to(beTrue()) failsWithErrorMessage("expected to not be true, got ") { expect(true).toNot(beTrue()) } } func testShouldNotMatchFalse() { expect(false).toNot(beTrue()) failsWithErrorMessage("expected to be true, got ") { expect(false).to(beTrue()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to not be true, got ") { expect(nil as Bool?).toNot(beTrue()) } failsWithErrorMessageForNil("expected to be true, got ") { expect(nil as Bool?).to(beTrue()) } } } class BeFalsyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNilTypes", testShouldMatchNilTypes), ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldNotMatchNonNilTypes", testShouldNotMatchNonNilTypes), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldMatchNilBools", testShouldMatchNilBools), ] } func testShouldMatchNilTypes() { expect(false as Bool?).to(beFalsy()) expect(nil as Bool?).to(beFalsy()) expect(nil as Int?).to(beFalsy()) } func testShouldNotMatchTrue() { expect(true).toNot(beFalsy()) failsWithErrorMessage("expected to be falsy, got ") { expect(true).to(beFalsy()) } } func testShouldNotMatchNonNilTypes() { expect(true as Bool?).toNot(beFalsy()) expect(1 as Int?).toNot(beFalsy()) } func testShouldMatchFalse() { expect(false).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(false).toNot(beFalsy()) } } func testShouldMatchNilBools() { expect(nil as Bool?).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(nil as Bool?).toNot(beFalsy()) } } } class BeFalseTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldNotMatchTrue() { expect(true).toNot(beFalse()) failsWithErrorMessage("expected to be false, got ") { expect(true).to(beFalse()) } } func testShouldMatchFalse() { expect(false).to(beFalse()) failsWithErrorMessage("expected to not be false, got ") { expect(false).toNot(beFalse()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to be false, got ") { expect(nil as Bool?).to(beFalse()) } failsWithErrorMessageForNil("expected to not be false, got ") { expect(nil as Bool?).toNot(beFalse()) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeNilTest.swift ================================================ import XCTest import Nimble class BeNilTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeNil", testBeNil), ] } func producesNil() -> Array? { return nil } func testBeNil() { expect(nil as Int?).to(beNil()) expect(1 as Int?).toNot(beNil()) expect(self.producesNil()).to(beNil()) failsWithErrorMessage("expected to not be nil, got ") { expect(nil as Int?).toNot(beNil()) } failsWithErrorMessage("expected to be nil, got <1>") { expect(1 as Int?).to(beNil()) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift ================================================ import XCTest import Nimble class BeVoidTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeVoid", testBeVoid), ] } func testBeVoid() { expect(()).to(beVoid()) expect(() as ()?).to(beVoid()) expect(nil as ()?).toNot(beVoid()) expect(()) == () expect(() as ()?) == () expect(nil as ()?) != () failsWithErrorMessage("expected to not be void, got <()>") { expect(()).toNot(beVoid()) } failsWithErrorMessage("expected to not be void, got <()>") { expect(() as ()?).toNot(beVoid()) } failsWithErrorMessage("expected to be void, got ") { expect(nil as ()?).to(beVoid()) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift ================================================ import Foundation import XCTest import Nimble class BeginWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testNegativeMatches", testNegativeMatches), ] } func testPositiveMatches() { expect([1, 2, 3]).to(beginWith(1)) expect([1, 2, 3]).toNot(beginWith(2)) expect("foobar").to(beginWith("foo")) expect("foobar").toNot(beginWith("oo")) expect(NSString(string: "foobar").description).to(beginWith("foo")) expect(NSString(string: "foobar").description).toNot(beginWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(beginWith("a")) expect(NSArray(array: ["a", "b"])).toNot(beginWith("b")) #endif } func testNegativeMatches() { failsWithErrorMessageForNil("expected to begin with , got ") { expect(nil as NSArray?).to(beginWith(NSString(string: "b"))) } failsWithErrorMessageForNil("expected to not begin with , got ") { expect(nil as NSArray?).toNot(beginWith(NSString(string: "b"))) } failsWithErrorMessage("expected to begin with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(beginWith(2)) } failsWithErrorMessage("expected to not begin with <1>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(beginWith(1)) } failsWithErrorMessage("expected to begin with , got ") { expect("batman").to(beginWith("atm")) } failsWithErrorMessage("expected to not begin with , got ") { expect("batman").toNot(beginWith("bat")) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ContainTest.swift ================================================ import Foundation import XCTest import Nimble class ContainTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testContain", testContain), ("testContainSubstring", testContainSubstring), ("testContainObjCSubstring", testContainObjCSubstring), ("testVariadicArguments", testVariadicArguments), ("testCollectionArguments", testCollectionArguments), ] } func testContain() { expect([1, 2, 3]).to(contain(1)) expect([1, 2, 3] as [CInt]).to(contain(1 as CInt)) expect([1, 2, 3] as Array).to(contain(1 as CInt)) expect(["foo", "bar", "baz"]).to(contain("baz")) expect([1, 2, 3]).toNot(contain(4)) expect(["foo", "bar", "baz"]).toNot(contain("ba")) #if _runtime(_ObjC) expect(NSArray(array: ["a"])).to(contain(NSString(string: "a"))) expect(NSArray(array: ["a"])).toNot(contain(NSString(string:"b"))) expect(NSArray(object: 1) as NSArray?).to(contain(1)) #endif failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("b")) } failsWithErrorMessageForNil("expected to contain , got ") { expect(nil as [String]?).to(contain("bar")) } failsWithErrorMessageForNil("expected to not contain , got ") { expect(nil as [String]?).toNot(contain("b")) } } func testContainSubstring() { expect("foo").to(contain("o")) expect("foo").to(contain("oo")) expect("foo").toNot(contain("z")) expect("foo").toNot(contain("zz")) failsWithErrorMessage("expected to contain , got ") { expect("foo").to(contain("bar")) } failsWithErrorMessage("expected to not contain , got ") { expect("foo").toNot(contain("oo")) } } func testContainObjCSubstring() { let str = NSString(string: "foo") expect(str).to(contain(NSString(string: "o"))) expect(str).to(contain(NSString(string: "oo"))) expect(str).toNot(contain(NSString(string: "z"))) expect(str).toNot(contain(NSString(string: "zz"))) } func testVariadicArguments() { expect([1, 2, 3]).to(contain(1, 2)) expect([1, 2, 3]).toNot(contain(1, 4)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("a", "bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("bar", "b")) } } func testCollectionArguments() { expect([1, 2, 3]).to(contain([1, 2])) expect([1, 2, 3]).toNot(contain([1, 4])) let collection = Array(1...10) let slice = Array(collection[3...5]) expect(collection).to(contain(slice)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain(["a", "bar"])) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain(["bar", "b"])) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EndWithTest.swift ================================================ import Foundation import XCTest import Nimble class EndWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEndWithPositives", testEndWithPositives), ("testEndWithNegatives", testEndWithNegatives), ] } func testEndWithPositives() { expect([1, 2, 3]).to(endWith(3)) expect([1, 2, 3]).toNot(endWith(2)) expect("foobar").to(endWith("bar")) expect("foobar").toNot(endWith("oo")) expect(NSString(string: "foobar").description).to(endWith("bar")) expect(NSString(string: "foobar").description).toNot(endWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(endWith("b")) expect(NSArray(array: ["a", "b"])).toNot(endWith("a")) #endif } func testEndWithNegatives() { failsWithErrorMessageForNil("expected to end with <2>, got ") { expect(nil as [Int]?).to(endWith(2)) } failsWithErrorMessageForNil("expected to not end with <2>, got ") { expect(nil as [Int]?).toNot(endWith(2)) } failsWithErrorMessage("expected to end with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(endWith(2)) } failsWithErrorMessage("expected to not end with <3>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(endWith(3)) } failsWithErrorMessage("expected to end with , got ") { expect("batman").to(endWith("atm")) } failsWithErrorMessage("expected to not end with , got ") { expect("batman").toNot(endWith("man")) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EqualTest.swift ================================================ import Foundation import XCTest import Nimble class EqualTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEquality", testEquality), ("testArrayEquality", testArrayEquality), ("testSetEquality", testSetEquality), ("testDoesNotMatchNils", testDoesNotMatchNils), ("testDictionaryEquality", testDictionaryEquality), ("testDataEquality", testDataEquality), ("testNSObjectEquality", testNSObjectEquality), ("testOperatorEquality", testOperatorEquality), ("testOperatorEqualityWithArrays", testOperatorEqualityWithArrays), ("testOperatorEqualityWithDictionaries", testOperatorEqualityWithDictionaries), ("testOptionalEquality", testOptionalEquality), ("testArrayOfOptionalsEquality", testArrayOfOptionalsEquality), ("testDictionariesWithDifferentSequences", testDictionariesWithDifferentSequences), ] } func testEquality() { expect(1 as CInt).to(equal(1 as CInt)) expect(1 as CInt).to(equal(1)) expect(1).to(equal(1)) expect("hello").to(equal("hello")) expect("hello").toNot(equal("world")) expect { 1 }.to(equal(1)) failsWithErrorMessage("expected to equal , got ") { expect("hello").to(equal("world")) } failsWithErrorMessage("expected to not equal , got ") { expect("hello").toNot(equal("hello")) } } func testArrayEquality() { expect([1, 2, 3]).to(equal([1, 2, 3])) expect([1, 2, 3]).toNot(equal([1, 2])) expect([1, 2, 3]).toNot(equal([1, 2, 4])) let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] expect(array1).to(equal(array2)) expect(array1).to(equal([1, 2, 3])) expect(array1).toNot(equal([1, 2] as Array)) #if _runtime(_ObjC) expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3]))) #endif failsWithErrorMessage("expected to equal <[1, 2]>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(equal([1, 2])) } } func testSetEquality() { expect(Set([1, 2])).to(equal(Set([1, 2]))) expect(Set()).to(equal(Set())) expect(Set()) == Set() expect(Set([1, 2])) != Set() failsWithErrorMessageForNil("expected to equal <[1, 2]>, got ") { expect(nil as Set?).to(equal(Set([1, 2]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>") { expect(Set([2, 3])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>") { expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])) == Set([1, 2, 3]) } failsWithErrorMessage("expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>") { expect(Set([1, 2, 3])) != Set([1, 2, 3]) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as String?).to(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect("foo").toNot(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect(nil as String?).toNot(equal("bar")) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int]?).to(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1]>, got ") { expect(nil as [Int]?).toNot(equal([1])) } failsWithErrorMessageForNil("expected to not equal , got <[1]>") { expect([1]).toNot(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1: 1]>, got ") { expect(nil as [Int: Int]?).toNot(equal([1: 1])) } failsWithErrorMessageForNil("expected to not equal , got <[1: 1]>") { expect([1: 1]).toNot(equal(nil as [Int: Int]?)) } } func testDictionaryEquality() { expect(["foo": "bar"]).to(equal(["foo": "bar"])) expect(["foo": "bar"]).toNot(equal(["foo": "baz"])) let actual = ["foo": "bar"] let expected = ["foo": "bar"] let unexpected = ["foo": "baz"] expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if _runtime(_ObjC) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(["foo": "bar"])) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(expected)) #endif } func testDataEquality() { let actual = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let expected = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let unexpected = "foobarfoo".dataUsingEncoding(NSUTF8StringEncoding) expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11) let expectedErrorMessage = "expected to equal >, got >" #else let expectedErrorMessage = "expected to equal >," + " got >" #endif failsWithErrorMessage(expectedErrorMessage) { expect(actual).to(equal(unexpected)) } } func testNSObjectEquality() { expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1))) expect(NSNumber(integer:1)) == NSNumber(integer:1) expect(NSNumber(integer:1)) != NSNumber(integer:2) expect { NSNumber(integer:1) }.to(equal(1)) } func testOperatorEquality() { expect("foo") == "foo" expect("foo") != "bar" failsWithErrorMessage("expected to equal , got ") { expect("hello") == "world" return } failsWithErrorMessage("expected to not equal , got ") { expect("hello") != "hello" return } } func testOperatorEqualityWithArrays() { let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] let array3: Array = [1, 2] expect(array1) == array2 expect(array1) != array3 } func testOperatorEqualityWithDictionaries() { let dict1 = ["foo": "bar"] let dict2 = ["foo": "bar"] let dict3 = ["foo": "baz"] expect(dict1) == dict2 expect(dict1) != dict3 } func testOptionalEquality() { expect(1 as CInt?).to(equal(1)) expect(1 as CInt?).to(equal(1 as CInt?)) expect(1).toNot(equal(nil)) } func testArrayOfOptionalsEquality() { let array1: Array = [1, nil, 3] let array2: Array = [nil, 2, 3] let array3: Array = [1, nil, 3] expect(array1).toNot(equal(array2)) expect(array1).to(equal(array3)) expect(array2).toNot(equal(array3)) let allNils1: Array = [nil, nil, nil, nil] let allNils2: Array = [nil, nil, nil, nil] let notReallyAllNils: Array = [nil, nil, nil, "turtles"] expect(allNils1).to(equal(allNils2)) expect(allNils1).toNot(equal(notReallyAllNils)) let noNils1: Array = [1, 2, 3, 4, 5] let noNils2: Array = [1, 3, 5, 7, 9] expect(noNils1).toNot(equal(noNils2)) failsWithErrorMessage("expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>") { let arrayOfOptionalInts: Array = [nil, 2] let anotherArrayOfOptionalInts: Array = [1, nil] expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts)) return } } func testDictionariesWithDifferentSequences() { // see: https://github.com/Quick/Nimble/issues/61 // these dictionaries generate different orderings of sequences. let result = ["how":1, "think":1, "didnt":2, "because":1, "interesting":1, "always":1, "right":1, "such":1, "to":3, "say":1, "cool":1, "you":1, "weather":3, "be":1, "went":1, "was":2, "sometimes":1, "and":3, "mind":1, "rain":1, "whole":1, "everything":1, "weather.":1, "down":1, "kind":1, "mood.":1, "it":2, "everyday":1, "might":1, "more":1, "have":2, "person":1, "could":1, "tenth":2, "night":1, "write":1, "Youd":1, "affects":1, "of":3, "Who":1, "us":1, "an":1, "I":4, "my":1, "much":2, "wrong.":1, "peacefully.":1, "amazing":3, "would":4, "just":1, "grade.":1, "Its":2, "The":2, "had":1, "that":1, "the":5, "best":1, "but":1, "essay":1, "for":1, "summer":2, "your":1, "grade":1, "vary":1, "pretty":1, "at":1, "rain.":1, "about":1, "allow":1, "thought":1, "in":1, "sleep":1, "a":1, "hot":1, "really":1, "beach":1, "life.":1, "we":1, "although":1] let storyCount = ["The":2, "summer":2, "of":3, "tenth":2, "grade":1, "was":2, "the":5, "best":1, "my":1, "life.":1, "I":4, "went":1, "to":3, "beach":1, "everyday":1, "and":3, "we":1, "had":1, "amazing":3, "weather.":1, "weather":3, "didnt":2, "really":1, "vary":1, "much":2, "always":1, "pretty":1, "hot":1, "although":1, "sometimes":1, "at":1, "night":1, "it":2, "would":4, "rain.":1, "mind":1, "rain":1, "because":1, "cool":1, "everything":1, "down":1, "allow":1, "us":1, "sleep":1, "peacefully.":1, "Its":2, "how":1, "affects":1, "your":1, "mood.":1, "Who":1, "have":2, "thought":1, "that":1, "could":1, "write":1, "a":1, "whole":1, "essay":1, "just":1, "about":1, "in":1, "grade.":1, "kind":1, "right":1, "Youd":1, "think":1, "for":1, "such":1, "an":1, "interesting":1, "person":1, "might":1, "more":1, "say":1, "but":1, "you":1, "be":1, "wrong.":1] expect(result).to(equal(storyCount)) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift ================================================ import XCTest import Nimble class HaveCountTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testHaveCountForArray", testHaveCountForArray), ("testHaveCountForDictionary", testHaveCountForDictionary), ("testHaveCountForSet", testHaveCountForSet), ] } func testHaveCountForArray() { expect([1, 2, 3]).to(haveCount(3)) expect([1, 2, 3]).notTo(haveCount(1)) failsWithErrorMessage("expected to have Array with count 1, got 3\nActual Value: [1, 2, 3]") { expect([1, 2, 3]).to(haveCount(1)) } failsWithErrorMessage("expected to not have Array with count 3, got 3\nActual Value: [1, 2, 3]") { expect([1, 2, 3]).notTo(haveCount(3)) } } func testHaveCountForDictionary() { let dictionary = ["1":1, "2":2, "3":3] expect(dictionary).to(haveCount(3)) expect(dictionary).notTo(haveCount(1)) failsWithErrorMessage("expected to have Dictionary with count 1, got 3\nActual Value: \(stringify(dictionary))") { expect(dictionary).to(haveCount(1)) } failsWithErrorMessage("expected to not have Dictionary with count 3, got 3" + "\nActual Value: \(stringify(dictionary))") { expect(dictionary).notTo(haveCount(3)) } } func testHaveCountForSet() { let set = Set([1, 2, 3]) expect(set).to(haveCount(3)) expect(set).notTo(haveCount(1)) failsWithErrorMessage("expected to have Set with count 1, got 3" + "\nActual Value: \(stringify(set))") { expect(set).to(haveCount(1)) } failsWithErrorMessage("expected to not have Set with count 3, got 3" + "\nActual Value: \(stringify(set))") { expect(set).notTo(haveCount(3)) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift ================================================ import Foundation import XCTest import Nimble class MatchErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchErrorPositive", testMatchErrorPositive), ("testMatchErrorNegative", testMatchErrorNegative), ("testMatchNSErrorPositive", testMatchNSErrorPositive), ("testMatchNSErrorNegative", testMatchNSErrorNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testDoesNotMatchNils", testDoesNotMatchNils), ] } func testMatchErrorPositive() { expect(Error.Laugh).to(matchError(Error.Laugh)) expect(Error.Laugh).to(matchError(Error.self)) expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 1))) expect(Error.Laugh as ErrorType).to(matchError(Error.Laugh)) } func testMatchErrorNegative() { expect(Error.Laugh).toNot(matchError(Error.Cry)) expect(Error.Laugh as ErrorType).toNot(matchError(Error.Cry)) } func testMatchNSErrorPositive() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 0, userInfo: nil) expect(error1).to(matchError(error2)) } func testMatchNSErrorNegative() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).toNot(matchError(error2)) } func testMatchPositiveMessage() { failsWithErrorMessage("expected to match error , got ") { expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 2))) } failsWithErrorMessage("expected to match error , got ") { expect(Error.Laugh).to(matchError(Error.Cry)) } failsWithErrorMessage("expected to match error , got ") { expect(CustomDebugStringConvertibleError.A).to(matchError(CustomDebugStringConvertibleError.B)) } failsWithErrorMessage("expected to match error , got ") { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).to(matchError(error2)) } } func testMatchNegativeMessage() { failsWithErrorMessage("expected to not match error , got ") { expect(Error.Laugh).toNot(matchError(Error.Laugh)) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to match error , got no error") { expect(nil as ErrorType?).to(matchError(Error.Laugh)) } failsWithErrorMessageForNil("expected to not match error , got no error") { expect(nil as ErrorType?).toNot(matchError(Error.Laugh)) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class MatchTest:XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchPositive", testMatchPositive), ("testMatchNegative", testMatchNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testMatchNils", testMatchNils), ] } func testMatchPositive() { expect("11:14").to(match("\\d{2}:\\d{2}")) } func testMatchNegative() { expect("hello").toNot(match("\\d{2}:\\d{2}")) } func testMatchPositiveMessage() { let message = "expected to match <\\d{2}:\\d{2}>, got " failsWithErrorMessage(message) { expect("hello").to(match("\\d{2}:\\d{2}")) } } func testMatchNegativeMessage() { let message = "expected to not match <\\d{2}:\\d{2}>, got <11:14>" failsWithErrorMessage(message) { expect("11:14").toNot(match("\\d{2}:\\d{2}")) } } func testMatchNils() { failsWithErrorMessageForNil("expected to match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).to(match("\\d{2}:\\d{2}")) } failsWithErrorMessageForNil("expected to not match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).toNot(match("\\d{2}:\\d{2}")) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift ================================================ import XCTest import Nimble import Foundation class PostNotificationTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPassesWhenNoNotificationsArePosted", testPassesWhenNoNotificationsArePosted), ("testPassesWhenExpectedNotificationIsPosted", testPassesWhenExpectedNotificationIsPosted), ("testPassesWhenAllExpectedNotificationsArePosted", testPassesWhenAllExpectedNotificationsArePosted), ("testFailsWhenNoNotificationsArePosted", testFailsWhenNoNotificationsArePosted), ("testFailsWhenNotificationWithWrongNameIsPosted", testFailsWhenNotificationWithWrongNameIsPosted), ("testFailsWhenNotificationWithWrongObjectIsPosted", testFailsWhenNotificationWithWrongObjectIsPosted), ("testPassesWhenExpectedNotificationEventuallyIsPosted", testPassesWhenExpectedNotificationEventuallyIsPosted), ] } var notificationCenter: NSNotificationCenter! #if _runtime(_ObjC) override func setUp() { _setUp() super.setUp() } #else func setUp() { _setUp() } #endif func _setUp() { notificationCenter = NSNotificationCenter() } func testPassesWhenNoNotificationsArePosted() { expect { // no notifications here! return nil }.to(postNotifications(beEmpty(), fromNotificationCenter: notificationCenter)) } func testPassesWhenExpectedNotificationIsPosted() { let testNotification = NSNotification(name: "Foo", object: nil) expect { self.notificationCenter.postNotification(testNotification) }.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) } func testPassesWhenAllExpectedNotificationsArePosted() { let foo = NSNumber(int: 1) let bar = NSNumber(int: 2) let n1 = NSNotification(name: "Foo", object: foo) let n2 = NSNotification(name: "Bar", object: bar) expect { self.notificationCenter.postNotification(n1) self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1, n2]), fromNotificationCenter: notificationCenter)) } func testFailsWhenNoNotificationsArePosted() { let testNotification = NSNotification(name: "Foo", object: nil) failsWithErrorMessage("expected to equal <[\(testNotification)]>, got no notifications") { expect { // no notifications here! return nil }.to(postNotifications(equal([testNotification]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongNameIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name + "a", object: nil) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongObjectIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name, object: NSObject()) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testPassesWhenExpectedNotificationEventuallyIsPosted() { #if _runtime(_ObjC) let testNotification = NSNotification(name: "Foo", object: nil) expect { deferToMainQueue { self.notificationCenter.postNotification(testNotification) } return nil }.toEventually(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) #else print("\(#function) is missing because toEventually is not implement on this platform") #endif } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) && !SWIFT_PACKAGE class RaisesExceptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testNegativeMatchesDoNotCallClosureWithoutException", testNegativeMatchesDoNotCallClosureWithoutException), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } var anException = NSException(name: "laugh", reason: "Lulz", userInfo: ["key": "value"]) func testPositiveMatches() { expect { self.anException.raise() }.to(raiseException()) expect { self.anException.raise() }.to(raiseException(named: "laugh")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } func testPositiveMatchesWithClosures() { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("laugh")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).toNot(beginWith("df")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) } func testNegativeMatches() { failsWithErrorMessage("expected to raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "foo")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "bar")) } failsWithErrorMessage( "expected to raise exception with name with reason with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["k": "v"])) } failsWithErrorMessage("expected to raise any exception, got no exception") { expect { self.anException }.to(raiseException()) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } failsWithErrorMessage("expected to raise exception with name with reason , got no exception") { expect { self.anException }.to(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "bar", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh")) } failsWithErrorMessage("expected to not raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name with reason with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } } func testNegativeMatchesDoNotCallClosureWithoutException() { failsWithErrorMessage("expected to raise exception that satisfies block, got no exception") { expect { self.anException }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "ha") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason with userInfo <{}> that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } } func testNegativeMatchesWithClosure() { failsWithErrorMessage("expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } let innerFailureMessage = "expected to begin with , got " failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "wrong") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift ================================================ import XCTest import Nimble class SatisfyAnyOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testSatisfyAnyOf", testSatisfyAnyOf), ("testOperatorOr", testOperatorOr), ] } func testSatisfyAnyOf() { expect(2).to(satisfyAnyOf(equal(2), equal(3))) #if _runtime(_ObjC) expect(2).toNot(satisfyAnyOf(equal(3), equal("turtles"))) #endif expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3))) expect("turtle").toNot(satisfyAnyOf(contain("a"), endWith("magic"))) expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) expect(false).to(satisfyAnyOf(beTrue(), beFalse())) expect(true).to(satisfyAnyOf(beTruthy(), beFalsy())) failsWithErrorMessage( "expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2") { expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5))) } failsWithErrorMessage( "expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]") { expect([5,6,7]).to(satisfyAnyOf(allPass("be less than 4", {$0 < 4}), equal([1,2,3,4]))) } failsWithErrorMessage( "expected to match one of: {be true}, got false") { expect(false).to(satisfyAnyOf(beTrue())) } failsWithErrorMessage( "expected to not match one of: {be less than <10.5>}, or {be greater than <100.75>}, or {be close to <50.1> (within 0.0001)}, got 50.10001") { expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) } } func testOperatorOr() { expect(2).to(equal(2) || equal(3)) #if _runtime(_ObjC) expect(2).toNot(equal(3) || equal("turtles")) #endif expect("turtle").toNot(contain("a") || endWith("magic")) expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75)) expect(false).to(beTrue() || beFalse()) expect(true).to(beTruthy() || beFalsy()) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift ================================================ import XCTest import Nimble enum Error : ErrorType { case Laugh case Cry } enum EquatableError : ErrorType { case Parameterized(x: Int) } extension EquatableError : Equatable { } func ==(lhs: EquatableError, rhs: EquatableError) -> Bool { switch (lhs, rhs) { case (.Parameterized(let l), .Parameterized(let r)): return l == r } } enum CustomDebugStringConvertibleError : ErrorType { case A case B } extension CustomDebugStringConvertibleError : CustomDebugStringConvertible { var debugDescription : String { return "code=\(_code)" } } class ThrowErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testPositiveNegatedMatches", testPositiveNegatedMatches), ("testNegativeNegatedMatches", testNegativeNegatedMatches), ("testNegativeMatchesDoNotCallClosureWithoutError", testNegativeMatchesDoNotCallClosureWithoutError), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } func testPositiveMatches() { expect { throw Error.Laugh }.to(throwError()) expect { throw Error.Laugh }.to(throwError(Error.Laugh)) expect { throw Error.Laugh }.to(throwError(errorType: Error.self)) expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1))) } func testPositiveMatchesWithClosures() { // Generic typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in guard case EquatableError.Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Explicit typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over errorType argument expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).to(beginWith("Nim")) }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).toNot(beginWith("as")) }) } func testNegativeMatches() { // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Different case failsWithErrorMessage("expected to throw error , got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry)) } // Different case with closure failsWithErrorMessage("expected to throw error that satisfies block, got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return }) } // Different case, implementing CustomDebugStringConvertible failsWithErrorMessage("expected to throw error , got ") { expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B)) } } func testPositiveNegatedMatches() { // No error at all expect { return }.toNot(throwError()) // Different case expect { throw Error.Laugh }.toNot(throwError(Error.Cry)) } func testNegativeNegatedMatches() { // No error at all failsWithErrorMessage("expected to not throw any error, got ") { expect { throw Error.Laugh }.toNot(throwError()) } // Different error failsWithErrorMessage("expected to not throw error , got ") { expect { throw Error.Laugh }.toNot(throwError(Error.Laugh)) } } func testNegativeMatchesDoNotCallClosureWithoutError() { failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError { error in fail() }) } failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError(Error.Laugh) { error in fail() }) } } func testNegativeMatchesWithClosure() { #if SWIFT_PACKAGE let moduleName = "Nimbletest" #else let moduleName = "NimbleTests" #endif let innerFailureMessage = "expected to equal , got <\(moduleName).Error>" let closure = { (error: Error) in print("** In closure! With domain \(error._domain)") expect(error._domain).to(equal("foo")) } failsWithErrorMessage([innerFailureMessage, "expected to throw error from type that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(closure: closure)) } failsWithErrorMessage([innerFailureMessage, "expected to throw error that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure)) } } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/SynchronousTests.swift ================================================ import Foundation import XCTest import Nimble class SynchronousTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testFailAlwaysFails", testFailAlwaysFails), ("testUnexpectedErrorsThrownFails", testUnexpectedErrorsThrownFails), ("testToMatchesIfMatcherReturnsTrue", testToMatchesIfMatcherReturnsTrue), ("testToProvidesActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToMatchAgainstLazyProperties", testToMatchAgainstLazyProperties), ("testToNotMatchesIfMatcherReturnsTrue", testToNotMatchesIfMatcherReturnsTrue), ("testToNotProvidesActualValueExpression", testToNotProvidesActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpression", testToNotProvidesAMemoizedActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToNotNegativeMatches", testToNotNegativeMatches), ("testNotToMatchesLikeToNot", testNotToMatchesLikeToNot), ] } let errorToThrow = NSError(domain: NSCocoaErrorDomain, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testFailAlwaysFails() { failsWithErrorMessage("My error message") { fail("My error message") } failsWithErrorMessage("fail() always fails") { fail() } } func testUnexpectedErrorsThrownFails() { #if _runtime(_ObjC) // This test triggers a weird segfault on Linux currently failsWithErrorMessage("expected to equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.to(equal(1)) } failsWithErrorMessage("expected to not equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toNot(equal(1)) } #endif } func testToMatchesIfMatcherReturnsTrue() { expect(1).to(MatcherFunc { expr, failure in true }) expect{1}.to(MatcherFunc { expr, failure in true }) } func testToProvidesActualValueExpression() { var value: Int? expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true }) expect(value).to(equal(1)) } func testToProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToMatchAgainstLazyProperties() { expect(ObjectWithLazyProperty().value).to(equal("hello")) expect(ObjectWithLazyProperty().value).toNot(equal("world")) expect(ObjectWithLazyProperty().anotherValue).to(equal("world")) expect(ObjectWithLazyProperty().anotherValue).toNot(equal("hello")) } // repeated tests from to() for toNot() func testToNotMatchesIfMatcherReturnsTrue() { expect(1).toNot(MatcherFunc { expr, failure in false }) expect{1}.toNot(MatcherFunc { expr, failure in false }) } func testToNotProvidesActualValueExpression() { var value: Int? expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false }) expect(value).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotNegativeMatches() { failsWithErrorMessage("expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }) } } func testNotToMatchesLikeToNot() { expect(1).notTo(MatcherFunc { expr, failure in false }) } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/UserDescriptionTest.swift ================================================ import XCTest import Nimble class UserDescriptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToMatcher_CustomFailureMessage", testToMatcher_CustomFailureMessage), ("testNotToMatcher_CustomFailureMessage", testNotToMatcher_CustomFailureMessage), ("testToNotMatcher_CustomFailureMessage", testToNotMatcher_CustomFailureMessage), ("testToEventuallyMatch_CustomFailureMessage", testToEventuallyMatch_CustomFailureMessage), ("testToEventuallyNotMatch_CustomFailureMessage", testToEventuallyNotMatch_CustomFailureMessage), ("testToNotEventuallyMatch_CustomFailureMessage", testToNotEventuallyMatch_CustomFailureMessage), ] } func testToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to match, got <1>") { expect(1).to(MatcherFunc { expr, failure in false }, description: "These aren't equal!") } } func testNotToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).notTo(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToNotMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These aren't eventually equal!\n" + "expected to eventually equal <1>, got <0>") { expect { 0 }.toEventually(equal(1), description: "These aren't eventually equal!") } #endif } func testToEventuallyNotMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } func testToNotEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } } ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h ================================================ @import Nimble; #import "NimbleTests-Swift.h" // Use this when you want to verify the failure message for when an expectation fails #define expectFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; #define expectFailureMessages(MSGS, BLOCK) \ [NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__]; // Use this when you want to verify the failure message with the nil message postfixed // to it: " (use beNil() to match nils)" #define expectNilFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCAllPassTest : XCTestCase @end @implementation ObjCAllPassTest - (void)testPositiveMatches { expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5))); } - (void)testNegativeMatches { expectFailureMessage(@"expected to all be less than <3>, but failed first at element" " <3> in <[1, 2, 3, 4]>", ^{ expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).to(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).toNot(allPass(beLessThan(@5))); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCAsyncTest : XCTestCase @end @implementation ObjCAsyncTest - (void)testAsync { __block id obj = @1; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = nil; }); expect(obj).toEventually(beNil()); } - (void)testAsyncWithCustomTimeout { __block id obj = nil; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = @1; }); expect(obj).withTimeout(5).toEventuallyNot(beNil()); } - (void)testAsyncCallback { waitUntil(^(void (^done)(void)){ done(); }); expectFailureMessage(@"Waited more than 1.0 second", ^{ waitUntil(^(void (^done)(void)){ /* ... */ }); }); expectFailureMessage(@"Waited more than 0.01 seconds", ^{ waitUntilTimeout(0.01, ^(void (^done)(void)){ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [NSThread sleepForTimeInterval:0.1]; done(); }); }); }); expectFailureMessage(@"expected to equal , got ", ^{ waitUntil(^(void (^done)(void)){ [NSThread sleepForTimeInterval:0.1]; expect(@"hello").to(equal(@"goodbye")); done(); }); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeAnInstanceOfTest : XCTestCase @end @implementation ObjCBeAnInstanceOfTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beAnInstanceOf([NSNull class])); expect(@1).toNot(beAnInstanceOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be an instance of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAnInstanceOf([NSNull class])); }); expectFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect([NSNull null]).toNot(beAnInstanceOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be an instance of NSNull, got ", ^{ expect(nil).to(beAnInstanceOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect(nil).toNot(beAnInstanceOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeCloseToTest : XCTestCase @end @implementation ObjCBeCloseToTest - (void)testPositiveMatches { expect(@1.2).to(beCloseTo(@1.2001)); expect(@1.2).to(beCloseTo(@2).within(10)); expect(@2).toNot(beCloseTo(@1)); expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be close to <0> (within 0.001), got <1>", ^{ expect(@1).to(beCloseTo(@0)); }); expectFailureMessage(@"expected to not be close to <0> (within 0.001), got <0.0001>", ^{ expect(@(0.0001)).toNot(beCloseTo(@0)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be close to <0> (within 0.001), got ", ^{ expect(nil).to(beCloseTo(@0)); }); expectNilFailureMessage(@"expected to not be close to <0> (within 0.001), got ", ^{ expect(nil).toNot(beCloseTo(@0)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeEmptyTest : XCTestCase @end @implementation ObjCBeEmptyTest - (void)testPositiveMatches { expect(@[]).to(beEmpty()); expect(@"").to(beEmpty()); expect(@{}).to(beEmpty()); expect([NSSet set]).to(beEmpty()); expect([NSIndexSet indexSet]).to(beEmpty()); expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty()); expect(@[@1, @2]).toNot(beEmpty()); expect(@"a").toNot(beEmpty()); expect(@{@"key": @"value"}).toNot(beEmpty()); expect([NSSet setWithObject:@1]).toNot(beEmpty()); expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; expect(table).toNot(beEmpty()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be empty, got ", ^{ expect(@"foo").to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect(@[@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{key = value;}>", ^{ expect(@{@"key": @"value"}).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).to(beEmpty()); }); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; expectFailureMessage(([NSString stringWithFormat:@"expected to be empty, got <%@>", tableString]), ^{ expect(table).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <>", ^{ expect(@"").toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <()>", ^{ expect(@[]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{}>", ^{ expect(@{}).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got ", ^{ expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty()); }); } - (void)testItDoesNotMatchNil { expectNilFailureMessage(@"expected to be empty, got ", ^{ expect(nil).to(beEmpty()); }); expectNilFailureMessage(@"expected to not be empty, got ", ^{ expect(nil).toNot(beEmpty()); }); } - (void)testItReportsTypesItMatchesAgainst { expectFailureMessage(@"expected to be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).toNot(beEmpty()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalseTest : XCTestCase @end @implementation ObjCBeFalseTest - (void)testPositiveMatches { expect(@NO).to(beFalse()); expect(@YES).toNot(beFalse()); } - (void)testNegativeMatches { expectNilFailureMessage(@"expected to be false, got ", ^{ expect(nil).to(beFalse()); }); expectNilFailureMessage(@"expected to not be false, got ", ^{ expect(nil).toNot(beFalse()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalsyTest : XCTestCase @end @implementation ObjCBeFalsyTest - (void)testPositiveMatches { expect(@NO).to(beFalsy()); expect(@YES).toNot(beFalsy()); expect(nil).to(beFalsy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to not be falsy, got ", ^{ expect(nil).toNot(beFalsy()); }); expectFailureMessage(@"expected to be falsy, got <1>", ^{ expect(@1).to(beFalsy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanOrEqualToTest : XCTestCase @end @implementation ObjCBeGreaterThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beGreaterThanOrEqualTo(@2)); expect(@2).toNot(beGreaterThanOrEqualTo(@3)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than or equal to <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThanOrEqualTo(@0)); }); expectFailureMessage(@"expected to not be greater than or equal to <1>, got <2>", ^{ expect(@2).toNot(beGreaterThanOrEqualTo(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than or equal to <-1>, got ", ^{ expect(nil).to(beGreaterThanOrEqualTo(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than or equal to <1>, got ", ^{ expect(nil).toNot(beGreaterThanOrEqualTo(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanTest : XCTestCase @end @implementation ObjCBeGreaterThanTest - (void)testPositiveMatches { expect(@2).to(beGreaterThan(@1)); expect(@2).toNot(beGreaterThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThan(@(0))); }); expectFailureMessage(@"expected to not be greater than <1>, got <0>", ^{ expect(@0).toNot(beGreaterThan(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than <-1>, got ", ^{ expect(nil).to(beGreaterThan(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than <1>, got ", ^{ expect(nil).toNot(beGreaterThan(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeIdenticalToTest : XCTestCase @end @implementation ObjCBeIdenticalToTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beIdenticalTo([NSNull null])); expect(@2).toNot(beIdenticalTo(@3)); } - (void)testNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(beIdenticalTo(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(beIdenticalTo(obj)); }); } - (void)testNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(beIdenticalTo(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(beIdenticalTo(obj)); }); } - (void)testAliasPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(be([NSNull null])); expect(@2).toNot(be(@3)); } - (void)testAliasNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(be(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(be(obj)); }); } - (void)testAliasNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(be(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(be(obj)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeKindOfTest : XCTestCase @end @implementation ObjCBeKindOfTest - (void)testPositiveMatches { NSMutableArray *array = [NSMutableArray array]; expect(array).to(beAKindOf([NSArray class])); expect(@1).toNot(beAKindOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be a kind of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAKindOf([NSNull class])); }); expectFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect([NSNull null]).toNot(beAKindOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be a kind of NSNull, got ", ^{ expect(nil).to(beAKindOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect(nil).toNot(beAKindOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanOrEqualToTest : XCTestCase @end @implementation ObjCBeLessThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beLessThanOrEqualTo(@2)); expect(@2).toNot(beLessThanOrEqualTo(@1)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than or equal to <1>, got <2>", ^{ expect(@2).to(beLessThanOrEqualTo(@1)); }); expectFailureMessage(@"expected to not be less than or equal to <1>, got <1>", ^{ expect(@1).toNot(beLessThanOrEqualTo(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than or equal to <1>, got ", ^{ expect(nil).to(beLessThanOrEqualTo(@1)); }); expectNilFailureMessage(@"expected to not be less than or equal to <-1>, got ", ^{ expect(nil).toNot(beLessThanOrEqualTo(@(-1))); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanTest : XCTestCase @end @implementation ObjCBeLessThanTest - (void)testPositiveMatches { expect(@2).to(beLessThan(@3)); expect(@2).toNot(beLessThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than <0>, got <-1>", ^{ expect(@(-1)).to(beLessThan(@0)); }); expectFailureMessage(@"expected to not be less than <1>, got <0>", ^{ expect(@0).toNot(beLessThan(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than <-1>, got ", ^{ expect(nil).to(beLessThan(@(-1))); }); expectNilFailureMessage(@"expected to not be less than <1>, got ", ^{ expect(nil).toNot(beLessThan(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeNilTest : XCTestCase @end @implementation ObjCBeNilTest - (void)testPositiveMatches { expect(nil).to(beNil()); expect(@NO).toNot(beNil()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be nil, got <1>", ^{ expect(@1).to(beNil()); }); expectFailureMessage(@"expected to not be nil, got ", ^{ expect(nil).toNot(beNil()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTrueTest : XCTestCase @end @implementation ObjCBeTrueTest - (void)testPositiveMatches { expect(@YES).to(beTrue()); expect(@NO).toNot(beTrue()); expect(nil).toNot(beTrue()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be true, got <0>", ^{ expect(@NO).to(beTrue()); }); expectFailureMessage(@"expected to be true, got ", ^{ expect(nil).to(beTrue()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTruthyTest : XCTestCase @end @implementation ObjCBeTruthyTest - (void)testPositiveMatches { expect(@YES).to(beTruthy()); expect(@NO).toNot(beTruthy()); expect(nil).toNot(beTruthy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be truthy, got ", ^{ expect(nil).to(beTruthy()); }); expectFailureMessage(@"expected to not be truthy, got <1>", ^{ expect(@1).toNot(beTruthy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeginWithTest : XCTestCase @end @implementation ObjCBeginWithTest - (void)testPositiveMatches { expect(@"hello world!").to(beginWith(@"hello")); expect(@"hello world!").toNot(beginWith(@"world")); NSArray *array = @[@1, @2]; expect(array).to(beginWith(@1)); expect(array).toNot(beginWith(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to begin with , got ", ^{ expect(@"foo").to(beginWith(@"bar")); }); expectFailureMessage(@"expected to not begin with , got ", ^{ expect(@"foo").toNot(beginWith(@"foo")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to begin with <1>, got ", ^{ expect(nil).to(beginWith(@1)); }); expectNilFailureMessage(@"expected to not begin with <1>, got ", ^{ expect(nil).toNot(beginWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCContainTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCContainTest : XCTestCase @end @implementation ObjCContainTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(array).to(contain(@1)); expect(array).toNot(contain(@"HI")); expect(@"String").to(contain(@"Str")); expect(@"Other").toNot(contain(@"Str")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to contain <3>, got <(1, 2)>", ^{ expect((@[@1, @2])).to(contain(@3)); }); expectFailureMessage(@"expected to not contain <2>, got <(1, 2)>", ^{ expect((@[@1, @2])).toNot(contain(@2)); }); expectFailureMessage(@"expected to contain , got ", ^{ expect(@"la").to(contain(@"hi")); }); expectFailureMessage(@"expected to not contain , got ", ^{ expect(@"hihihi").toNot(contain(@"hi")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to contain <3>, got ", ^{ expect(nil).to(contain(@3)); }); expectNilFailureMessage(@"expected to not contain <3>, got ", ^{ expect(nil).toNot(contain(@3)); }); expectNilFailureMessage(@"expected to contain , got ", ^{ expect(nil).to(contain(@"hi")); }); expectNilFailureMessage(@"expected to not contain , got ", ^{ expect(nil).toNot(contain(@"hi")); }); } - (void)testVariadicArguments { NSArray *array = @[@1, @2]; expect(array).to(contain(@1, @2)); expect(array).toNot(contain(@"HI", @"whale")); expect(@"String").to(contain(@"Str", @"ng")); expect(@"Other").toNot(contain(@"Str", @"Oth")); expectFailureMessage(@"expected to contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).to(contain(@"a", @"bar")); }); expectFailureMessage(@"expected to not contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).toNot(contain(@"bar", @"b")); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEndWithTest : XCTestCase @end @implementation ObjCEndWithTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(@"hello world!").to(endWith(@"world!")); expect(@"hello world!").toNot(endWith(@"hello")); expect(array).to(endWith(@2)); expect(array).toNot(endWith(@1)); expect(@1).toNot(contain(@"foo")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to end with , got ", ^{ expect(@"hello world!").to(endWith(@"?")); }); expectFailureMessage(@"expected to not end with , got ", ^{ expect(@"hello world!").toNot(endWith(@"!")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to end with <1>, got ", ^{ expect(nil).to(endWith(@1)); }); expectNilFailureMessage(@"expected to not end with <1>, got ", ^{ expect(nil).toNot(endWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEqualTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEqualTest : XCTestCase @end @implementation ObjCEqualTest - (void)testPositiveMatches { expect(@1).to(equal(@1)); expect(@1).toNot(equal(@2)); expect(@1).notTo(equal(@2)); expect(@"hello").to(equal(@"hello")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to equal <2>, got <1>", ^{ expect(@1).to(equal(@2)); }); expectFailureMessage(@"expected to not equal <1>, got <1>", ^{ expect(@1).toNot(equal(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to equal , got ", ^{ expect(nil).to(equal(nil)); }); expectNilFailureMessage(@"expected to not equal , got ", ^{ expect(nil).toNot(equal(nil)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCHaveCount.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCHaveCountTest : XCTestCase @end @implementation ObjCHaveCountTest - (void)testHaveCountForNSArray { expect(@[@1, @2, @3]).to(haveCount(@3)); expect(@[@1, @2, @3]).notTo(haveCount(@1)); expect(@[]).to(haveCount(@0)); expect(@[@1]).notTo(haveCount(@0)); expectFailureMessage(@"expected to have NSArray with count 1, got 3\nActual Value: (1, 2, 3)", ^{ expect(@[@1, @2, @3]).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSArray with count 3, got 3\nActual Value: (1, 2, 3)", ^{ expect(@[@1, @2, @3]).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSDictionary { expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@3)); expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSDictionary with count 1, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSDictionary with count 3, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSHashtable { NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; [table addObject:@2]; [table addObject:@3]; expect(table).to(haveCount(@3)); expect(table).notTo(haveCount(@1)); NSString *msg = [NSString stringWithFormat: @"expected to have NSHashTable with count 1, got 3\nActual Value: %@", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).to(haveCount(@1)); }); msg = [NSString stringWithFormat: @"expected to not have NSHashTable with count 3, got 3\nActual Value: %@", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSSet { NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSSet with count 1, got 3\nActual Value: {(3,1,2)}", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSSet with count 3, got 3\nActual Value: {(3,1,2)}", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSIndexSet { NSIndexSet *const set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSIndexSet with count 1, got 3\nActual Value: (1, 2, 3)", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSIndexSet with count 3, got 3\nActual Value: (1, 2, 3)", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForUnsupportedTypes { expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString", ^{ expect(@"string").to(haveCount(@6)); }); expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber", ^{ expect(@1).to(haveCount(@6)); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCMatchTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCMatchTest : XCTestCase @end @implementation ObjCMatchTest - (void)testPositiveMatches { expect(@"11:14").to(match(@"\\d{2}:\\d{2}")); expect(@"hello").toNot(match(@"\\d{2}:\\d{2}")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(@"hello").to(match(@"\\d{2}:\\d{2}")); }); expectFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got <11:22>", ^{ expect(@"11:22").toNot(match(@"\\d{2}:\\d{2}")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).to(match(@"\\d{2}:\\d{2}")); }); expectNilFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).toNot(match(@"\\d{2}:\\d{2}")); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCRaiseExceptionTest : XCTestCase @end @implementation ObjCRaiseExceptionTest - (void)testPositiveMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ @throw exception; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"})); expectAction(^{ }).toNot(raiseException()); } - (void)testPositiveMatchesWithBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); } - (void)testNegativeMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise any exception, got no exception", ^{ expectAction(^{ }).to(raiseException()); }); expectFailureMessage(@"expected to raise exception with name , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(@"foo")); }); expectFailureMessage(@"expected to raise exception with name with reason , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"cakes")); }); expectFailureMessage(@"expected to raise exception with name with reason with userInfo <{k = v;}>, got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"k": @"v"})); }); expectFailureMessage(@"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }", ^{ expectAction(^{ [exception raise]; }).toNot(raiseException()); }); } - (void)testNegativeMatchesWithPassingBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise exception that satisfies block, got no exception", ^{ expect(exception).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"LOL")); })); }); NSString *outerFailureMessage = @"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(@"foo"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"bar"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); } - (void)testNegativeMatchesWithNegativeBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; NSString *outerFailureMessage; NSString const *innerFailureMessage = @"expected to equal , got "; outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCSatisfyAnyOfTest : XCTestCase @end @implementation ObjCSatisfyAnyOfTest - (void)testPositiveMatches { expect(@2).to(satisfyAnyOf(equal(@2), equal(@3))); expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16))); expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4)))); expect(@NO).to(satisfyAnyOf(beTrue(), beFalse())); expect(@YES).to(satisfyAnyOf(beTrue(), beFalse())); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2", ^{ expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5))); }); expectFailureMessage(@"expected to match one of: {all be less than <4>, but failed first at element" " <5> in <[5, 6, 7]>}, or {equal <(1, 2, 3, 4)>}, got (5,6,7)", ^{ expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4]))); }); expectFailureMessage(@"satisfyAnyOf must be called with at least one matcher", ^{ expect(@"turtles").to(satisfyAnyOf()); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCSyncTest : XCTestCase @end @implementation ObjCSyncTest - (void)testFailureExpectation { expectFailureMessage(@"fail() always fails", ^{ fail(); }); expectFailureMessage(@"This always fails", ^{ failWithMessage(@"This always fails"); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCUserDescriptionTest : XCTestCase @end @implementation ObjCUserDescriptionTest - (void)testToWithDescription { expectFailureMessage(@"These are equal!\n" "expected to equal <2>, got <1>", ^{ expect(@1).toWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).toNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testNotToWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).notToWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToEventuallyWithDescription { expectFailureMessage(@"These are equal!\n" "expected to eventually equal <2>, got <1>", ^{ expect(@1).toEventuallyWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToEventuallyNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toEventuallyNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToNotEventuallyWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toNotEventuallyWithDescription(equal(@1), @"These aren't equal!"); }); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjcStringersTest.m ================================================ @import XCTest; @import Nimble; @interface ObjcStringersTest : XCTestCase @end @implementation ObjcStringersTest - (void)testItCanStringifyArrays { NSArray *array = @[@1, @2, @3]; NSString *result = NMBStringify(array); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItCanStringifyIndexSets { NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; NSString *result = NMBStringify(indexSet); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItRoundsLongDecimals { NSNumber *num = @291.123782163; NSString *result = NMBStringify(num); expect(result).to(equal(@"291.1238")); } @end ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/circle.yml ================================================ machine: xcode: version: "7.3" dependencies: pre: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" test: override: - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx - eval "$(swiftenv init -)"; ./test swiftpm: environment: SWIFTENV_ROOT: $HOME/.swiftenv PATH: $SWIFTENV_ROOT/bin:$PATH ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/script/release ================================================ #!/usr/bin/env sh REMOTE_BRANCH=master POD_NAME=Nimble PODSPEC=Nimble.podspec POD=${COCOAPODS:-pod} function help { echo "Usage: release VERSION RELEASE_NOTES [-f]" echo echo "VERSION should be the version to release, should not include the 'v' prefix" echo "RELEASE_NOTES should be a file that lists all the release notes for this version" echo " if file does not exist, creates a git-style commit with a diff as a comment" echo echo "FLAGS" echo " -f Forces override of tag" echo echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" echo echo "HINT: use 'git diff ...HEAD' to build the release notes" echo exit 2 } function die { echo "[ERROR] $@" echo exit 1 } if [ $# -lt 2 ]; then help fi VERSION=$1 RELEASE_NOTES=$2 FORCE_TAG=$3 VERSION_TAG="v$VERSION" echo "-> Verifying Local Directory for Release" if [ -z "`which $POD`" ]; then die "Cocoapods is required to produce a release. Aborting." fi echo " > Cocoapods is installed" echo " > Is this a reasonable tag?" echo $VERSION_TAG | grep -q "^vv" if [ $? -eq 0 ]; then die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." fi echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" if [ $? -ne 0 ]; then die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." fi echo " > Is this version ($VERSION) unique?" git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 if [ $? -eq 0 ]; then if [ -z "$FORCE_TAG" ]; then die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" else echo " > NO, but force was specified." fi else echo " > Yes, tag is unique" fi if [ ! -f "$RELEASE_NOTES" ]; then echo " > Failed to find $RELEASE_NOTES. Prompting editor" RELEASE_NOTES=.release-changes LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` echo " > Latest tag ${LATEST_TAG}" echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES echo "================" >> $RELEASE_NOTES echo >> $RELEASE_NOTES echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES $EDITOR $RELEASE_NOTES diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 STATUS=$? rm ${RELEASE_NOTES}.backup if [ $STATUS -eq 0 ]; then rm $RELEASE_NOTES die "No changes in release notes file. Aborting." fi fi echo " > Release notes: $RELEASE_NOTES" if [ ! -f "$PODSPEC" ]; then die "Cannot find podspec: $PODSPEC. Aborting." fi echo " > Podspec exists" git config --get user.signingkey > /dev/null || { echo "[ERROR] No PGP found to sign tag. Aborting." echo echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" echo " intermediate between you and the end-users to modify the git repository." echo echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" echo " from the official maintainers." echo echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." echo echo "Related resources:" echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" echo exit 2 } echo " > Found PGP key for git" # Verify cocoapods trunk ownership pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." echo " > Verified ownership to $POD_NAME pod" echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." function restore_podspec { if [ -f "${PODSPEC}.backup" ]; then mv -f ${PODSPEC}{.backup,} fi } echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" git fetch origin || die "Failed to fetch origin" git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" echo "-> Setting podspec version" cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" SET_PODSPEC_VERSION=$? if [ $SET_PODSPEC_VERSION -eq 0 ]; then echo " > Podspec already set to $VERSION. Skipping." else sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { restore_podspec die "Failed to update version in podspec" } git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi if [ -z "$FORCE_TAG" ]; then echo "-> Tagging version" git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin" git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" else echo "-> Tagging version (force)" git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin (force)" git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" fi if [ $SET_PODSPEC_VERSION -ne 0 ]; then git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" echo " > Pushed version to origin" fi echo echo "---------------- Released as $VERSION_TAG ----------------" echo echo echo "Pushing to pod trunk..." $POD trunk push "$PODSPEC" echo echo "================ Finalizing the Release ================" echo echo " - Opening GitHub to mark this as a release..." echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for GitHub styling." echo " - Announce!" open "https://github.com/Quick/Nimble/releases/new?tag=$VERSION_TAG" rm ${PODSPEC}.backup ================================================ FILE: Carthage/Checkouts/Quick/Externals/Nimble/test ================================================ #!/bin/bash GREEN="\033[0;32m" CLEAR="\033[0m" if which xcodebuild > /dev/null; then echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..." BUILD_DIR=`pwd`/build LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} RUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} RUNTIME_TVOS_SDK_VERSION=${NIMBLE_RUNTIME_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} BUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION} fi set -e function color_if_overridden { local actual=$1 local env_var=$2 if [ -z "$env_var" ]; then printf "$actual" else printf "$GREEN$actual$CLEAR" fi } function print_env { echo "=== Environment ===" echo " iOS:" echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION" echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`" echo " Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`" echo echo " tvOS:" echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION" echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" echo " Running with tvOS SDK: `color_if_overridden $RUNTIME_TVOS_SDK_VERSION $NIMBLE_RUNTIME_TVOS_SDK_VERSION`" echo echo " Mac OS X:" echo " Latest OS X SDK: $LATEST_OSX_SDK_VERSION" echo " Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`" echo echo "======= END =======" echo } function run { echo -e "$GREEN==>$CLEAR $@" "$@" } function test_ios { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION" build test run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION" build test } function test_tvos { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV 1080p,OS=$RUNTIME_TVOS_SDK_VERSION" build test } function test_osx { run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-OSX" -configuration "Debug" -sdk "macosx$BUILD_OSX_SDK_VERSION" build test } function test_podspec { echo "Gathering CocoaPods installation information..." run bundle exec pod --version echo "Linting podspec..." run bundle exec pod lib lint Nimble.podspec } function test_swiftpm { run swift build --clean && swift build && swift test } function test() { test_ios test_tvos test_osx if which swift-test; then test_swiftpm else echo "Not testing with the Swift Package Manager because swift-test is not installed" fi } function clean { run rm -rf ~/Library/Developer/Xcode/DerivedData\; true } function help { echo "Usage: $0 COMMANDS" echo echo "COMMANDS:" echo " clean - Cleans the derived data directory of Xcode. Assumes default location" echo " ios - Runs the tests as an iOS device" echo " tvos - Runs the tests as an tvOS device" echo " osx - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)" echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" echo " all - Runs the all tests of ios, tvos and osx" echo " swiftpm - Runs the tests built by the Swift Package Manager" echo " help - Displays this help" echo exit 1 } function main { print_env for arg in $@ do case "$arg" in clean) clean ;; ios) test_ios ;; tvos) test_tvos ;; osx) test_osx ;; podspec) test_podspec ;; test) test ;; all) test ;; swiftpm) test_swiftpm ;; help) help ;; esac done if [ $# -eq 0 ]; then clean test fi } main $@ ================================================ FILE: Carthage/Checkouts/Quick/Gemfile ================================================ source "https://rubygems.org" gem 'cocoapods', '1.0' ================================================ FILE: Carthage/Checkouts/Quick/LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2014, Quick Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Carthage/Checkouts/Quick/Package.swift ================================================ import PackageDescription let package = Package( name: "Quick", targets: [ Target(name: "QuickTests", dependencies: [.Target(name: "Quick"), .Target(name: "QuickTestHelpers")]), Target(name: "QuickFocusedTests", dependencies: [.Target(name: "Quick"), .Target(name: "QuickTestHelpers")]), Target(name: "QuickTestHelpers", dependencies: [.Target(name: "Quick")]), ], // TODO: Once the `test` command has been implemented in the Swift Package Manager, this should be changed to // be `testDependencies:` instead. For now it has to be done like this for the library to get linked with the test targets. // See: https://github.com/apple/swift-evolution/blob/master/proposals/0019-package-manager-testing.md dependencies: [ .Package(url: "https://github.com/briancroom/Nimble", majorVersion: 3) ] ) ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.h ================================================ @import Quick; @interface ___FILEBASENAMEASIDENTIFIER___ : QuickConfiguration @end ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.m ================================================ #import "___FILEBASENAMEASIDENTIFIER___.h" @implementation ___FILEBASENAMEASIDENTIFIER___ + (void)configure:(Configuration *)configuration { } @end ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Swift/___FILEBASENAME___.swift ================================================ import Quick class ___FILEBASENAMEASIDENTIFIER___: QuickConfiguration { override class func configure(configuration: Configuration) { } } ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateInfo.plist ================================================ Kind Xcode.IDEKit.TextSubstitutionFileTemplateKind Description A QuickConfiguration subclass. Summary A QuickConfiguration subclass, overload +configure: to configure the behaviour when running specs, shared examples that are used across spec files. SortOrder 1 BuildableType Test DefaultCompletionName Spec Options Description Name of the Quick Configuration Identifier productName Name QuickConfiguration Name: NotPersisted Required Type text AllowedTypes Swift public.swift-source Objective-C public.objective-c-source public.objective-c-plus-plus-source Default Swift Description The implementation language Identifier languageChoice MainTemplateFiles Objective-C ___FILEBASENAME___.m Swift ___FILEBASENAME___.swift Name Language: Required Yes Type popup Values Swift Objective-C ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Objective-C/___FILEBASENAME___.m ================================================ #import #import QuickSpecBegin(___FILEBASENAMEASIDENTIFIER___) QuickSpecEnd ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Swift/___FILEBASENAME___.swift ================================================ import Quick import Nimble class ___FILEBASENAMEASIDENTIFIER___: QuickSpec { override func spec() { } } ================================================ FILE: Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateInfo.plist ================================================ Kind Xcode.IDEKit.TextSubstitutionFileTemplateKind Description A class implementing a Quick spec. Summary A class implementing a Quick spec SortOrder 1 BuildableType Test DefaultCompletionName Spec Options Description Name of the Quick spec class Identifier productName Name Spec Name: NotPersisted Required Type text AllowedTypes Swift public.swift-source Objective-C public.objective-c-source public.objective-c-plus-plus-source Default Swift Description The implementation language Identifier languageChoice MainTemplateFiles Objective-C ___FILEBASENAME___.m Swift ___FILEBASENAME___.swift Name Language: Required Yes Type popup Values Swift Objective-C ================================================ FILE: Carthage/Checkouts/Quick/Quick.podspec ================================================ Pod::Spec.new do |s| s.name = "Quick" s.version = "0.9.3" s.summary = "The Swift (and Objective-C) testing framework." s.description = <<-DESC Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo. DESC s.homepage = "https://github.com/Quick/Quick" s.license = { :type => "Apache 2.0", :file => "LICENSE" } s.author = "Quick Contributors" s.ios.deployment_target = "7.0" s.osx.deployment_target = "10.9" s.tvos.deployment_target = '9.0' s.source = { :git => "https://github.com/Quick/Quick.git", :tag => "v#{s.version}" } s.source_files = "Sources/Quick/**/*.{swift,h,m}" s.public_header_files = [ 'Sources/Quick/Configuration/QuickConfiguration.h', 'Sources/Quick/DSL/QCKDSL.h', 'Sources/Quick/Quick.h', 'Sources/Quick/QuickSpec.h', ] s.exclude_files = [ 'Sources/Quick/Configuration/QuickConfiguration.swift', 'Sources/Quick/QuickSpec.swift', 'Sources/Quick/QuickMain.swift', ] s.framework = "XCTest" s.requires_arc = true s.user_target_xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(PLATFORM_DIR)/Developer/Library/Frameworks' } s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' } end ================================================ FILE: Carthage/Checkouts/Quick/Quick.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; }; 1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; }; 1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; 1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; 1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; 1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; 1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; 1F118D001BDCA536005013A2 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; 1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; 1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; 1F118D031BDCA536005013A2 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; 1F118D041BDCA536005013A2 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; 1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; 1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; 1F118D071BDCA536005013A2 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; 1F118D081BDCA536005013A2 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; 1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; 1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; 1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; 1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; 1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; 1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; 1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; 1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; 1F118D121BDCA556005013A2 /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; 1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; 1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; 1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; 1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; 1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; 1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; 1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; 1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; 1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; 1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; 1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; 1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; 1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; 1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; 1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; 1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; 1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; 1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; 1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; 1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; 1F118D271BDCA5AF005013A2 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; 1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; 1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D341BDCA657005013A2 /* Nimble.framework */; }; 1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D361BDCA65C005013A2 /* Nimble.framework */; }; 1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; 1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; 1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; 34C586011C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586031C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586051C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586081C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; 34C586091C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; 34C5860A1C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; 34F375A719515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; 34F375A819515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; 34F375AB19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; 34F375AC19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; 34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; 34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; 34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; 34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; 34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; 34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; 34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; 34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; 34F375BB19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; 34F375BC19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; 470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; 470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; 471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; 471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; 4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; 4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; 4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; 4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; 4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; 4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; 47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; 47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; 479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; 479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; 47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; 47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; 5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; }; 5A5D11A7194740E000F6D13D /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7B44ADBE1C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; 7B44ADBF1C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; 7B44ADC01C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; 7B5358CE1C3D4FBC00A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; 7B5358CF1C3D4FBE00A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; 7B5358D01C3D4FC000A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; 8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; 8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; 8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; 96327C631C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; 96327C641C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; 96327C651C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; 96327C661C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; 96327C671C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; 96327C681C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; CE57CEDD1C430BD200D63004 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; CE57CEDE1C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; CE57CEDF1C430BD200D63004 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; CE57CEE01C430BD200D63004 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; CE57CEE11C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; CE590E1A1C431FE300253D19 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; CE590E1B1C431FE300253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; CE590E1C1C431FE300253D19 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; CE590E1D1C431FE300253D19 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; CE590E1E1C431FE300253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; CE590E1F1C431FE400253D19 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; CE590E201C431FE400253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; CE590E211C431FE400253D19 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; CE590E221C431FE400253D19 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; CE590E231C431FE400253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; DA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; DA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA169E4819FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; DA169E4919FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; DA3124E619FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; DA3124E719FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; DA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; DA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; DA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; DA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; DA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; DA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; DA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; DA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; DA408BE219FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; DA408BE319FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; DA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; DA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; DA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; DA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; DA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; }; DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; DA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; DA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; DA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; DA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; DA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; DA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; DA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; DA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; DA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; DA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; DA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; DA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; }; DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; DAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; DAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; DAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; DAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; DAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; DAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; DAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; DAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; DAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; DAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; DAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; DAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; DAEB6B941943873100289F44 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; }; DAED1EC41B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; DAED1EC51B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; DAED1ECA1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; DAED1ECB1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 047655511949F4CB00B288BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 047655531949F4CB00B288BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04765555194A327000B288BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F118CD41BDCA4AB005013A2; remoteInfo = "Quick-tvOS"; }; 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F118CD41BDCA4AB005013A2; remoteInfo = "Quick-tvOS"; }; 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = "Quick-OSX"; }; DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 1F118CD51BDCA4AB005013A2 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1F118D341BDCA657005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = "Externals/Nimble/build/Debug-appletvos/Nimble.framework"; sourceTree = ""; }; 1F118D361BDCA65C005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = "Externals/Nimble/build/Debug-appletvos/Nimble.framework"; sourceTree = ""; }; 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorUtility.swift; sourceTree = ""; }; 34F3759C19515CA700CE1B99 /* Callsite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Callsite.swift; sourceTree = ""; }; 34F3759E19515CA700CE1B99 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = ""; }; 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleGroup.swift; sourceTree = ""; }; 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+QCKSelectorName.h"; sourceTree = ""; }; 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+QCKSelectorName.m"; sourceTree = ""; }; 34F375A419515CA700CE1B99 /* QuickSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickSpec.h; sourceTree = ""; }; 34F375A519515CA700CE1B99 /* QuickSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickSpec.m; sourceTree = ""; }; 34F375A619515CA700CE1B99 /* World.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = World.swift; sourceTree = ""; }; 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AfterEachTests+ObjC.m"; sourceTree = ""; }; 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PendingTests+ObjC.m"; sourceTree = ""; }; 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SharedExamplesTests+ObjC.m"; sourceTree = ""; }; 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SharedExamples+BeforeEachTests+ObjC.m"; sourceTree = ""; }; 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AfterSuiteTests+ObjC.m"; sourceTree = ""; }; 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BeforeSuiteTests+ObjC.m"; sourceTree = ""; }; 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ItTests+ObjC.m"; sourceTree = ""; }; 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BeforeEachTests+ObjC.m"; sourceTree = ""; }; 5A5D117C19473F2100F6D13D /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HooksPhase.swift; sourceTree = ""; }; 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextTests.swift; sourceTree = ""; }; 8D010A561C11726F00633E2B /* DescribeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescribeTests.swift; sourceTree = ""; }; 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QuickSpec+QuickSpec_MethodList.h"; sourceTree = ""; }; 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "QuickSpec+QuickSpec_MethodList.m"; sourceTree = ""; }; AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+QCKSuspendObservation.m"; sourceTree = ""; }; AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossReferencingSpecs.swift; sourceTree = ""; }; CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSBundle+CurrentTestBundle.swift"; sourceTree = ""; }; CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickTestSuite.swift; sourceTree = ""; }; CE57CEDB1C430BD200D63004 /* String+FileName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+FileName.swift"; sourceTree = ""; }; CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; DA02C91819A8073100093156 /* ExampleMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleMetadata.swift; sourceTree = ""; }; DA05D60F19F73A3800771050 /* AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterEachTests.swift; sourceTree = ""; }; DA169E4719FF5DF100619816 /* Configuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; }; DA3124E219FCAEE8002858A7 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; DA3124E319FCAEE8002858A7 /* QCKDSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKDSL.h; sourceTree = ""; }; DA3124E419FCAEE8002858A7 /* QCKDSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKDSL.m; sourceTree = ""; }; DA3124E519FCAEE8002858A7 /* World+DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "World+DSL.swift"; sourceTree = ""; }; DA408BDF19FF5599005DF92A /* Closures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Closures.swift; sourceTree = ""; }; DA408BE019FF5599005DF92A /* ExampleHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleHooks.swift; sourceTree = ""; }; DA408BE119FF5599005DF92A /* SuiteHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuiteHooks.swift; sourceTree = ""; }; DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; DA6B30171A4DB0D500FFB148 /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = ""; }; DA7AE6F019FC493F000AFDCE /* ItTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItTests.swift; sourceTree = ""; }; DA87078219F48775008C04AC /* BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeEachTests.swift; sourceTree = ""; }; DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureUsingXCTAssertTests+ObjC.m"; sourceTree = ""; }; DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfigurationTests.m; sourceTree = ""; }; DA8F919519F31680006F6675 /* QCKSpecRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKSpecRunner.h; sourceTree = ""; }; DA8F919619F31680006F6675 /* QCKSpecRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKSpecRunner.m; sourceTree = ""; }; DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTestsBridgingHeader.h; sourceTree = ""; }; DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestObservationCenter+QCKSuspendObservation.h"; sourceTree = ""; }; DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureTests+ObjC.m"; sourceTree = ""; }; DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeSuiteTests.swift; sourceTree = ""; }; DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterSuiteTests.swift; sourceTree = ""; }; DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedExamplesTests.swift; sourceTree = ""; }; DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FunctionalTests_SharedExamplesTests_SharedExamples.swift; sourceTree = ""; }; DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; DA9876BF1A4C87200004AA17 /* FocusedTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FocusedTests.swift; sourceTree = ""; }; DA9876C01A4C87200004AA17 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DAA63EA219F7637300CD0A3B /* PendingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingTests.swift; sourceTree = ""; }; DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SharedExamples+BeforeEachTests.swift"; sourceTree = ""; }; DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+BeforeEachTests.swift"; sourceTree = ""; }; DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+BeforeEach.swift"; sourceTree = ""; }; DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+AfterEach.swift"; sourceTree = ""; }; DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+AfterEachTests.swift"; sourceTree = ""; }; DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickConfiguration.h; sourceTree = ""; }; DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfiguration.m; sourceTree = ""; }; DAEB6B8E1943873100289F44 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DAEB6B921943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DAEB6B931943873100289F44 /* Quick.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quick.h; sourceTree = ""; }; DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; DAEB6B9F1943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DAED1EC21B1105BC006F61EC /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = ""; }; DAED1EC81B110699006F61EC /* World+DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "World+DSL.h"; sourceTree = ""; }; DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FocusedTests+ObjC.m"; sourceTree = ""; }; F8100E901A1E4447007595ED /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 1F118CD11BDCA4AB005013A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CDB1BDCA4AB005013A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */, 1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CED1BDCA4BB005013A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */, 1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117819473F2100F6D13D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D118319473F2100F6D13D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */, DA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; DA5663E51A4C8D8500193C88 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( DA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */, 1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; DA9876AF1A4C70EB0004AA17 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( DA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */, DAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B8A1943873100289F44 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B961943873100289F44 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( DA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */, DAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1F118D331BDCA645005013A2 /* Frameworks */ = { isa = PBXGroup; children = ( 1F118D361BDCA65C005013A2 /* Nimble.framework */, 1F118D341BDCA657005013A2 /* Nimble.framework */, ); name = Frameworks; sourceTree = ""; }; DA169E4619FF5DF100619816 /* Configuration */ = { isa = PBXGroup; children = ( DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */, DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */, DA169E4719FF5DF100619816 /* Configuration.swift */, ); path = Configuration; sourceTree = ""; }; DA3124E119FCAEE8002858A7 /* DSL */ = { isa = PBXGroup; children = ( DA3124E519FCAEE8002858A7 /* World+DSL.swift */, DAED1EC81B110699006F61EC /* World+DSL.h */, DA3124E219FCAEE8002858A7 /* DSL.swift */, DA3124E319FCAEE8002858A7 /* QCKDSL.h */, DA3124E419FCAEE8002858A7 /* QCKDSL.m */, ); path = DSL; sourceTree = ""; }; DA408BDE19FF5599005DF92A /* Hooks */ = { isa = PBXGroup; children = ( DA408BDF19FF5599005DF92A /* Closures.swift */, DA408BE019FF5599005DF92A /* ExampleHooks.swift */, DA408BE119FF5599005DF92A /* SuiteHooks.swift */, 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */, ); path = Hooks; sourceTree = ""; }; DA8F919419F31680006F6675 /* Helpers */ = { isa = PBXGroup; children = ( DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */, DA8F919519F31680006F6675 /* QCKSpecRunner.h */, DA8F919619F31680006F6675 /* QCKSpecRunner.m */, 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */, DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */, 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */, 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */, AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */, ); path = Helpers; sourceTree = ""; }; DA8F919B19F3189D006F6675 /* FunctionalTests */ = { isa = PBXGroup; children = ( DAE714E919FF65A6005905B8 /* Configuration */, DA7AE6F019FC493F000AFDCE /* ItTests.swift */, 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */, 8D010A561C11726F00633E2B /* DescribeTests.swift */, DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */, DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */, DA87078219F48775008C04AC /* BeforeEachTests.swift */, 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */, DA05D60F19F73A3800771050 /* AfterEachTests.swift */, 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */, DAA63EA219F7637300CD0A3B /* PendingTests.swift */, 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */, DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */, 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */, DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */, 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */, DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */, 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */, DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */, 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */, 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */, AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */, ); path = FunctionalTests; sourceTree = ""; }; DA9876BE1A4C87200004AA17 /* QuickFocusedTests */ = { isa = PBXGroup; children = ( DA9876BF1A4C87200004AA17 /* FocusedTests.swift */, DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */, DA9876C31A4C87310004AA17 /* Supporting Files */, ); name = QuickFocusedTests; path = Sources/QuickFocusedTests; sourceTree = ""; }; DA9876C31A4C87310004AA17 /* Supporting Files */ = { isa = PBXGroup; children = ( DA9876C01A4C87200004AA17 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; DAE714E919FF65A6005905B8 /* Configuration */ = { isa = PBXGroup; children = ( DAE714F519FF67FF005905B8 /* AfterEach */, DAE714EA19FF65A6005905B8 /* BeforeEach */, ); path = Configuration; sourceTree = ""; }; DAE714EA19FF65A6005905B8 /* BeforeEach */ = { isa = PBXGroup; children = ( DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */, DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */, ); path = BeforeEach; sourceTree = ""; }; DAE714F519FF67FF005905B8 /* AfterEach */ = { isa = PBXGroup; children = ( DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */, DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */, ); path = AfterEach; sourceTree = ""; }; DAEB6B841943873100289F44 = { isa = PBXGroup; children = ( DAEB6B901943873100289F44 /* Quick */, DAEB6B9D1943873100289F44 /* QuickTests */, DA9876BE1A4C87200004AA17 /* QuickFocusedTests */, DAEB6B8F1943873100289F44 /* Products */, 1F118D331BDCA645005013A2 /* Frameworks */, ); indentWidth = 4; sourceTree = ""; tabWidth = 4; }; DAEB6B8F1943873100289F44 /* Products */ = { isa = PBXGroup; children = ( DAEB6B8E1943873100289F44 /* Quick.framework */, DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */, 5A5D117C19473F2100F6D13D /* Quick.framework */, 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */, DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */, DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */, 1F118CD51BDCA4AB005013A2 /* Quick.framework */, 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */, 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; DAEB6B901943873100289F44 /* Quick */ = { isa = PBXGroup; children = ( DA169E4619FF5DF100619816 /* Configuration */, DA3124E119FCAEE8002858A7 /* DSL */, DA408BDE19FF5599005DF92A /* Hooks */, DAEB6B931943873100289F44 /* Quick.h */, 34F375A619515CA700CE1B99 /* World.swift */, DAED1EC21B1105BC006F61EC /* World.h */, 34F3759E19515CA700CE1B99 /* Example.swift */, DA02C91819A8073100093156 /* ExampleMetadata.swift */, 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */, 34F3759C19515CA700CE1B99 /* Callsite.swift */, DA6B30171A4DB0D500FFB148 /* Filter.swift */, 34F375A419515CA700CE1B99 /* QuickSpec.h */, 34F375A519515CA700CE1B99 /* QuickSpec.m */, CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */, CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */, CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */, 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */, 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */, CE57CEDB1C430BD200D63004 /* String+FileName.swift */, CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */, 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */, DAEB6B911943873100289F44 /* Supporting Files */, ); name = Quick; path = Sources/Quick; sourceTree = ""; }; DAEB6B911943873100289F44 /* Supporting Files */ = { isa = PBXGroup; children = ( DAEB6B921943873100289F44 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; DAEB6B9D1943873100289F44 /* QuickTests */ = { isa = PBXGroup; children = ( DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */, DA8F919419F31680006F6675 /* Helpers */, DAEB6BCD194387D700289F44 /* Fixtures */, DA8F919B19F3189D006F6675 /* FunctionalTests */, F8100E941A1E4469007595ED /* Frameworks */, DAEB6B9E1943873100289F44 /* Supporting Files */, ); name = QuickTests; path = Sources/QuickTests; sourceTree = ""; }; DAEB6B9E1943873100289F44 /* Supporting Files */ = { isa = PBXGroup; children = ( DAEB6B9F1943873100289F44 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; DAEB6BCD194387D700289F44 /* Fixtures */ = { isa = PBXGroup; children = ( DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */, ); path = Fixtures; sourceTree = ""; }; F8100E941A1E4469007595ED /* Frameworks */ = { isa = PBXGroup; children = ( F8100E901A1E4447007595ED /* Nimble.framework */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 1F118CD21BDCA4AB005013A2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */, 1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */, 96327C651C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, 1F118D271BDCA5AF005013A2 /* World.h in Headers */, 1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */, 1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */, 1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */, 1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117919473F2100F6D13D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */, DAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */, 96327C641C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, DA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */, DAED1ECB1B110699006F61EC /* World+DSL.h in Headers */, DAED1EC51B1105BC006F61EC /* World.h in Headers */, 34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */, 5A5D11A7194740E000F6D13D /* Quick.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B8B1943873100289F44 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */, DAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */, 96327C631C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, DA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */, DAED1ECA1B110699006F61EC /* World+DSL.h in Headers */, DAED1EC41B1105BC006F61EC /* World.h in Headers */, 34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */, DAEB6B941943873100289F44 /* Quick.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOS" */; buildPhases = ( 1F118CD01BDCA4AB005013A2 /* Sources */, 1F118CD11BDCA4AB005013A2 /* Frameworks */, 1F118CD21BDCA4AB005013A2 /* Headers */, 1F118CD31BDCA4AB005013A2 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Quick-tvOS"; productName = "Quick-tvOS"; productReference = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; productType = "com.apple.product-type.framework"; }; 1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOSTests" */; buildPhases = ( 1F118CDA1BDCA4AB005013A2 /* Sources */, 1F118CDB1BDCA4AB005013A2 /* Frameworks */, 1F118CDC1BDCA4AB005013A2 /* Resources */, ); buildRules = ( ); dependencies = ( 1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */, ); name = "Quick-tvOSTests"; productName = "Quick-tvOSTests"; productReference = 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget "QuickFocused-tvOSTests" */; buildPhases = ( 1F118CEC1BDCA4BB005013A2 /* Sources */, 1F118CED1BDCA4BB005013A2 /* Frameworks */, 1F118CEE1BDCA4BB005013A2 /* Resources */, ); buildRules = ( ); dependencies = ( 1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */, ); name = "QuickFocused-tvOSTests"; productName = "QuickFocused-tvOSTests"; productReference = 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 5A5D117B19473F2100F6D13D /* Quick-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOS" */; buildPhases = ( 5A5D117719473F2100F6D13D /* Sources */, 5A5D117819473F2100F6D13D /* Frameworks */, 5A5D117919473F2100F6D13D /* Headers */, 5A5D117A19473F2100F6D13D /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Quick-iOS"; productName = "Quick-iOS"; productReference = 5A5D117C19473F2100F6D13D /* Quick.framework */; productType = "com.apple.product-type.framework"; }; 5A5D118519473F2100F6D13D /* Quick-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOSTests" */; buildPhases = ( 5A5D118219473F2100F6D13D /* Sources */, 5A5D118319473F2100F6D13D /* Frameworks */, 5A5D118419473F2100F6D13D /* Resources */, ); buildRules = ( ); dependencies = ( 5A5D118919473F2100F6D13D /* PBXTargetDependency */, 5A5D11F0194741B500F6D13D /* PBXTargetDependency */, 5A5D11F2194741B500F6D13D /* PBXTargetDependency */, 04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */, 04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */, 04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */, 04DC97F7194B831200CE00B6 /* PBXTargetDependency */, 04DC97FB194B834100CE00B6 /* PBXTargetDependency */, 04DC97FF194B835E00CE00B6 /* PBXTargetDependency */, 04DC9803194B836300CE00B6 /* PBXTargetDependency */, 04DC9807194B838700CE00B6 /* PBXTargetDependency */, ); name = "Quick-iOSTests"; productName = "Quick-iOSTests"; productReference = 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; DA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget "QuickFocused-OSXTests" */; buildPhases = ( DA5663E41A4C8D8500193C88 /* Sources */, DA5663E51A4C8D8500193C88 /* Frameworks */, DA5663E61A4C8D8500193C88 /* Resources */, ); buildRules = ( ); dependencies = ( DA5663F01A4C8D8500193C88 /* PBXTargetDependency */, ); name = "QuickFocused-OSXTests"; productName = "QuickFocused-OSXTests"; productReference = DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; DA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget "QuickFocused-iOSTests" */; buildPhases = ( DA9876AE1A4C70EB0004AA17 /* Sources */, DA9876AF1A4C70EB0004AA17 /* Frameworks */, DA9876B01A4C70EB0004AA17 /* Resources */, ); buildRules = ( ); dependencies = ( DA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */, ); name = "QuickFocused-iOSTests"; productName = "QuickFocused-iOSTests"; productReference = DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; DAEB6B8D1943873100289F44 /* Quick-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSX" */; buildPhases = ( DAEB6B891943873100289F44 /* Sources */, DAEB6B8A1943873100289F44 /* Frameworks */, DAEB6B8B1943873100289F44 /* Headers */, DAEB6B8C1943873100289F44 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Quick-OSX"; productName = Quick; productReference = DAEB6B8E1943873100289F44 /* Quick.framework */; productType = "com.apple.product-type.framework"; }; DAEB6B981943873100289F44 /* Quick-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSXTests" */; buildPhases = ( DAEB6B951943873100289F44 /* Sources */, DAEB6B961943873100289F44 /* Frameworks */, DAEB6B971943873100289F44 /* Resources */, ); buildRules = ( ); dependencies = ( DAEB6B9C1943873100289F44 /* PBXTargetDependency */, 047655521949F4CB00B288BB /* PBXTargetDependency */, 047655541949F4CB00B288BB /* PBXTargetDependency */, 04765556194A327000B288BB /* PBXTargetDependency */, 04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */, 04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */, 04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */, 04DC97F9194B834000CE00B6 /* PBXTargetDependency */, 04DC97FD194B834B00CE00B6 /* PBXTargetDependency */, 04DC9801194B836100CE00B6 /* PBXTargetDependency */, 04DC9805194B838400CE00B6 /* PBXTargetDependency */, 04DC9809194B838B00CE00B6 /* PBXTargetDependency */, 93625F391951DDC8006B1FE1 /* PBXTargetDependency */, ); name = "Quick-OSXTests"; productName = QuickTests; productReference = DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ DAEB6B851943873100289F44 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Brian Ivan Gesiak"; TargetAttributes = { 1F118CD41BDCA4AB005013A2 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F118CDD1BDCA4AB005013A2 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F118CEF1BDCA4BB005013A2 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 5A5D117B19473F2100F6D13D = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 5A5D118519473F2100F6D13D = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 5A5D117B19473F2100F6D13D; }; DA5663E71A4C8D8500193C88 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; DA9876B11A4C70EB0004AA17 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; DAEB6B8D1943873100289F44 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; DAEB6B981943873100289F44 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = DAEB6B8D1943873100289F44; }; }; }; buildConfigurationList = DAEB6B881943873100289F44 /* Build configuration list for PBXProject "Quick" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = DAEB6B841943873100289F44; productRefGroup = DAEB6B8F1943873100289F44 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( DAEB6B8D1943873100289F44 /* Quick-OSX */, DAEB6B981943873100289F44 /* Quick-OSXTests */, DA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */, 5A5D117B19473F2100F6D13D /* Quick-iOS */, 5A5D118519473F2100F6D13D /* Quick-iOSTests */, DA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */, 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */, 1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */, 1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 1F118CD31BDCA4AB005013A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CDC1BDCA4AB005013A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CEE1BDCA4BB005013A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117A19473F2100F6D13D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D118419473F2100F6D13D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DA5663E61A4C8D8500193C88 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DA9876B01A4C70EB0004AA17 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B8C1943873100289F44 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B971943873100289F44 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 1F118CD01BDCA4AB005013A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 96327C681C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, 1F118D031BDCA536005013A2 /* World.swift in Sources */, CE590E201C431FE400253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */, 1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */, 1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */, 1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */, 34C5860A1C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, 1F118D041BDCA536005013A2 /* Example.swift in Sources */, 1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */, CE590E211C431FE400253D19 /* NSBundle+CurrentTestBundle.swift in Sources */, 1F118D071BDCA536005013A2 /* Callsite.swift in Sources */, CE590E231C431FE400253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, 1F118D081BDCA536005013A2 /* Filter.swift in Sources */, 1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */, CE590E221C431FE400253D19 /* String+FileName.swift in Sources */, 1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */, 1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */, 7B44ADC01C5444940007AF2E /* HooksPhase.swift in Sources */, 1F118D001BDCA536005013A2 /* Closures.swift in Sources */, 1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */, 1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */, CE590E1F1C431FE400253D19 /* QuickTestSuite.swift in Sources */, 1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */, 1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CDA1BDCA4AB005013A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */, 1F118D121BDCA556005013A2 /* ItTests.swift in Sources */, 1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */, 1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */, 1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */, 1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */, 1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, 1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */, 1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */, 1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */, 1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */, 1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, 1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, 1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */, 1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */, 1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */, AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, 1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */, 1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */, 1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */, 1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */, 1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */, 1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */, 34C586051C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */, 8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */, 1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */, 1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */, 1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */, 7B5358D01C3D4FC000A23FAA /* ContextTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CEC1BDCA4BB005013A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */, 34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */, 1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */, 1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */, AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117719473F2100F6D13D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 96327C671C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, 34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */, CE590E1B1C431FE300253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */, DA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */, DA408BE319FF5599005DF92A /* Closures.swift in Sources */, DA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */, 34C586091C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, DA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */, 34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */, CE590E1C1C431FE300253D19 /* NSBundle+CurrentTestBundle.swift in Sources */, DAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */, CE590E1E1C431FE300253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, 34F375A819515CA700CE1B99 /* Callsite.swift in Sources */, 34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */, CE590E1D1C431FE300253D19 /* String+FileName.swift in Sources */, 34F375BC19515CA700CE1B99 /* World.swift in Sources */, DA169E4919FF5DF100619816 /* Configuration.swift in Sources */, 7B44ADBF1C5444940007AF2E /* HooksPhase.swift in Sources */, DA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */, DA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */, 34F375AC19515CA700CE1B99 /* Example.swift in Sources */, CE590E1A1C431FE300253D19 /* QuickTestSuite.swift in Sources */, DA3124E719FCAEE8002858A7 /* DSL.swift in Sources */, DA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D118219473F2100F6D13D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */, DAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */, DA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */, DA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, 4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */, DAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */, DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */, DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */, DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */, DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */, DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */, DA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */, DA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */, 4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */, AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, 471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */, DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */, DAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */, DA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */, 4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */, 479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */, 34C586031C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */, 8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */, 47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */, 470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */, 47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */, 7B5358CF1C3D4FBE00A23FAA /* ContextTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DA5663E41A4C8D8500193C88 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */, 34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */, DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */, DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */, AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DA9876AE1A4C70EB0004AA17 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */, 34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */, DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */, DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */, AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B891943873100289F44 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 96327C661C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, 34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */, CE57CEDE1C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift in Sources */, DA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */, DA408BE219FF5599005DF92A /* Closures.swift in Sources */, CE57CEDD1C430BD200D63004 /* NSBundle+CurrentTestBundle.swift in Sources */, DA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */, CE57CEDF1C430BD200D63004 /* QuickTestSuite.swift in Sources */, 34C586081C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, DA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */, 34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */, CE57CEE11C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, DAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */, 34F375A719515CA700CE1B99 /* Callsite.swift in Sources */, CE57CEE01C430BD200D63004 /* String+FileName.swift in Sources */, 34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */, 34F375BB19515CA700CE1B99 /* World.swift in Sources */, DA169E4819FF5DF100619816 /* Configuration.swift in Sources */, 7B44ADBE1C5444940007AF2E /* HooksPhase.swift in Sources */, DA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */, DA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */, 34F375AB19515CA700CE1B99 /* Example.swift in Sources */, DA3124E619FCAEE8002858A7 /* DSL.swift in Sources */, DA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B951943873100289F44 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */, DAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */, DA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */, DA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, 4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */, DAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */, DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */, DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */, DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */, DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */, DAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */, DA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */, DA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */, 4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */, AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, 471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */, DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */, DAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */, DA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */, 4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */, 479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */, 34C586011C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */, 8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */, 47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */, 470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */, 47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */, 7B5358CE1C3D4FBC00A23FAA /* ContextTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 047655521949F4CB00B288BB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 047655511949F4CB00B288BB /* PBXContainerItemProxy */; }; 047655541949F4CB00B288BB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 047655531949F4CB00B288BB /* PBXContainerItemProxy */; }; 04765556194A327000B288BB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04765555194A327000B288BB /* PBXContainerItemProxy */; }; 04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */; }; 04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */; }; 04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */; }; 04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */; }; 04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */; }; 04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */; }; 04DC97F7194B831200CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */; }; 04DC97F9194B834000CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */; }; 04DC97FB194B834100CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */; }; 04DC97FD194B834B00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */; }; 04DC97FF194B835E00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */; }; 04DC9801194B836100CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */; }; 04DC9803194B836300CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */; }; 04DC9805194B838400CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */; }; 04DC9807194B838700CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */; }; 04DC9809194B838B00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */; }; 1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */; targetProxy = 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */; }; 1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */; targetProxy = 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */; }; 5A5D118919473F2100F6D13D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */; }; 5A5D11F0194741B500F6D13D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */; }; 5A5D11F2194741B500F6D13D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */; }; 93625F391951DDC8006B1FE1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */; }; DA5663F01A4C8D8500193C88 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */; }; DA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */; }; DAEB6B9C1943873100289F44 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1F118CE71BDCA4AB005013A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Quick; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F118CE81BDCA4AB005013A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Quick; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 1F118CEA1BDCA4AB005013A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F118CEB1BDCA4AB005013A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 1F118CF91BDCA4BC005013A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F118CFA1BDCA4BC005013A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 5A5D118F19473F2100F6D13D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SDKROOT = iphoneos; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 5A5D119019473F2100F6D13D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SDKROOT = iphoneos; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 5A5D119119473F2100F6D13D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 5A5D119219473F2100F6D13D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; DA5663F11A4C8D8500193C88 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; DA5663F21A4C8D8500193C88 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; DA9876BB1A4C70EB0004AA17 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; DA9876BC1A4C70EB0004AA17 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; DAEB6BA21943873200289F44 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; 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_MISSING_NEWLINE = 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; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; DAEB6BA31943873200289F44 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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_MISSING_NEWLINE = 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; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; DAEB6BA51943873200289F44 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; DAEB6BA61943873200289F44 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALID_ARCHS = x86_64; }; name = Release; }; DAEB6BA81943873200289F44 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; DAEB6BA91943873200289F44 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F118CE71BDCA4AB005013A2 /* Debug */, 1F118CE81BDCA4AB005013A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F118CEA1BDCA4AB005013A2 /* Debug */, 1F118CEB1BDCA4AB005013A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget "QuickFocused-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F118CF91BDCA4BC005013A2 /* Debug */, 1F118CFA1BDCA4BC005013A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 5A5D118F19473F2100F6D13D /* Debug */, 5A5D119019473F2100F6D13D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 5A5D119119473F2100F6D13D /* Debug */, 5A5D119219473F2100F6D13D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget "QuickFocused-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( DA5663F11A4C8D8500193C88 /* Debug */, DA5663F21A4C8D8500193C88 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget "QuickFocused-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( DA9876BB1A4C70EB0004AA17 /* Debug */, DA9876BC1A4C70EB0004AA17 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DAEB6B881943873100289F44 /* Build configuration list for PBXProject "Quick" */ = { isa = XCConfigurationList; buildConfigurations = ( DAEB6BA21943873200289F44 /* Debug */, DAEB6BA31943873200289F44 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( DAEB6BA51943873200289F44 /* Debug */, DAEB6BA61943873200289F44 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( DAEB6BA81943873200289F44 /* Debug */, DAEB6BA91943873200289F44 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = DAEB6B851943873100289F44 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Quick/Quick.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Quick/Quick.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Quick/README.md ================================================ ![](http://f.cl.ly/items/0r1E192C1R0b2g2Q3h2w/QuickLogo_Color.png) Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by [RSpec](https://github.com/rspec/rspec), [Specta](https://github.com/specta/specta), and [Ginkgo](https://github.com/onsi/ginkgo). ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/QuickSpec%20screenshot.png) ```swift // Swift import Quick import Nimble class TableOfContentsSpec: QuickSpec { override func spec() { describe("the 'Documentation' directory") { it("has everything you need to get started") { let sections = Directory("Documentation").sections expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups")) expect(sections).to(contain("Installing Quick")) } context("if it doesn't have what you're looking for") { it("needs to be updated") { let you = You(awesome: true) expect{you.submittedAnIssue}.toEventually(beTruthy()) } } } } } ``` #### Nimble Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/en-us/NimbleAssertions.md). ## Documentation All documentation can be found in the [Documentation folder](./Documentation), including [detailed installation instructions](./Documentation/en-us/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your Podfile: ```rb # Podfile use_frameworks! def testing_pods pod 'Quick' pod 'Nimble' end target 'MyTests' do testing_pods end target 'MyUITests' do testing_pods end ``` ## License Apache 2.0 license. See the `LICENSE` file for details. ================================================ FILE: Carthage/Checkouts/Quick/Rakefile ================================================ def run(command) system(command) or raise "RAKE TASK FAILED: #{command}" end def has_xcodebuild system "which xcodebuild >/dev/null" end def xcode_action ENV["XCODE_ACTION"] || "build test" end namespace "podspec" do desc "Run lint for podspec" task :lint do run "bundle exec pod lib lint" end end namespace "test" do desc "Run unit tests for all iOS targets" task :ios do |t| run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-iOS -destination 'platform=iOS Simulator,name=iPhone 6' clean #{xcode_action}" end desc "Run unit tests for all tvOS targets" task :tvos do |t| run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-tvOS -destination 'platform=tvOS Simulator,name=Apple TV 1080p' clean #{xcode_action}" end desc "Run unit tests for all OS X targets" task :osx do |t| run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-OSX clean #{xcode_action}" end desc "Run unit tests for the current platform built by the Swift Package Manager" task :swiftpm do |t| run "swift build --clean && swift build" run ".build/debug/QuickTests" run ".build/debug/QuickFocusedTests" end end namespace "templates" do install_dir = File.expand_path("~/Library/Developer/Xcode/Templates/File Templates/Quick") src_dir = File.expand_path("../Quick Templates", __FILE__) desc "Install Quick templates" task :install do if File.exists? install_dir raise "RAKE TASK FAILED: Quick templates are already installed at #{install_dir}" else mkdir_p install_dir cp_r src_dir, install_dir end end desc "Uninstall Quick templates" task :uninstall do rm_rf install_dir end end if has_xcodebuild then task default: ["test:ios", "test:tvos", "test:osx"] else task default: ["test:swiftpm"] end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Callsite.swift ================================================ import Foundation /** An object encapsulating the file and line number at which a particular example is defined. */ final public class Callsite: NSObject { /** The absolute path of the file in which an example is defined. */ public let file: String /** The line number on which an example is defined. */ public let line: UInt internal init(file: String, line: UInt) { self.file = file self.line = line } } /** Returns a boolean indicating whether two Callsite objects are equal. If two callsites are in the same file and on the same line, they must be equal. */ public func ==(lhs: Callsite, rhs: Callsite) -> Bool { return lhs.file == rhs.file && lhs.line == rhs.line } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Configuration/Configuration.swift ================================================ import Foundation /** A closure that temporarily exposes a Configuration object within the scope of the closure. */ public typealias QuickConfigurer = (configuration: Configuration) -> () /** A closure that, given metadata about an example, returns a boolean value indicating whether that example should be run. */ public typealias ExampleFilter = (example: Example) -> Bool /** A configuration encapsulates various options you can use to configure Quick's behavior. */ final public class Configuration: NSObject { internal let exampleHooks = ExampleHooks() internal let suiteHooks = SuiteHooks() internal var exclusionFilters: [ExampleFilter] = [{ example in if let pending = example.filterFlags[Filter.pending] { return pending } else { return false } }] internal var inclusionFilters: [ExampleFilter] = [{ example in if let focused = example.filterFlags[Filter.focused] { return focused } else { return false } }] /** Run all examples if none match the configured filters. True by default. */ public var runAllWhenEverythingFiltered = true /** Registers an inclusion filter. All examples are filtered using all inclusion filters. The remaining examples are run. If no examples remain, all examples are run. - parameter filter: A filter that, given an example, returns a value indicating whether that example should be included in the examples that are run. */ public func include(filter: ExampleFilter) { inclusionFilters.append(filter) } /** Registers an exclusion filter. All examples that remain after being filtered by the inclusion filters are then filtered via all exclusion filters. - parameter filter: A filter that, given an example, returns a value indicating whether that example should be excluded from the examples that are run. */ public func exclude(filter: ExampleFilter) { exclusionFilters.append(filter) } /** Identical to Quick.Configuration.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. */ #if _runtime(_ObjC) @objc(beforeEachWithMetadata:) public func beforeEach(closure: BeforeExampleWithMetadataClosure) { exampleHooks.appendBefore(closure) } #else public func beforeEach(closure: BeforeExampleWithMetadataClosure) { exampleHooks.appendBefore(closure) } #endif /** Like Quick.DSL.beforeEach, this configures Quick to execute the given closure before each example that is run. The closure passed to this method is executed before each example Quick runs, globally across the test suite. You may call this method multiple times across mulitple +[QuickConfigure configure:] methods in order to define several closures to run before each example. Note that, since Quick makes no guarantee as to the order in which +[QuickConfiguration configure:] methods are evaluated, there is no guarantee as to the order in which beforeEach closures are evaluated either. Mulitple beforeEach defined on a single configuration, however, will be executed in the order they're defined. - parameter closure: The closure to be executed before each example in the test suite. */ public func beforeEach(closure: BeforeExampleClosure) { exampleHooks.appendBefore(closure) } /** Identical to Quick.Configuration.afterEach, except the closure is provided with metadata on the example that the closure is being run after. */ #if _runtime(_ObjC) @objc(afterEachWithMetadata:) public func afterEach(closure: AfterExampleWithMetadataClosure) { exampleHooks.appendAfter(closure) } #else public func afterEach(closure: AfterExampleWithMetadataClosure) { exampleHooks.appendAfter(closure) } #endif /** Like Quick.DSL.afterEach, this configures Quick to execute the given closure after each example that is run. The closure passed to this method is executed after each example Quick runs, globally across the test suite. You may call this method multiple times across mulitple +[QuickConfigure configure:] methods in order to define several closures to run after each example. Note that, since Quick makes no guarantee as to the order in which +[QuickConfiguration configure:] methods are evaluated, there is no guarantee as to the order in which afterEach closures are evaluated either. Mulitple afterEach defined on a single configuration, however, will be executed in the order they're defined. - parameter closure: The closure to be executed before each example in the test suite. */ public func afterEach(closure: AfterExampleClosure) { exampleHooks.appendAfter(closure) } /** Like Quick.DSL.beforeSuite, this configures Quick to execute the given closure prior to any and all examples that are run. The two methods are functionally equivalent. */ public func beforeSuite(closure: BeforeSuiteClosure) { suiteHooks.appendBefore(closure) } /** Like Quick.DSL.afterSuite, this configures Quick to execute the given closure after all examples have been run. The two methods are functionally equivalent. */ public func afterSuite(closure: AfterSuiteClosure) { suiteHooks.appendAfter(closure) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.h ================================================ #import @class Configuration; /** Subclass QuickConfiguration and override the +[QuickConfiguration configure:] method in order to configure how Quick behaves when running specs, or to define shared examples that are used across spec files. */ @interface QuickConfiguration : NSObject /** This method is executed on each subclass of this class before Quick runs any examples. You may override this method on as many subclasses as you like, but there is no guarantee as to the order in which these methods are executed. You can override this method in order to: 1. Configure how Quick behaves, by modifying properties on the Configuration object. Setting the same properties in several methods has undefined behavior. 2. Define shared examples using `sharedExamples`. @param configuration A mutable object that is used to configure how Quick behaves on a framework level. For details on all the options, see the documentation in Configuration.swift. */ + (void)configure:(Configuration *)configuration; @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.m ================================================ #import "QuickConfiguration.h" #import "World.h" #import typedef void (^QCKClassEnumerationBlock)(Class klass); /** Finds all direct subclasses of the given class and passes them to the block provided. The classes are iterated over in the order that objc_getClassList returns them. @param klass The base class to find subclasses of. @param block A block that takes a Class. This block will be executed once for each subclass of klass. */ void qck_enumerateSubclasses(Class klass, QCKClassEnumerationBlock block) { Class *classes = NULL; int classesCount = objc_getClassList(NULL, 0); if (classesCount > 0) { classes = (Class *)calloc(sizeof(Class), classesCount); classesCount = objc_getClassList(classes, classesCount); Class subclass, superclass; for(int i = 0; i < classesCount; i++) { subclass = classes[i]; superclass = class_getSuperclass(subclass); if (superclass == klass && block) { block(subclass); } } free(classes); } } @implementation QuickConfiguration #pragma mark - Object Lifecycle /** QuickConfiguration is not meant to be instantiated; it merely provides a hook for users to configure how Quick behaves. Raise an exception if an instance of QuickConfiguration is created. */ - (instancetype)init { NSString *className = NSStringFromClass([self class]); NSString *selectorName = NSStringFromSelector(@selector(configure:)); [NSException raise:NSInternalInconsistencyException format:@"%@ is not meant to be instantiated; " @"subclass %@ and override %@ to configure Quick.", className, className, selectorName]; return nil; } #pragma mark - NSObject Overrides /** Hook into when QuickConfiguration is initialized in the runtime in order to call +[QuickConfiguration configure:] on each of its subclasses. */ + (void)initialize { // Only enumerate over the subclasses of QuickConfiguration, not any of its subclasses. if ([self class] == [QuickConfiguration class]) { // Only enumerate over subclasses once, even if +[QuickConfiguration initialize] // were to be called several times. This is necessary because +[QuickSpec initialize] // manually calls +[QuickConfiguration initialize]. static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ qck_enumerateSubclasses([QuickConfiguration class], ^(__unsafe_unretained Class klass) { [[World sharedWorld] configure:^(Configuration *configuration) { [klass configure:configuration]; }]; }); [[World sharedWorld] finalizeConfiguration]; }); } } #pragma mark - Public Interface + (void)configure:(Configuration *)configuration { } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.swift ================================================ import XCTest // NOTE: This file is not intended to be included in the Xcode project or CocoaPods. // It is picked up by the Swift Package Manager during its build process. public class QuickConfiguration { public class func configure(configuration: Configuration) {} } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/DSL/DSL.swift ================================================ /** Defines a closure to be run prior to any examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before the first example is run, this closure will not be executed. - parameter closure: The closure to be run prior to any examples in the test suite. */ public func beforeSuite(closure: BeforeSuiteClosure) { World.sharedWorld.beforeSuite(closure) } /** Defines a closure to be run after all of the examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before all examples are run, this closure will not be executed. - parameter closure: The closure to be run after all of the examples in the test suite. */ public func afterSuite(closure: AfterSuiteClosure) { World.sharedWorld.afterSuite(closure) } /** Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. - parameter name: The name of the shared example group. This must be unique across all shared example groups defined in a test suite. - parameter closure: A closure containing the examples. This behaves just like an example group defined using `describe` or `context`--the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). */ public func sharedExamples(name: String, closure: () -> ()) { World.sharedWorld.sharedExamples(name, closure: { (NSDictionary) in closure() }) } /** Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. - parameter name: The name of the shared example group. This must be unique across all shared example groups defined in a test suite. - parameter closure: A closure containing the examples. This behaves just like an example group defined using `describe` or `context`--the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). The closure takes a SharedExampleContext as an argument. This context is a function that can be executed to retrieve parameters passed in via an `itBehavesLike` function. */ public func sharedExamples(name: String, closure: SharedExampleClosure) { World.sharedWorld.sharedExamples(name, closure: closure) } /** Defines an example group. Example groups are logical groupings of examples. Example groups can share setup and teardown code. - parameter description: An arbitrary string describing the example group. - parameter closure: A closure that can contain other examples. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. */ public func describe(description: String, flags: FilterFlags = [:], closure: () -> ()) { World.sharedWorld.describe(description, flags: flags, closure: closure) } /** Defines an example group. Equivalent to `describe`. */ public func context(description: String, flags: FilterFlags = [:], closure: () -> ()) { World.sharedWorld.context(description, flags: flags, closure: closure) } /** Defines a closure to be run prior to each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of beforeEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. - parameter closure: The closure to be run prior to each example. */ public func beforeEach(closure: BeforeExampleClosure) { World.sharedWorld.beforeEach(closure) } /** Identical to Quick.DSL.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. */ public func beforeEach(closure: BeforeExampleWithMetadataClosure) { World.sharedWorld.beforeEach(closure: closure) } /** Defines a closure to be run after each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of afterEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. - parameter closure: The closure to be run after each example. */ public func afterEach(closure: AfterExampleClosure) { World.sharedWorld.afterEach(closure) } /** Identical to Quick.DSL.afterEach, except the closure is provided with metadata on the example that the closure is being run after. */ public func afterEach(closure: AfterExampleWithMetadataClosure) { World.sharedWorld.afterEach(closure: closure) } /** Defines an example. Examples use assertions to demonstrate how code should behave. These are like "tests" in XCTest. - parameter description: An arbitrary string describing what the example is meant to specify. - parameter closure: A closure that can contain assertions. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. Empty by default. - parameter file: The absolute path to the file containing the example. A sensible default is provided. - parameter line: The line containing the example. A sensible default is provided. */ public func it(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { World.sharedWorld.it(description, flags: flags, file: file, line: line, closure: closure) } /** Inserts the examples defined using a `sharedExamples` function into the current example group. The shared examples are executed at this location, as if they were written out manually. - parameter name: The name of the shared examples group to be executed. This must be identical to the name of a shared examples group defined using `sharedExamples`. If there are no shared examples that match the name given, an exception is thrown and the test suite will crash. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. Empty by default. - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line) { itBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] }) } /** Inserts the examples defined using a `sharedExamples` function into the current example group. The shared examples are executed at this location, as if they were written out manually. This function also passes those shared examples a context that can be evaluated to give the shared examples extra information on the subject of the example. - parameter name: The name of the shared examples group to be executed. This must be identical to the name of a shared examples group defined using `sharedExamples`. If there are no shared examples that match the name given, an exception is thrown and the test suite will crash. - parameter sharedExampleContext: A closure that, when evaluated, returns key-value pairs that provide the shared examples with extra information on the subject of the example. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. Empty by default. - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, sharedExampleContext: SharedExampleContext) { World.sharedWorld.itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } /** Defines an example or example group that should not be executed. Use `pending` to temporarily disable examples or groups that should not be run yet. - parameter description: An arbitrary string describing the example or example group. - parameter closure: A closure that will not be evaluated. */ public func pending(description: String, closure: () -> ()) { World.sharedWorld.pending(description, closure: closure) } /** Use this to quickly mark a `describe` closure as pending. This disables all examples within the closure. */ public func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { World.sharedWorld.xdescribe(description, flags: flags, closure: closure) } /** Use this to quickly mark a `context` closure as pending. This disables all examples within the closure. */ public func xcontext(description: String, flags: FilterFlags, closure: () -> ()) { xdescribe(description, flags: flags, closure: closure) } /** Use this to quickly mark an `it` closure as pending. This disables the example and ensures the code within the closure is never run. */ public func xit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { World.sharedWorld.xit(description, flags: flags, file: file, line: line, closure: closure) } /** Use this to quickly focus a `describe` closure, focusing the examples in the closure. If any examples in the test suite are focused, only those examples are executed. This trumps any explicitly focused or unfocused examples within the closure--they are all treated as focused. */ public func fdescribe(description: String, flags: FilterFlags = [:], closure: () -> ()) { World.sharedWorld.fdescribe(description, flags: flags, closure: closure) } /** Use this to quickly focus a `context` closure. Equivalent to `fdescribe`. */ public func fcontext(description: String, flags: FilterFlags = [:], closure: () -> ()) { fdescribe(description, flags: flags, closure: closure) } /** Use this to quickly focus an `it` closure, focusing the example. If any examples in the test suite are focused, only those examples are executed. */ public func fit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { World.sharedWorld.fit(description, flags: flags, file: file, line: line, closure: closure) } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.h ================================================ #import @class ExampleMetadata; /** Provides a hook for Quick to be configured before any examples are run. Within this scope, override the +[QuickConfiguration configure:] method to set properties on a configuration object to customize Quick behavior. For details, see the documentation for Configuraiton.swift. @param name The name of the configuration class. Like any Objective-C class name, this must be unique to the current runtime environment. */ #define QuickConfigurationBegin(name) \ @interface name : QuickConfiguration; @end \ @implementation name \ /** Marks the end of a Quick configuration. Make sure you put this after `QuickConfigurationBegin`. */ #define QuickConfigurationEnd \ @end \ /** Defines a new QuickSpec. Define examples and example groups within the space between this and `QuickSpecEnd`. @param name The name of the spec class. Like any Objective-C class name, this must be unique to the current runtime environment. */ #define QuickSpecBegin(name) \ @interface name : QuickSpec; @end \ @implementation name \ - (void)spec { \ /** Marks the end of a QuickSpec. Make sure you put this after `QuickSpecBegin`. */ #define QuickSpecEnd \ } \ @end \ typedef NSDictionary *(^QCKDSLSharedExampleContext)(void); typedef void (^QCKDSLSharedExampleBlock)(QCKDSLSharedExampleContext); typedef void (^QCKDSLEmptyBlock)(void); typedef void (^QCKDSLExampleMetadataBlock)(ExampleMetadata *exampleMetadata); #define QUICK_EXPORT FOUNDATION_EXPORT QUICK_EXPORT void qck_beforeSuite(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_afterSuite(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure); QUICK_EXPORT void qck_describe(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_context(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_beforeEach(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure); QUICK_EXPORT void qck_afterEach(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure); QUICK_EXPORT void qck_pending(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure); #ifndef QUICK_DISABLE_SHORT_SYNTAX /** Defines a closure to be run prior to any examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before the first example is run, this closure will not be executed. @param closure The closure to be run prior to any examples in the test suite. */ static inline void beforeSuite(QCKDSLEmptyBlock closure) { qck_beforeSuite(closure); } /** Defines a closure to be run after all of the examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before all examples are run, this closure will not be executed. @param closure The closure to be run after all of the examples in the test suite. */ static inline void afterSuite(QCKDSLEmptyBlock closure) { qck_afterSuite(closure); } /** Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. @param name The name of the shared example group. This must be unique across all shared example groups defined in a test suite. @param closure A closure containing the examples. This behaves just like an example group defined using `describe` or `context`--the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). */ static inline void sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) { qck_sharedExamples(name, closure); } /** Defines an example group. Example groups are logical groupings of examples. Example groups can share setup and teardown code. @param description An arbitrary string describing the example group. @param closure A closure that can contain other examples. */ static inline void describe(NSString *description, QCKDSLEmptyBlock closure) { qck_describe(description, closure); } /** Defines an example group. Equivalent to `describe`. */ static inline void context(NSString *description, QCKDSLEmptyBlock closure) { qck_context(description, closure); } /** Defines a closure to be run prior to each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of beforeEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. @param closure The closure to be run prior to each example. */ static inline void beforeEach(QCKDSLEmptyBlock closure) { qck_beforeEach(closure); } /** Identical to QCKDSL.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. */ static inline void beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) { qck_beforeEachWithMetadata(closure); } /** Defines a closure to be run after each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of afterEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. @param closure The closure to be run after each example. */ static inline void afterEach(QCKDSLEmptyBlock closure) { qck_afterEach(closure); } /** Identical to QCKDSL.afterEach, except the closure is provided with metadata on the example that the closure is being run after. */ static inline void afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) { qck_afterEachWithMetadata(closure); } /** Defines an example or example group that should not be executed. Use `pending` to temporarily disable examples or groups that should not be run yet. @param description An arbitrary string describing the example or example group. @param closure A closure that will not be evaluated. */ static inline void pending(NSString *description, QCKDSLEmptyBlock closure) { qck_pending(description, closure); } /** Use this to quickly mark a `describe` block as pending. This disables all examples within the block. */ static inline void xdescribe(NSString *description, QCKDSLEmptyBlock closure) { qck_xdescribe(description, closure); } /** Use this to quickly mark a `context` block as pending. This disables all examples within the block. */ static inline void xcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_xcontext(description, closure); } /** Use this to quickly focus a `describe` block, focusing the examples in the block. If any examples in the test suite are focused, only those examples are executed. This trumps any explicitly focused or unfocused examples within the block--they are all treated as focused. */ static inline void fdescribe(NSString *description, QCKDSLEmptyBlock closure) { qck_fdescribe(description, closure); } /** Use this to quickly focus a `context` block. Equivalent to `fdescribe`. */ static inline void fcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_fcontext(description, closure); } #define it qck_it #define xit qck_xit #define fit qck_fit #define itBehavesLike qck_itBehavesLike #define xitBehavesLike qck_xitBehavesLike #define fitBehavesLike qck_fitBehavesLike #endif #define qck_it qck_it_builder(@{}, @(__FILE__), __LINE__) #define qck_xit qck_it_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__) #define qck_fit qck_it_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__) #define qck_itBehavesLike qck_itBehavesLike_builder(@{}, @(__FILE__), __LINE__) #define qck_xitBehavesLike qck_itBehavesLike_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__) #define qck_fitBehavesLike qck_itBehavesLike_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__) typedef void (^QCKItBlock)(NSString *description, QCKDSLEmptyBlock closure); typedef void (^QCKItBehavesLikeBlock)(NSString *description, QCKDSLSharedExampleContext context); QUICK_EXPORT QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line); QUICK_EXPORT QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line); ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.m ================================================ #import "QCKDSL.h" #import "World.h" #import "World+DSL.h" void qck_beforeSuite(QCKDSLEmptyBlock closure) { [[World sharedWorld] beforeSuite:closure]; } void qck_afterSuite(QCKDSLEmptyBlock closure) { [[World sharedWorld] afterSuite:closure]; } void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) { [[World sharedWorld] sharedExamples:name closure:closure]; } void qck_describe(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] describe:description flags:@{} closure:closure]; } void qck_context(NSString *description, QCKDSLEmptyBlock closure) { qck_describe(description, closure); } void qck_beforeEach(QCKDSLEmptyBlock closure) { [[World sharedWorld] beforeEach:closure]; } void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) { [[World sharedWorld] beforeEachWithMetadata:closure]; } void qck_afterEach(QCKDSLEmptyBlock closure) { [[World sharedWorld] afterEach:closure]; } void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) { [[World sharedWorld] afterEachWithMetadata:closure]; } QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line) { return ^(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] itWithDescription:description flags:flags file:file line:line closure:closure]; }; } QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line) { return ^(NSString *name, QCKDSLSharedExampleContext context) { [[World sharedWorld] itBehavesLikeSharedExampleNamed:name sharedExampleContext:context flags:flags file:file line:line]; }; } void qck_pending(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] pending:description closure:closure]; } void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] xdescribe:description flags:@{} closure:closure]; } void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_xdescribe(description, closure); } void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] fdescribe:description flags:@{} closure:closure]; } void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_fdescribe(description, closure); } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.h ================================================ #import @interface World (SWIFT_EXTENSION(Quick)) - (void)beforeSuite:(void (^ __nonnull)(void))closure; - (void)afterSuite:(void (^ __nonnull)(void))closure; - (void)sharedExamples:(NSString * __nonnull)name closure:(void (^ __nonnull)(NSDictionary * __nonnull (^ __nonnull)(void)))closure; - (void)describe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)context:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)fdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)xdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)beforeEach:(void (^ __nonnull)(void))closure; - (void)beforeEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; - (void)afterEach:(void (^ __nonnull)(void))closure; - (void)afterEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; - (void)itWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; - (void)fitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; - (void)xitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; - (void)itBehavesLikeSharedExampleNamed:(NSString * __nonnull)name sharedExampleContext:(NSDictionary * __nonnull (^ __nonnull)(void))sharedExampleContext flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line; - (void)pending:(NSString * __nonnull)description closure:(void (^ __nonnull)(void))closure; @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.swift ================================================ import Foundation /** Adds methods to World to support top-level DSL functions (Swift) and macros (Objective-C). These functions map directly to the DSL that test writers use in their specs. */ extension World { internal func beforeSuite(closure: BeforeSuiteClosure) { suiteHooks.appendBefore(closure) } internal func afterSuite(closure: AfterSuiteClosure) { suiteHooks.appendAfter(closure) } internal func sharedExamples(name: String, closure: SharedExampleClosure) { registerSharedExample(name, closure: closure) } internal func describe(description: String, flags: FilterFlags, closure: () -> ()) { guard currentExampleMetadata == nil else { raiseError("'describe' cannot be used inside '\(currentPhase)', 'describe' may only be used inside 'context' or 'describe'. ") } guard currentExampleGroup != nil else { raiseError("Error: example group was not created by its parent QuickSpec spec. Check that describe() or context() was used in QuickSpec.spec() and not a more general context (i.e. an XCTestCase test)") } let group = ExampleGroup(description: description, flags: flags) currentExampleGroup.appendExampleGroup(group) performWithCurrentExampleGroup(group, closure: closure) } internal func context(description: String, flags: FilterFlags, closure: () -> ()) { guard currentExampleMetadata == nil else { raiseError("'context' cannot be used inside '\(currentPhase)', 'context' may only be used inside 'context' or 'describe'. ") } self.describe(description, flags: flags, closure: closure) } internal func fdescribe(description: String, flags: FilterFlags, closure: () -> ()) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.describe(description, flags: focusedFlags, closure: closure) } internal func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { var pendingFlags = flags pendingFlags[Filter.pending] = true self.describe(description, flags: pendingFlags, closure: closure) } internal func beforeEach(closure: BeforeExampleClosure) { guard currentExampleMetadata == nil else { raiseError("'beforeEach' cannot be used inside '\(currentPhase)', 'beforeEach' may only be used inside 'context' or 'describe'. ") } currentExampleGroup.hooks.appendBefore(closure) } #if _runtime(_ObjC) @objc(beforeEachWithMetadata:) internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { currentExampleGroup.hooks.appendBefore(closure) } #else internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { currentExampleGroup.hooks.appendBefore(closure) } #endif internal func afterEach(closure: AfterExampleClosure) { guard currentExampleMetadata == nil else { raiseError("'afterEach' cannot be used inside '\(currentPhase)', 'afterEach' may only be used inside 'context' or 'describe'. ") } currentExampleGroup.hooks.appendAfter(closure) } #if _runtime(_ObjC) @objc(afterEachWithMetadata:) internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { currentExampleGroup.hooks.appendAfter(closure) } #else internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { currentExampleGroup.hooks.appendAfter(closure) } #endif internal func it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { if beforesCurrentlyExecuting { raiseError("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ") } if aftersCurrentlyExecuting { raiseError("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ") } guard currentExampleMetadata == nil else { raiseError("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ") } let callsite = Callsite(file: file, line: line) let example = Example(description: description, callsite: callsite, flags: flags, closure: closure) currentExampleGroup.appendExample(example) } internal func fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.it(description, flags: focusedFlags, file: file, line: line, closure: closure) } internal func xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { var pendingFlags = flags pendingFlags[Filter.pending] = true self.it(description, flags: pendingFlags, file: file, line: line, closure: closure) } internal func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { guard currentExampleMetadata == nil else { raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'. ") } let callsite = Callsite(file: file, line: line) let closure = World.sharedWorld.sharedExample(name) let group = ExampleGroup(description: name, flags: flags) currentExampleGroup.appendExampleGroup(group) performWithCurrentExampleGroup(group) { closure(sharedExampleContext) } group.walkDownExamples { (example: Example) in example.isSharedExample = true example.callsite = callsite } } #if _runtime(_ObjC) @objc(itWithDescription:flags:file:line:closure:) private func objc_it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { it(description, flags: flags, file: file, line: line, closure: closure) } @objc(fitWithDescription:flags:file:line:closure:) private func objc_fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { fit(description, flags: flags, file: file, line: line, closure: closure) } @objc(xitWithDescription:flags:file:line:closure:) private func objc_xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { xit(description, flags: flags, file: file, line: line, closure: closure) } @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:) private func objc_itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } #endif internal func pending(description: String, closure: () -> ()) { print("Pending: \(description)") } private var currentPhase: String { if beforesCurrentlyExecuting { return "beforeEach" } else if aftersCurrentlyExecuting { return "afterEach" } return "it" } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/ErrorUtility.swift ================================================ import Foundation @noreturn internal func raiseError(message: String) { #if _runtime(_ObjC) NSException(name: NSInternalInconsistencyException, reason: message, userInfo: nil).raise() #endif // This won't be reached when ObjC is available and the exception above is raisd fatalError(message) } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Example.swift ================================================ import Foundation private var numberOfExamplesRun = 0 /** Examples, defined with the `it` function, use assertions to demonstrate how code should behave. These are like "tests" in XCTest. */ final public class Example: NSObject { /** A boolean indicating whether the example is a shared example; i.e.: whether it is an example defined with `itBehavesLike`. */ public var isSharedExample = false /** The site at which the example is defined. This must be set correctly in order for Xcode to highlight the correct line in red when reporting a failure. */ public var callsite: Callsite weak internal var group: ExampleGroup? private let internalDescription: String private let closure: () -> () private let flags: FilterFlags internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: () -> ()) { self.internalDescription = description self.closure = closure self.callsite = callsite self.flags = flags } public override var description: String { return internalDescription } /** The example name. A name is a concatenation of the name of the example group the example belongs to, followed by the description of the example itself. The example name is used to generate a test method selector to be displayed in Xcode's test navigator. */ public var name: String { switch group!.name { case .Some(let groupName): return "\(groupName), \(description)" case .None: return description } } /** Executes the example closure, as well as all before and after closures defined in the its surrounding example groups. */ public func run() { let world = World.sharedWorld if numberOfExamplesRun == 0 { world.suiteHooks.executeBefores() } let exampleMetadata = ExampleMetadata(example: self, exampleIndex: numberOfExamplesRun) world.currentExampleMetadata = exampleMetadata world.exampleHooks.executeBefores(exampleMetadata) group!.phase = .BeforesExecuting for before in group!.befores { before(exampleMetadata: exampleMetadata) } group!.phase = .BeforesFinished closure() group!.phase = .AftersExecuting for after in group!.afters { after(exampleMetadata: exampleMetadata) } group!.phase = .AftersFinished world.exampleHooks.executeAfters(exampleMetadata) numberOfExamplesRun += 1 if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.includedExampleCount { world.suiteHooks.executeAfters() } } /** Evaluates the filter flags set on this example and on the example groups this example belongs to. Flags set on the example are trumped by flags on the example group it belongs to. Flags on inner example groups are trumped by flags on outer example groups. */ internal var filterFlags: FilterFlags { var aggregateFlags = flags for (key, value) in group!.filterFlags { aggregateFlags[key] = value } return aggregateFlags } } /** Returns a boolean indicating whether two Example objects are equal. If two examples are defined at the exact same callsite, they must be equal. */ public func ==(lhs: Example, rhs: Example) -> Bool { return lhs.callsite == rhs.callsite } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/ExampleGroup.swift ================================================ import Foundation /** Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share setup and teardown code. */ final public class ExampleGroup: NSObject { weak internal var parent: ExampleGroup? internal let hooks = ExampleHooks() internal var phase: HooksPhase = .NothingExecuted private let internalDescription: String private let flags: FilterFlags private let isInternalRootExampleGroup: Bool private var childGroups = [ExampleGroup]() private var childExamples = [Example]() internal init(description: String, flags: FilterFlags, isInternalRootExampleGroup: Bool = false) { self.internalDescription = description self.flags = flags self.isInternalRootExampleGroup = isInternalRootExampleGroup } public override var description: String { return internalDescription } /** Returns a list of examples that belong to this example group, or to any of its descendant example groups. */ public var examples: [Example] { var examples = childExamples for group in childGroups { examples.appendContentsOf(group.examples) } return examples } internal var name: String? { if let parent = parent { switch(parent.name) { case .Some(let name): return "\(name), \(description)" case .None: return description } } else { return isInternalRootExampleGroup ? nil : description } } internal var filterFlags: FilterFlags { var aggregateFlags = flags walkUp() { (group: ExampleGroup) -> () in for (key, value) in group.flags { aggregateFlags[key] = value } } return aggregateFlags } internal var befores: [BeforeExampleWithMetadataClosure] { var closures = Array(hooks.befores.reverse()) walkUp() { (group: ExampleGroup) -> () in closures.appendContentsOf(Array(group.hooks.befores.reverse())) } return Array(closures.reverse()) } internal var afters: [AfterExampleWithMetadataClosure] { var closures = hooks.afters walkUp() { (group: ExampleGroup) -> () in closures.appendContentsOf(group.hooks.afters) } return closures } internal func walkDownExamples(callback: (example: Example) -> ()) { for example in childExamples { callback(example: example) } for group in childGroups { group.walkDownExamples(callback) } } internal func appendExampleGroup(group: ExampleGroup) { group.parent = self childGroups.append(group) } internal func appendExample(example: Example) { example.group = self childExamples.append(example) } private func walkUp(callback: (group: ExampleGroup) -> ()) { var group = self while let parent = group.parent { callback(group: parent) group = parent } } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/ExampleMetadata.swift ================================================ import Foundation /** A class that encapsulates information about an example, including the index at which the example was executed, as well as the example itself. */ final public class ExampleMetadata: NSObject { /** The example for which this metadata was collected. */ public let example: Example /** The index at which this example was executed in the test suite. */ public let exampleIndex: Int internal init(example: Example, exampleIndex: Int) { self.example = example self.exampleIndex = exampleIndex } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Filter.swift ================================================ import Foundation /** A mapping of string keys to booleans that can be used to filter examples or example groups. For example, a "focused" example would have the flags [Focused: true]. */ public typealias FilterFlags = [String: Bool] /** A namespace for filter flag keys, defined primarily to make the keys available in Objective-C. */ final public class Filter: NSObject { /** Example and example groups with [Focused: true] are included in test runs, excluding all other examples without this flag. Use this to only run one or two tests that you're currently focusing on. */ public class var focused: String { return "focused" } /** Example and example groups with [Pending: true] are excluded from test runs. Use this to temporarily suspend examples that you know do not pass yet. */ public class var pending: String { return "pending" } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Hooks/Closures.swift ================================================ // MARK: Example Hooks /** A closure executed before an example is run. */ public typealias BeforeExampleClosure = () -> () /** A closure executed before an example is run. The closure is given example metadata, which contains information about the example that is about to be run. */ public typealias BeforeExampleWithMetadataClosure = (exampleMetadata: ExampleMetadata) -> () /** A closure executed after an example is run. */ public typealias AfterExampleClosure = BeforeExampleClosure /** A closure executed after an example is run. The closure is given example metadata, which contains information about the example that has just finished running. */ public typealias AfterExampleWithMetadataClosure = BeforeExampleWithMetadataClosure // MARK: Suite Hooks /** A closure executed before any examples are run. */ public typealias BeforeSuiteClosure = () -> () /** A closure executed after all examples have finished running. */ public typealias AfterSuiteClosure = BeforeSuiteClosure ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Hooks/ExampleHooks.swift ================================================ /** A container for closures to be executed before and after each example. */ final internal class ExampleHooks { internal var befores: [BeforeExampleWithMetadataClosure] = [] internal var afters: [AfterExampleWithMetadataClosure] = [] internal var phase: HooksPhase = .NothingExecuted internal func appendBefore(closure: BeforeExampleWithMetadataClosure) { befores.append(closure) } internal func appendBefore(closure: BeforeExampleClosure) { befores.append { (exampleMetadata: ExampleMetadata) in closure() } } internal func appendAfter(closure: AfterExampleWithMetadataClosure) { afters.append(closure) } internal func appendAfter(closure: AfterExampleClosure) { afters.append { (exampleMetadata: ExampleMetadata) in closure() } } internal func executeBefores(exampleMetadata: ExampleMetadata) { phase = .BeforesExecuting for before in befores { before(exampleMetadata: exampleMetadata) } phase = .BeforesFinished } internal func executeAfters(exampleMetadata: ExampleMetadata) { phase = .AftersExecuting for after in afters { after(exampleMetadata: exampleMetadata) } phase = .AftersFinished } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Hooks/HooksPhase.swift ================================================ /** A description of the execution cycle of the current example with respect to the hooks of that example. */ internal enum HooksPhase: Int { case NothingExecuted = 0 case BeforesExecuting case BeforesFinished case AftersExecuting case AftersFinished } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Hooks/SuiteHooks.swift ================================================ /** A container for closures to be executed before and after all examples. */ final internal class SuiteHooks { internal var befores: [BeforeSuiteClosure] = [] internal var afters: [AfterSuiteClosure] = [] internal var phase: HooksPhase = .NothingExecuted internal func appendBefore(closure: BeforeSuiteClosure) { befores.append(closure) } internal func appendAfter(closure: AfterSuiteClosure) { afters.append(closure) } internal func executeBefores() { phase = .BeforesExecuting for before in befores { before() } phase = .BeforesFinished } internal func executeAfters() { phase = .AftersExecuting for after in afters { after() } phase = .AftersFinished } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSHumanReadableCopyright Copyright © 2014 - present, Quick Team. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift ================================================ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Foundation extension NSBundle { /** Locates the first bundle with a '.xctest' file extension. */ internal static var currentTestBundle: NSBundle? { return allBundles().lazy .filter { $0.bundlePath.hasSuffix(".xctest") } .first } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.h ================================================ #import /** QuickSpec converts example names into test methods. Those test methods need valid selector names, which means no whitespace, control characters, etc. This category gives NSString objects an easy way to replace those illegal characters with underscores. */ @interface NSString (QCKSelectorName) /** Returns a string with underscores in place of all characters that cannot be included in a selector (SEL) name. */ @property (nonatomic, readonly) NSString *qck_selectorName; @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.m ================================================ #import "NSString+QCKSelectorName.h" @implementation NSString (QCKSelectorName) - (NSString *)qck_selectorName { static NSMutableCharacterSet *invalidCharacters = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ invalidCharacters = [NSMutableCharacterSet new]; NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet]; NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet]; NSCharacterSet *illegalCharacterSet = [NSCharacterSet illegalCharacterSet]; NSCharacterSet *controlCharacterSet = [NSCharacterSet controlCharacterSet]; NSCharacterSet *punctuationCharacterSet = [NSCharacterSet punctuationCharacterSet]; NSCharacterSet *nonBaseCharacterSet = [NSCharacterSet nonBaseCharacterSet]; NSCharacterSet *symbolCharacterSet = [NSCharacterSet symbolCharacterSet]; [invalidCharacters formUnionWithCharacterSet:whitespaceCharacterSet]; [invalidCharacters formUnionWithCharacterSet:newlineCharacterSet]; [invalidCharacters formUnionWithCharacterSet:illegalCharacterSet]; [invalidCharacters formUnionWithCharacterSet:controlCharacterSet]; [invalidCharacters formUnionWithCharacterSet:punctuationCharacterSet]; [invalidCharacters formUnionWithCharacterSet:nonBaseCharacterSet]; [invalidCharacters formUnionWithCharacterSet:symbolCharacterSet]; }); NSArray *validComponents = [self componentsSeparatedByCharactersInSet:invalidCharacters]; NSString *result = [validComponents componentsJoinedByString:@"_"]; return ([result length] == 0 ? @"_" : result); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/Quick.h ================================================ #import //! Project version number for Quick. FOUNDATION_EXPORT double QuickVersionNumber; //! Project version string for Quick. FOUNDATION_EXPORT const unsigned char QuickVersionString[]; #import "QuickSpec.h" #import "QCKDSL.h" #import "QuickConfiguration.h" ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/QuickMain.swift ================================================ import XCTest // NOTE: This file is not intended to be included in the Xcode project or CocoaPods. // It is picked up by the Swift Package Manager during its build process. /// When using Quick with swift-corelibs-xctest, automatic discovery of specs and /// configurations is not available. Instead, you should create a standalone /// executable and call this function from its main.swift file. This will execute /// the specs and then terminate the process with an exit code of 0 if the tests /// passed, or 1 if there were any failures. /// /// Quick is known to work with the DEVELOPMENT-SNAPSHOT-2016-02-08-a Swift toolchain. @noreturn public func QCKMain(specs: [XCTestCase], configurations: [QuickConfiguration.Type] = []) { // Perform all configuration (ensures that shared examples have been discovered) World.sharedWorld.configure { configuration in for configurationClass in configurations { configurationClass.configure(configuration) } } World.sharedWorld.finalizeConfiguration() // Gather all examples (ensures suite hooks have been discovered) for case let spec as QuickSpec in specs { spec.gatherExamplesIfNeeded() } XCTMain(specs) } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift ================================================ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) /** Responsible for building a "Selected tests" suite. This corresponds to a single spec, and all its examples. */ internal class QuickSelectedTestSuiteBuilder: QuickTestSuiteBuilder { /** The test spec class to run. */ let testCaseClass: AnyClass! /** For Objective-C classes, returns the class name. For Swift classes without, an explicit Objective-C name, returns a module-namespaced class name (e.g., "FooTests.FooSpec"). */ var testSuiteClassName: String { return NSStringFromClass(testCaseClass) } /** Given a test case name: FooSpec/testFoo Optionally constructs a test suite builder for the named test case class in the running test bundle. If no test bundle can be found, or the test case class can't be found, initialization fails and returns `nil`. */ init?(forTestCaseWithName name: String) { guard let testCaseClass = testCaseClassForTestCaseWithName(name) else { self.testCaseClass = nil return nil } self.testCaseClass = testCaseClass } /** Returns a `QuickTestSuite` that runs the associated test case class. */ func buildTestSuite() -> QuickTestSuite { return QuickTestSuite(forTestCaseClass: testCaseClass) } } /** Searches `NSBundle.allBundles()` for an xctest bundle, then looks up the named test case class in that bundle. Returns `nil` if a bundle or test case class cannot be found. */ private func testCaseClassForTestCaseWithName(name: String) -> AnyClass? { func extractClassName(name: String) -> String? { return name.characters.split("/").first.map(String.init) } guard let className = extractClassName(name) else { return nil } guard let bundle = NSBundle.currentTestBundle else { return nil } if let testCaseClass = bundle.classNamed(className) { return testCaseClass } guard let moduleName = bundle.bundlePath.fileName else { return nil } return NSClassFromString("\(moduleName).\(className)") } #endif ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.h ================================================ #import /** QuickSpec is a base class all specs written in Quick inherit from. They need to inherit from QuickSpec, a subclass of XCTestCase, in order to be discovered by the XCTest framework. XCTest automatically compiles a list of XCTestCase subclasses included in the test target. It iterates over each class in that list, and creates a new instance of that class for each test method. It then creates an "invocation" to execute that test method. The invocation is an instance of NSInvocation, which represents a single message send in Objective-C. The invocation is set on the XCTestCase instance, and the test is run. Most of the code in QuickSpec is dedicated to hooking into XCTest events. First, when the spec is first loaded and before it is sent any messages, the +[NSObject initialize] method is called. QuickSpec overrides this method to call +[QuickSpec spec]. This builds the example group stacks and registers them with Quick.World, a global register of examples. Then, XCTest queries QuickSpec for a list of test methods. Normally, XCTest automatically finds all methods whose selectors begin with the string "test". However, QuickSpec overrides this default behavior by implementing the +[XCTestCase testInvocations] method. This method iterates over each example registered in Quick.World, defines a new method for that example, and returns an invocation to call that method to XCTest. Those invocations are the tests that are run by XCTest. Their selector names are displayed in the Xcode test navigation bar. */ @interface QuickSpec : XCTestCase /** Override this method in your spec to define a set of example groups and examples. @code override func spec() { describe("winter") { it("is coming") { // ... } } } @endcode See DSL.swift for more information on what syntax is available. */ - (void)spec; @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.m ================================================ #import "QuickSpec.h" #import "QuickConfiguration.h" #import "NSString+QCKSelectorName.h" #import "World.h" #import static QuickSpec *currentSpec = nil; const void * const QCKExampleKey = &QCKExampleKey; @interface QuickSpec () @property (nonatomic, strong) Example *example; @end @implementation QuickSpec #pragma mark - XCTestCase Overrides /** The runtime sends initialize to each class in a program just before the class, or any class that inherits from it, is sent its first message from within the program. QuickSpec hooks into this event to compile the example groups for this spec subclass. If an exception occurs when compiling the examples, report it to the user. Chances are they included an expectation outside of a "it", "describe", or "context" block. */ + (void)initialize { [QuickConfiguration initialize]; World *world = [World sharedWorld]; [world performWithCurrentExampleGroup:[world rootExampleGroupForSpecClass:self] closure:^{ QuickSpec *spec = [self new]; @try { [spec spec]; } @catch (NSException *exception) { [NSException raise:NSInternalInconsistencyException format:@"An exception occurred when building Quick's example groups.\n" @"Some possible reasons this might happen include:\n\n" @"- An 'expect(...).to' expectation was evaluated outside of " @"an 'it', 'context', or 'describe' block\n" @"- 'sharedExamples' was called twice with the same name\n" @"- 'itBehavesLike' was called with a name that is not registered as a shared example\n\n" @"Here's the original exception: '%@', reason: '%@', userInfo: '%@'", exception.name, exception.reason, exception.userInfo]; } [self testInvocations]; }]; } /** Invocations for each test method in the test case. QuickSpec overrides this method to define a new method for each example defined in +[QuickSpec spec]. @return An array of invocations that execute the newly defined example methods. */ + (NSArray *)testInvocations { NSArray *examples = [[World sharedWorld] examplesForSpecClass:[self class]]; NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:[examples count]]; NSMutableSet *selectorNames = [NSMutableSet set]; for (Example *example in examples) { SEL selector = [self addInstanceMethodForExample:example classSelectorNames:selectorNames]; NSInvocation *invocation = [self invocationForInstanceMethodWithSelector:selector example:example]; [invocations addObject:invocation]; } return invocations; } /** XCTest sets the invocation for the current test case instance using this setter. QuickSpec hooks into this event to give the test case a reference to the current example. It will need this reference to correctly report its name to XCTest. */ - (void)setInvocation:(NSInvocation *)invocation { self.example = objc_getAssociatedObject(invocation, QCKExampleKey); [super setInvocation:invocation]; } #pragma mark - Public Interface - (void)spec { } #pragma mark - Internal Methods /** QuickSpec uses this method to dynamically define a new instance method for the given example. The instance method runs the example, catching any exceptions. The exceptions are then reported as test failures. In order to report the correct file and line number, examples must raise exceptions containing following keys in their userInfo: - "SenTestFilenameKey": A String representing the file name - "SenTestLineNumberKey": An Int representing the line number These keys used to be used by SenTestingKit, and are still used by some testing tools in the wild. See: https://github.com/Quick/Quick/pull/41 @return The selector of the newly defined instance method. */ + (SEL)addInstanceMethodForExample:(Example *)example classSelectorNames:(NSMutableSet *)selectorNames { IMP implementation = imp_implementationWithBlock(^(QuickSpec *self){ currentSpec = self; [example run]; }); NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet]; NSMutableString *sanitizedFileName = [NSMutableString string]; for (NSUInteger i = 0; i < example.callsite.file.length; i++) { unichar ch = [example.callsite.file characterAtIndex:i]; if ([characterSet characterIsMember:ch]) { [sanitizedFileName appendFormat:@"%c", ch]; } } const char *types = [[NSString stringWithFormat:@"%s%s%s", @encode(id), @encode(id), @encode(SEL)] UTF8String]; NSString *originalName = example.name.qck_selectorName; NSString *selectorName = originalName; NSUInteger i = 2; while ([selectorNames containsObject:selectorName]) { selectorName = [NSString stringWithFormat:@"%@_%tu", originalName, i++]; } [selectorNames addObject:selectorName]; SEL selector = NSSelectorFromString(selectorName); class_addMethod(self, selector, implementation, types); return selector; } + (NSInvocation *)invocationForInstanceMethodWithSelector:(SEL)selector example:(Example *)example { NSMethodSignature *signature = [self instanceMethodSignatureForSelector:selector]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; invocation.selector = selector; objc_setAssociatedObject(invocation, QCKExampleKey, example, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return invocation; } /** This method is used to record failures, whether they represent example expectations that were not met, or exceptions raised during test setup and teardown. By default, the failure will be reported as an XCTest failure, and the example will be highlighted in Xcode. */ - (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filePath atLine:(NSUInteger)lineNumber expected:(BOOL)expected { if (self.example.isSharedExample) { filePath = self.example.callsite.file; lineNumber = self.example.callsite.line; } [currentSpec.testRun recordFailureWithDescription:description inFile:filePath atLine:lineNumber expected:expected]; } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.swift ================================================ import XCTest // NOTE: This file is not intended to be included in the Xcode project or CocoaPods. // It is picked up by the Swift Package Manager during its build process. public class QuickSpec: XCTestCase, XCTestCaseProvider { public func spec() {} public required init() {} public var allTests : [(String, () throws -> Void)] { gatherExamplesIfNeeded() let examples = World.sharedWorld.examples(self.dynamicType) return examples.map({ example -> (String, () -> Void) in return (example.name, { example.run() }) }) } internal func gatherExamplesIfNeeded() { let world = World.sharedWorld let rootExampleGroup = world.rootExampleGroupForSpecClass(self.dynamicType) if rootExampleGroup.examples.isEmpty { world.currentExampleGroup = rootExampleGroup spec() world.currentExampleGroup = nil } } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/QuickTestSuite.swift ================================================ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import XCTest /** This protocol defines the role of an object that builds test suites. */ internal protocol QuickTestSuiteBuilder { /** Construct a `QuickTestSuite` instance with the appropriate test cases added as tests. Subsequent calls to this method should return equivalent test suites. */ func buildTestSuite() -> QuickTestSuite } /** A base class for a class cluster of Quick test suites, that should correctly build dynamic test suites for XCTest to execute. */ public class QuickTestSuite: XCTestSuite { private static var builtTestSuites: Set = Set() /** Construct a test suite for a specific, selected subset of test cases (rather than the default, which as all test cases). If this method is called multiple times for the same test case class, e.g.. FooSpec/testFoo FooSpec/testBar It is expected that the first call should return a valid test suite, and all subsequent calls should return `nil`. */ public static func selectedTestSuite(forTestCaseWithName name: String) -> QuickTestSuite? { guard let builder = QuickSelectedTestSuiteBuilder(forTestCaseWithName: name) else { return nil } if builtTestSuites.contains(builder.testSuiteClassName) { return nil } else { builtTestSuites.insert(builder.testSuiteClassName) return builder.buildTestSuite() } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/String+FileName.swift ================================================ import Foundation extension String { /** If the receiver represents a path, returns its file name with a file extension. */ var fileName: String? { return NSURL(string: self)?.URLByDeletingPathExtension?.lastPathComponent } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/World.h ================================================ #import @class ExampleGroup; @class ExampleMetadata; SWIFT_CLASS("_TtC5Quick5World") @interface World @property (nonatomic) ExampleGroup * __nullable currentExampleGroup; @property (nonatomic) ExampleMetadata * __nullable currentExampleMetadata; @property (nonatomic) BOOL isRunningAdditionalSuites; + (World * __nonnull)sharedWorld; - (void)configure:(void (^ __nonnull)(Configuration * __nonnull))closure; - (void)finalizeConfiguration; - (ExampleGroup * __nonnull)rootExampleGroupForSpecClass:(Class __nonnull)cls; - (NSArray * __nonnull)examplesForSpecClass:(Class __nonnull)specClass; - (void)performWithCurrentExampleGroup:(ExampleGroup * __nonnull)group closure:(void (^ __nonnull)(void))closure; @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/World.swift ================================================ import Foundation /** A closure that, when evaluated, returns a dictionary of key-value pairs that can be accessed from within a group of shared examples. */ public typealias SharedExampleContext = () -> (NSDictionary) /** A closure that is used to define a group of shared examples. This closure may contain any number of example and example groups. */ public typealias SharedExampleClosure = (SharedExampleContext) -> () /** A collection of state Quick builds up in order to work its magic. World is primarily responsible for maintaining a mapping of QuickSpec classes to root example groups for those classes. It also maintains a mapping of shared example names to shared example closures. You may configure how Quick behaves by calling the -[World configure:] method from within an overridden +[QuickConfiguration configure:] method. */ final internal class World: NSObject { /** The example group that is currently being run. The DSL requires that this group is correctly set in order to build a correct hierarchy of example groups and their examples. */ internal var currentExampleGroup: ExampleGroup! /** The example metadata of the test that is currently being run. This is useful for using the Quick test metadata (like its name) at runtime. */ internal var currentExampleMetadata: ExampleMetadata? /** A flag that indicates whether additional test suites are being run within this test suite. This is only true within the context of Quick functional tests. */ internal var isRunningAdditionalSuites = false private var specs: Dictionary = [:] private var sharedExamples: [String: SharedExampleClosure] = [:] private let configuration = Configuration() private var isConfigurationFinalized = false internal var exampleHooks: ExampleHooks {return configuration.exampleHooks } internal var suiteHooks: SuiteHooks { return configuration.suiteHooks } // MARK: Singleton Constructor private override init() {} static let sharedWorld = World() // MARK: Public Interface /** Exposes the World's Configuration object within the scope of the closure so that it may be configured. This method must not be called outside of an overridden +[QuickConfiguration configure:] method. - parameter closure: A closure that takes a Configuration object that can be mutated to change Quick's behavior. */ internal func configure(closure: QuickConfigurer) { assert(!isConfigurationFinalized, "Quick cannot be configured outside of a +[QuickConfiguration configure:] method. You should not call -[World configure:] directly. Instead, subclass QuickConfiguration and override the +[QuickConfiguration configure:] method.") closure(configuration: configuration) } /** Finalizes the World's configuration. Any subsequent calls to World.configure() will raise. */ internal func finalizeConfiguration() { isConfigurationFinalized = true } /** Returns an internally constructed root example group for the given QuickSpec class. A root example group with the description "root example group" is lazily initialized for each QuickSpec class. This root example group wraps the top level of a -[QuickSpec spec] method--it's thanks to this group that users can define beforeEach and it closures at the top level, like so: override func spec() { // These belong to the root example group beforeEach {} it("is at the top level") {} } - parameter cls: The QuickSpec class for which to retrieve the root example group. - returns: The root example group for the class. */ internal func rootExampleGroupForSpecClass(cls: AnyClass) -> ExampleGroup { #if _runtime(_ObjC) let name = NSStringFromClass(cls) #else let name = String(cls) #endif if let group = specs[name] { return group } else { let group = ExampleGroup( description: "root example group", flags: [:], isInternalRootExampleGroup: true ) specs[name] = group return group } } /** Returns all examples that should be run for a given spec class. There are two filtering passes that occur when determining which examples should be run. That is, these examples are the ones that are included by inclusion filters, and are not excluded by exclusion filters. - parameter specClass: The QuickSpec subclass for which examples are to be returned. - returns: A list of examples to be run as test invocations. */ internal func examples(specClass: AnyClass) -> [Example] { // 1. Grab all included examples. let included = includedExamples // 2. Grab the intersection of (a) examples for this spec, and (b) included examples. let spec = rootExampleGroupForSpecClass(specClass).examples.filter { included.contains($0) } // 3. Remove all excluded examples. return spec.filter { example in !self.configuration.exclusionFilters.reduce(false) { $0 || $1(example: example) } } } #if _runtime(_ObjC) @objc(examplesForSpecClass:) private func objc_examples(specClass: AnyClass) -> [Example] { return examples(specClass) } #endif // MARK: Internal internal func registerSharedExample(name: String, closure: SharedExampleClosure) { raiseIfSharedExampleAlreadyRegistered(name) sharedExamples[name] = closure } internal func sharedExample(name: String) -> SharedExampleClosure { raiseIfSharedExampleNotRegistered(name) return sharedExamples[name]! } internal var includedExampleCount: Int { return includedExamples.count } internal var beforesCurrentlyExecuting: Bool { let suiteBeforesExecuting = suiteHooks.phase == .BeforesExecuting let exampleBeforesExecuting = exampleHooks.phase == .BeforesExecuting var groupBeforesExecuting = false if let runningExampleGroup = currentExampleMetadata?.example.group { groupBeforesExecuting = runningExampleGroup.phase == .BeforesExecuting } return suiteBeforesExecuting || exampleBeforesExecuting || groupBeforesExecuting } internal var aftersCurrentlyExecuting: Bool { let suiteAftersExecuting = suiteHooks.phase == .AftersExecuting let exampleAftersExecuting = exampleHooks.phase == .AftersExecuting var groupAftersExecuting = false if let runningExampleGroup = currentExampleMetadata?.example.group { groupAftersExecuting = runningExampleGroup.phase == .AftersExecuting } return suiteAftersExecuting || exampleAftersExecuting || groupAftersExecuting } internal func performWithCurrentExampleGroup(group: ExampleGroup, closure: () -> Void) { let previousExampleGroup = currentExampleGroup currentExampleGroup = group closure() currentExampleGroup = previousExampleGroup } private var allExamples: [Example] { var all: [Example] = [] for (_, group) in specs { group.walkDownExamples { all.append($0) } } return all } private var includedExamples: [Example] { let all = allExamples let included = all.filter { example in return self.configuration.inclusionFilters.reduce(false) { $0 || $1(example: example) } } if included.isEmpty && configuration.runAllWhenEverythingFiltered { return all } else { return included } } private func raiseIfSharedExampleAlreadyRegistered(name: String) { if sharedExamples[name] != nil { raiseError("A shared example named '\(name)' has already been registered.") } } private func raiseIfSharedExampleNotRegistered(name: String) { if sharedExamples[name] == nil { raiseError("No shared example named '\(name)' has been registered. Registered shared examples: '\(Array(sharedExamples.keys))'") } } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m ================================================ #import #import #import @interface XCTestSuite (QuickTestSuiteBuilder) @end @implementation XCTestSuite (QuickTestSuiteBuilder) /** In order to ensure we can correctly build dynamic test suites, we need to replace some of the default test suite constructors. */ + (void)load { Method testCaseWithName = class_getClassMethod(self, @selector(testSuiteForTestCaseWithName:)); Method hooked_testCaseWithName = class_getClassMethod(self, @selector(qck_hooked_testSuiteForTestCaseWithName:)); method_exchangeImplementations(testCaseWithName, hooked_testCaseWithName); } /** The `+testSuiteForTestCaseWithName:` method is called when a specific test case class is run from the Xcode test navigator. If the built test suite is `nil`, Xcode will not run any tests for that test case. Given if the following test case class is run from the Xcode test navigator: FooSpec testFoo testBar XCTest will invoke this once per test case, with test case names following this format: FooSpec/testFoo FooSpec/testBar */ + (nullable instancetype)qck_hooked_testSuiteForTestCaseWithName:(nonnull NSString *)name { return [QuickTestSuite selectedTestSuiteForTestCaseWithName:name]; } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests+ObjC.m ================================================ @import Quick; @import Nimble; @import XCTest; #import "QCKSpecRunner.h" QuickConfigurationBegin(FunctionalTests_SharedExamplesConfiguration_ObjC) + (void)configure:(Configuration *)configuration { sharedExamples(@"two passing shared examples (Objective-C)", ^(QCKDSLSharedExampleContext exampleContext) { it(@"has an example that passes (4)", ^{}); it(@"has another example that passes (5)", ^{}); }); } QuickConfigurationEnd QuickSpecBegin(FunctionalTests_FocusedSpec_Focused_ObjC) it(@"has an unfocused example that fails, but is never run", ^{ XCTFail(); }); fit(@"has a focused example that passes (1)", ^{}); fdescribe(@"a focused example group", ^{ it(@"has an example that is not focused, but will be run, and passes (2)", ^{}); fit(@"has a focused example that passes (3)", ^{}); }); fitBehavesLike(@"two passing shared examples (Objective-C)", ^NSDictionary *{ return @{}; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_FocusedSpec_Unfocused_ObjC) it(@"has an unfocused example thay fails, but is never run", ^{ XCTFail(); }); describe(@"an unfocused example group that is never run", ^{ beforeEach(^{ [NSException raise:NSInternalInconsistencyException format:@""]; }); it(@"has an example that fails, but is never run", ^{ XCTFail(); }); }); QuickSpecEnd @interface FocusedTests_ObjC: XCTestCase @end @implementation FocusedTests_ObjC - (void)testOnlyFocusedExamplesAreExecuted { XCTestRun *result = qck_runSpecs(@[ [FunctionalTests_FocusedSpec_Focused_ObjC class], [FunctionalTests_FocusedSpec_Unfocused_ObjC class] ]); XCTAssertEqual(result.executionCount, 5); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests.swift ================================================ import Quick import Nimble import XCTest #if SWIFT_PACKAGE import QuickTestHelpers #endif class FunctionalTests_FocusedSpec_SharedExamplesConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("two passing shared examples") { it("has an example that passes (4)") {} it("has another example that passes (5)") {} } } } class FunctionalTests_FocusedSpec_Focused: QuickSpec { override func spec() { it("has an unfocused example that fails, but is never run") { fail() } fit("has a focused example that passes (1)") {} fdescribe("a focused example group") { it("has an example that is not focused, but will be run, and passes (2)") {} fit("has a focused example that passes (3)") {} } // TODO: Port fitBehavesLike to Swift. itBehavesLike("two passing shared examples", flags: [Filter.focused: true]) } } class FunctionalTests_FocusedSpec_Unfocused: QuickSpec { override func spec() { it("has an unfocused example that fails, but is never run") { fail() } describe("an unfocused example group that is never run") { beforeEach { assert(false) } it("has an example that fails, but is never run") { fail() } } } } class FocusedTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testOnlyFocusedExamplesAreExecuted", testOnlyFocusedExamplesAreExecuted), ] } func testOnlyFocusedExamplesAreExecuted() { let result = qck_runSpecs([ FunctionalTests_FocusedSpec_Focused.self, FunctionalTests_FocusedSpec_Unfocused.self ]) XCTAssertEqual(result.executionCount, 5 as UInt) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickFocusedTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickFocusedTests/main.swift ================================================ import Quick QCKMain([ FunctionalTests_FocusedSpec_Focused(), FunctionalTests_FocusedSpec_Unfocused(), FocusedTests(), ], configurations: [FunctionalTests_FocusedSpec_SharedExamplesConfiguration.self] ) ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTestHelpers/SpecRunner.swift ================================================ @testable import Quick import Nimble public func qck_runSpec(specClass: QuickSpec.Type) -> TestRun { return qck_runSpecs([specClass]) } public func qck_runSpecs(specClasses: [QuickSpec.Type]) -> TestRun { World.sharedWorld.isRunningAdditionalSuites = true var executionCount: UInt = 0 var hadUnexpectedFailure = false let fails = gatherFailingExpectations(silently: true) { for specClass in specClasses { let spec = specClass.init() for (_, test) in spec.allTests { do { try test() } catch { hadUnexpectedFailure = true } executionCount += 1 } } } return TestRun(executionCount: executionCount, hasSucceeded: fails.isEmpty && !hadUnexpectedFailure) } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTestHelpers/TestRun.swift ================================================ public struct TestRun { public var executionCount: UInt public var hasSucceeded: Bool public init(executionCount: UInt, hasSucceeded: Bool) { self.executionCount = executionCount self.hasSucceeded = hasSucceeded } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Fixtures/FunctionalTests_SharedExamplesTests_SharedExamples.swift ================================================ import Foundation import Quick import Nimble class FunctionalTests_SharedExamplesTests_SharedExamples: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("a group of three shared examples") { it("passes once") { expect(true).to(beTruthy()) } it("passes twice") { expect(true).to(beTruthy()) } it("passes three times") { expect(true).to(beTruthy()) } } sharedExamples("shared examples that take a context") { (sharedExampleContext: SharedExampleContext) in it("is passed the correct parameters via the context") { let callsite = sharedExampleContext()[NSString(string: "callsite")] as! NSString expect(callsite).to(equal("SharedExamplesSpec")) } } } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" typedef NS_ENUM(NSUInteger, AfterEachType) { OuterOne, OuterTwo, OuterThree, InnerOne, InnerTwo, NoExamples, }; static NSMutableArray *afterEachOrder; QuickSpecBegin(FunctionalTests_AfterEachSpec_ObjC) afterEach(^{ [afterEachOrder addObject:@(OuterOne)]; }); afterEach(^{ [afterEachOrder addObject:@(OuterTwo)]; }); afterEach(^{ [afterEachOrder addObject:@(OuterThree)]; }); it(@"executes the outer afterEach closures once, but not before this closure [1]", ^{ expect(afterEachOrder).to(equal(@[])); }); it(@"executes the outer afterEach closures a second time, but not before this closure [2]", ^{ expect(afterEachOrder).to(equal(@[@(OuterOne), @(OuterTwo), @(OuterThree)])); }); context(@"when there are nested afterEach", ^{ afterEach(^{ [afterEachOrder addObject:@(InnerOne)]; }); afterEach(^{ [afterEachOrder addObject:@(InnerTwo)]; }); it(@"executes the outer and inner afterEach closures, but not before this closure [3]", ^{ // The afterEach for the previous two examples should have been run. // The list should contain the afterEach for those example, executed from top to bottom. expect(afterEachOrder).to(equal(@[ @(OuterOne), @(OuterTwo), @(OuterThree), @(OuterOne), @(OuterTwo), @(OuterThree), ])); }); }); context(@"when there are nested afterEach without examples", ^{ afterEach(^{ [afterEachOrder addObject:@(NoExamples)]; }); }); QuickSpecEnd @interface AfterEachTests_ObjC : XCTestCase; @end @implementation AfterEachTests_ObjC - (void)setUp { [super setUp]; afterEachOrder = [NSMutableArray array]; } - (void)tearDown { afterEachOrder = [NSMutableArray array]; [super tearDown]; } - (void)testAfterEachIsExecutedInTheCorrectOrder { qck_runSpec([FunctionalTests_AfterEachSpec_ObjC class]); NSArray *expectedOrder = @[ // [1] The outer afterEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), @(OuterThree), // [2] The outer afterEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), @(OuterThree), // [3] The outer afterEach closures are executed from top to bottom, // then the outer afterEach closures are executed from top to bottom. @(InnerOne), @(InnerTwo), @(OuterOne), @(OuterTwo), @(OuterThree), ]; XCTAssertEqualObjects(afterEachOrder, expectedOrder); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif private enum AfterEachType { case OuterOne case OuterTwo case OuterThree case InnerOne case InnerTwo case NoExamples } private var afterEachOrder = [AfterEachType]() class FunctionalTests_AfterEachSpec: QuickSpec { override func spec() { describe("afterEach ordering") { afterEach { afterEachOrder.append(AfterEachType.OuterOne) } afterEach { afterEachOrder.append(AfterEachType.OuterTwo) } afterEach { afterEachOrder.append(AfterEachType.OuterThree) } it("executes the outer afterEach closures once, but not before this closure [1]") { // No examples have been run, so no afterEach will have been run either. // The list should be empty. expect(afterEachOrder).to(beEmpty()) } it("executes the outer afterEach closures a second time, but not before this closure [2]") { // The afterEach for the previous example should have been run. // The list should contain the afterEach for that example, executed from top to bottom. expect(afterEachOrder).to(equal([AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree])) } context("when there are nested afterEach") { afterEach { afterEachOrder.append(AfterEachType.InnerOne) } afterEach { afterEachOrder.append(AfterEachType.InnerTwo) } it("executes the outer and inner afterEach closures, but not before this closure [3]") { // The afterEach for the previous two examples should have been run. // The list should contain the afterEach for those example, executed from top to bottom. expect(afterEachOrder).to(equal([ AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, ])) } } context("when there are nested afterEach without examples") { afterEach { afterEachOrder.append(AfterEachType.NoExamples) } } } #if _runtime(_ObjC) describe("error handling when misusing ordering") { it("should throw an exception when including afterEach in it block") { expect { afterEach { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'afterEach' cannot be used inside 'it', 'afterEach' may only be used inside 'context' or 'describe'. ")) }) } } #endif } } class AfterEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAfterEachIsExecutedInTheCorrectOrder", testAfterEachIsExecutedInTheCorrectOrder), ] } func testAfterEachIsExecutedInTheCorrectOrder() { afterEachOrder = [] qck_runSpec(FunctionalTests_AfterEachSpec.self) let expectedOrder = [ // [1] The outer afterEach closures are executed from top to bottom. AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, // [2] The outer afterEach closures are executed from top to bottom. AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, // [3] The inner afterEach closures are executed from top to bottom, // then the outer afterEach closures are executed from top to bottom. AfterEachType.InnerOne, AfterEachType.InnerTwo, AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, ] XCTAssertEqual(afterEachOrder, expectedOrder) afterEachOrder = [] } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static BOOL afterSuiteWasExecuted = NO; QuickSpecBegin(FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC) afterSuite(^{ afterSuiteWasExecuted = YES; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_AfterSuite_Spec_ObjC) it(@"is executed before afterSuite", ^{ expect(@(afterSuiteWasExecuted)).to(beFalsy()); }); QuickSpecEnd @interface AfterSuiteTests_ObjC : XCTestCase; @end @implementation AfterSuiteTests_ObjC - (void)testAfterSuiteIsNotExecutedBeforeAnyExamples { // Execute the spec with an assertion after the one with an afterSuite. NSArray *specs = @[ [FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC class], [FunctionalTests_AfterSuite_Spec_ObjC class] ]; XCTestRun *result = qck_runSpecs(specs); // Although this ensures that afterSuite is not called before any // examples, it doesn't test that it's ever called in the first place. XCTAssert(result.hasSucceeded); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var afterSuiteWasExecuted = false class FunctionalTests_AfterSuite_AfterSuiteSpec: QuickSpec { override func spec() { afterSuite { afterSuiteWasExecuted = true } } } class FunctionalTests_AfterSuite_Spec: QuickSpec { override func spec() { it("is executed before afterSuite") { expect(afterSuiteWasExecuted).to(beFalsy()) } } } class AfterSuiteTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAfterSuiteIsNotExecutedBeforeAnyExamples", testAfterSuiteIsNotExecutedBeforeAnyExamples), ] } func testAfterSuiteIsNotExecutedBeforeAnyExamples() { // Execute the spec with an assertion after the one with an afterSuite. let result = qck_runSpecs([ FunctionalTests_AfterSuite_AfterSuiteSpec.self, FunctionalTests_AfterSuite_Spec.self ]) // Although this ensures that afterSuite is not called before any // examples, it doesn't test that it's ever called in the first place. XCTAssert(result.hasSucceeded) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests+ObjC.m ================================================ @import XCTest; @import Quick; #import "QCKSpecRunner.h" typedef NS_ENUM(NSUInteger, BeforeEachType) { OuterOne, OuterTwo, InnerOne, InnerTwo, InnerThree, NoExamples, }; static NSMutableArray *beforeEachOrder; QuickSpecBegin(FunctionalTests_BeforeEachSpec_ObjC) beforeEach(^{ [beforeEachOrder addObject:@(OuterOne)]; }); beforeEach(^{ [beforeEachOrder addObject:@(OuterTwo)]; }); it(@"executes the outer beforeEach closures once [1]", ^{}); it(@"executes the outer beforeEach closures a second time [2]", ^{}); context(@"when there are nested beforeEach", ^{ beforeEach(^{ [beforeEachOrder addObject:@(InnerOne)]; }); beforeEach(^{ [beforeEachOrder addObject:@(InnerTwo)]; }); beforeEach(^{ [beforeEachOrder addObject:@(InnerThree)]; }); it(@"executes the outer and inner beforeEach closures [3]", ^{}); }); context(@"when there are nested beforeEach without examples", ^{ beforeEach(^{ [beforeEachOrder addObject:@(NoExamples)]; }); }); QuickSpecEnd @interface BeforeEachTests_ObjC : XCTestCase; @end @implementation BeforeEachTests_ObjC - (void)setUp { beforeEachOrder = [NSMutableArray array]; [super setUp]; } - (void)tearDown { beforeEachOrder = [NSMutableArray array]; [super tearDown]; } - (void)testBeforeEachIsExecutedInTheCorrectOrder { qck_runSpec([FunctionalTests_BeforeEachSpec_ObjC class]); NSArray *expectedOrder = @[ // [1] The outer beforeEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), // [2] The outer beforeEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), // [3] The outer beforeEach closures are executed from top to bottom, // then the inner beforeEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), @(InnerOne), @(InnerTwo), @(InnerThree), ]; XCTAssertEqualObjects(beforeEachOrder, expectedOrder); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif private enum BeforeEachType { case OuterOne case OuterTwo case InnerOne case InnerTwo case InnerThree case NoExamples } private var beforeEachOrder = [BeforeEachType]() class FunctionalTests_BeforeEachSpec: QuickSpec { override func spec() { describe("beforeEach ordering") { beforeEach { beforeEachOrder.append(BeforeEachType.OuterOne) } beforeEach { beforeEachOrder.append(BeforeEachType.OuterTwo) } it("executes the outer beforeEach closures once [1]") {} it("executes the outer beforeEach closures a second time [2]") {} context("when there are nested beforeEach") { beforeEach { beforeEachOrder.append(BeforeEachType.InnerOne) } beforeEach { beforeEachOrder.append(BeforeEachType.InnerTwo) } beforeEach { beforeEachOrder.append(BeforeEachType.InnerThree) } it("executes the outer and inner beforeEach closures [3]") {} } context("when there are nested beforeEach without examples") { beforeEach { beforeEachOrder.append(BeforeEachType.NoExamples) } } } #if _runtime(_ObjC) describe("error handling when misusing ordering") { it("should throw an exception when including beforeEach in it block") { expect { beforeEach { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'beforeEach' cannot be used inside 'it', 'beforeEach' may only be used inside 'context' or 'describe'. ")) }) } } #endif } } class BeforeEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeforeEachIsExecutedInTheCorrectOrder", testBeforeEachIsExecutedInTheCorrectOrder), ] } func testBeforeEachIsExecutedInTheCorrectOrder() { beforeEachOrder = [] qck_runSpec(FunctionalTests_BeforeEachSpec.self) let expectedOrder = [ // [1] The outer beforeEach closures are executed from top to bottom. BeforeEachType.OuterOne, BeforeEachType.OuterTwo, // [2] The outer beforeEach closures are executed from top to bottom. BeforeEachType.OuterOne, BeforeEachType.OuterTwo, // [3] The outer beforeEach closures are executed from top to bottom, // then the inner beforeEach closures are executed from top to bottom. BeforeEachType.OuterOne, BeforeEachType.OuterTwo, BeforeEachType.InnerOne, BeforeEachType.InnerTwo, BeforeEachType.InnerThree, ] XCTAssertEqual(beforeEachOrder, expectedOrder) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static BOOL beforeSuiteWasExecuted = NO; QuickSpecBegin(FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC) beforeSuite(^{ beforeSuiteWasExecuted = YES; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_BeforeSuite_Spec_ObjC) it(@"is executed after beforeSuite", ^{ expect(@(beforeSuiteWasExecuted)).to(beTruthy()); }); QuickSpecEnd @interface BeforeSuiteTests_ObjC : XCTestCase; @end @implementation BeforeSuiteTests_ObjC - (void)testBeforeSuiteIsExecutedBeforeAnyExamples { // Execute the spec with an assertion before the one with a beforeSuite NSArray *specs = @[ [FunctionalTests_BeforeSuite_Spec_ObjC class], [FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC class] ]; XCTestRun *result = qck_runSpecs(specs); XCTAssert(result.hasSucceeded); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var beforeSuiteWasExecuted = false class FunctionalTests_BeforeSuite_BeforeSuiteSpec: QuickSpec { override func spec() { beforeSuite { beforeSuiteWasExecuted = true } } } class FunctionalTests_BeforeSuite_Spec: QuickSpec { override func spec() { it("is executed after beforeSuite") { expect(beforeSuiteWasExecuted).to(beTruthy()) } } } class BeforeSuiteTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeforeSuiteIsExecutedBeforeAnyExamples", testBeforeSuiteIsExecutedBeforeAnyExamples), ] } func testBeforeSuiteIsExecutedBeforeAnyExamples() { // Execute the spec with an assertion before the one with a beforeSuite let result = qck_runSpecs([ FunctionalTests_BeforeSuite_Spec.self, FunctionalTests_BeforeSuite_BeforeSuiteSpec.self ]) XCTAssert(result.hasSucceeded) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEach.swift ================================================ import Quick public var FunctionalTests_Configuration_AfterEachWasExecuted = false class FunctionalTests_Configuration_AfterEach: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.afterEach { FunctionalTests_Configuration_AfterEachWasExecuted = true } } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class Configuration_AfterEachSpec: QuickSpec { override func spec() { beforeEach { FunctionalTests_Configuration_AfterEachWasExecuted = false } it("is executed before the configuration afterEach") { expect(FunctionalTests_Configuration_AfterEachWasExecuted).to(beFalsy()) } } } class Configuration_AfterEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted", testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted), ] } func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() { FunctionalTests_Configuration_AfterEachWasExecuted = false qck_runSpec(Configuration_BeforeEachSpec.self) XCTAssert(FunctionalTests_Configuration_AfterEachWasExecuted) FunctionalTests_Configuration_AfterEachWasExecuted = false } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEach.swift ================================================ import Quick public var FunctionalTests_Configuration_BeforeEachWasExecuted = false class FunctionalTests_Configuration_BeforeEach: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { FunctionalTests_Configuration_BeforeEachWasExecuted = true } } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class Configuration_BeforeEachSpec: QuickSpec { override func spec() { it("is executed after the configuration beforeEach") { expect(FunctionalTests_Configuration_BeforeEachWasExecuted).to(beTruthy()) } } } class Configuration_BeforeEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted", testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted), ] } func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() { FunctionalTests_Configuration_BeforeEachWasExecuted = false qck_runSpec(Configuration_BeforeEachSpec.self) XCTAssert(FunctionalTests_Configuration_BeforeEachWasExecuted) FunctionalTests_Configuration_BeforeEachWasExecuted = false } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ContextTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif #if _runtime(_ObjC) class QuickContextTests: QuickSpec { override func spec() { describe("Context") { it("should throw an exception if used in an it block") { expect { context("A nested context that should throw") { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'context' cannot be used inside 'it', 'context' may only be used inside 'context' or 'describe'. ")) }) } } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/CrossReferencingSpecs.swift ================================================ import Quick import Nimble // This is a functional test ensuring that no crash occurs when a spec class // references another spec class during its spec setup. class FunctionalTests_CrossReferencingSpecA: QuickSpec { override func spec() { let _ = FunctionalTests_CrossReferencingSpecB() it("does not crash") {} } } class FunctionalTests_CrossReferencingSpecB: QuickSpec { override func spec() { let _ = FunctionalTests_CrossReferencingSpecA() it("does not crash") {} } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/DescribeTests.swift ================================================ import XCTest import Nimble import Quick #if _runtime(_ObjC) class DescribeTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testDescribeThrowsIfUsedOutsideOfQuickSpec", testDescribeThrowsIfUsedOutsideOfQuickSpec), ] } func testDescribeThrowsIfUsedOutsideOfQuickSpec() { expect { describe("this should throw an exception", {}) }.to(raiseException()) } } class QuickDescribeTests: QuickSpec { override func spec() { describe("Describe") { it("should throw an exception if used in an it block") { expect { describe("A nested describe that should throw") { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'describe' cannot be used inside 'it', 'describe' may only be used inside 'context' or 'describe'. ")) }) } } } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static BOOL isRunningFunctionalTests = NO; #pragma mark - Spec QuickSpecBegin(FunctionalTests_FailureSpec_ObjC) describe(@"a group of failing examples", ^{ it(@"passes", ^{ expect(@YES).to(beTruthy()); }); it(@"fails (but only when running the functional tests)", ^{ expect(@(isRunningFunctionalTests)).to(beFalsy()); }); it(@"fails again (but only when running the functional tests)", ^{ expect(@(isRunningFunctionalTests)).to(beFalsy()); }); }); QuickSpecEnd #pragma mark - Tests @interface FailureTests_ObjC : XCTestCase; @end @implementation FailureTests_ObjC - (void)setUp { [super setUp]; isRunningFunctionalTests = YES; } - (void)tearDown { isRunningFunctionalTests = NO; [super tearDown]; } - (void)testFailureSpecHasSucceededIsFalse { XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); XCTAssertFalse(result.hasSucceeded); } - (void)testFailureSpecExecutedAllExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); XCTAssertEqual(result.executionCount, 3); } - (void)testFailureSpecFailureCountIsEqualToTheNumberOfFailingExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); XCTAssertEqual(result.failureCount, 2); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureUsingXCTAssertTests+ObjC.m ================================================ @import XCTest; @import Quick; #import "QCKSpecRunner.h" static BOOL isRunningFunctionalTests = NO; QuickSpecBegin(FunctionalTests_FailureUsingXCTAssertSpec_ObjC) it(@"fails using an XCTAssert (but only when running the functional tests)", ^{ XCTAssertFalse(isRunningFunctionalTests); }); it(@"fails again using an XCTAssert (but only when running the functional tests)", ^{ XCTAssertFalse(isRunningFunctionalTests); }); it(@"succeeds using an XCTAssert", ^{ XCTAssertTrue(YES); }); QuickSpecEnd #pragma mark - Tests @interface FailureUsingXCTAssertTests_ObjC : XCTestCase; @end @implementation FailureUsingXCTAssertTests_ObjC - (void)setUp { [super setUp]; isRunningFunctionalTests = YES; } - (void)tearDown { isRunningFunctionalTests = NO; [super tearDown]; } - (void)testFailureUsingXCTAssertSpecHasSucceededIsFalse { XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); XCTAssertFalse(result.hasSucceeded); } - (void)testFailureUsingXCTAssertSpecExecutedAllExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); XCTAssertEqual(result.executionCount, 3); } - (void)testFailureUsingXCTAssertSpecFailureCountIsEqualToTheNumberOfFailingExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); XCTAssertEqual(result.failureCount, 2); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" #import "QuickSpec+QuickSpec_MethodList.h" QuickSpecBegin(FunctionalTests_ItSpec_ObjC) __block ExampleMetadata *exampleMetadata = nil; beforeEachWithMetadata(^(ExampleMetadata *metadata) { exampleMetadata = metadata; }); it(@" ", ^{ expect(exampleMetadata.example.name).to(equal(@" ")); }); it(@"has a description with セレクター名に使えない文字が入っている 👊💥", ^{ NSString *name = @"has a description with セレクター名に使えない文字が入っている 👊💥"; expect(exampleMetadata.example.name).to(equal(name)); }); it(@"is a test with a unique name", ^{ NSSet *allSelectors = [FunctionalTests_ItSpec_ObjC allSelectors]; expect(allSelectors).to(contain(@"is_a_test_with_a_unique_name")); expect(allSelectors).toNot(contain(@"is_a_test_with_a_unique_name_2")); }); QuickSpecEnd @interface ItTests_ObjC : XCTestCase; @end @implementation ItTests_ObjC - (void)testAllExamplesAreExecuted { XCTestRun *result = qck_runSpec([FunctionalTests_ItSpec_ObjC class]); XCTAssertEqual(result.executionCount, 3); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class FunctionalTests_ItSpec: QuickSpec { override func spec() { var exampleMetadata: ExampleMetadata? beforeEach { metadata in exampleMetadata = metadata } it("") { expect(exampleMetadata!.example.name).to(equal("")) } it("has a description with セレクター名に使えない文字が入っている 👊💥") { let name = "has a description with セレクター名に使えない文字が入っている 👊💥" expect(exampleMetadata!.example.name).to(equal(name)) } #if _runtime(_ObjC) describe("when an example has a unique name"){ it("has a unique name") {} it("doesn't add multiple selectors for it") { let allSelectors = [String]( FunctionalTests_ItSpec.allSelectors() .filter { $0.hasPrefix("when_an_example_has_a_unique_name__") } ) .sort(<) expect(allSelectors) == [ "when_an_example_has_a_unique_name__doesn_t_add_multiple_selectors_for_it", "when_an_example_has_a_unique_name__has_a_unique_name" ] } } describe("when two examples have the exact name") { it("has exactly the same name") {} it("has exactly the same name") {} it("makes a unique name for each of the above") { let allSelectors = [String]( FunctionalTests_ItSpec.allSelectors() .filter { $0.hasPrefix("when_two_examples_have_the_exact_name__") } ) .sort(<) expect(allSelectors) == [ "when_two_examples_have_the_exact_name__has_exactly_the_same_name", "when_two_examples_have_the_exact_name__has_exactly_the_same_name_2", "when_two_examples_have_the_exact_name__makes_a_unique_name_for_each_of_the_above" ] } } describe("error handling when misusing ordering") { it("an it") { expect { it("will throw an error when it is nested in another it") { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ")) }) } describe("behavior with an 'it' inside a 'beforeEach'") { var exception: NSException? beforeEach { let capture = NMBExceptionCapture(handler: ({ e in exception = e }), finally: nil) capture.tryBlock { it("a rogue 'it' inside a 'beforeEach'") { } return } } it("should have thrown an exception with the correct error message") { expect(exception).toNot(beNil()) expect(exception!.reason).to(equal("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ")) } } describe("behavior with an 'it' inside an 'afterEach'") { var exception: NSException? afterEach { let capture = NMBExceptionCapture(handler: ({ e in exception = e expect(exception).toNot(beNil()) expect(exception!.reason).to(equal("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ")) }), finally: nil) capture.tryBlock { it("a rogue 'it' inside an 'afterEach'") { } return } } it("should throw an exception with the correct message after this 'it' block executes") { } } } #endif } } class ItTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAllExamplesAreExecuted", testAllExamplesAreExecuted), ] } #if _runtime(_ObjC) func testAllExamplesAreExecuted() { let result = qck_runSpec(FunctionalTests_ItSpec.self) XCTAssertEqual(result.executionCount, 10 as UInt) } #else func testAllExamplesAreExecuted() { let result = qck_runSpec(FunctionalTests_ItSpec.self) XCTAssertEqual(result.executionCount, 2 as UInt) } #endif } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static NSUInteger oneExampleBeforeEachExecutedCount = 0; static NSUInteger onlyPendingExamplesBeforeEachExecutedCount = 0; QuickSpecBegin(FunctionalTests_PendingSpec_ObjC) pending(@"an example that will not run", ^{ expect(@YES).to(beFalsy()); }); describe(@"a describe block containing only one enabled example", ^{ beforeEach(^{ oneExampleBeforeEachExecutedCount += 1; }); it(@"an example that will run", ^{}); pending(@"an example that will not run", ^{}); }); describe(@"a describe block containing only pending examples", ^{ beforeEach(^{ onlyPendingExamplesBeforeEachExecutedCount += 1; }); pending(@"an example that will not run", ^{}); }); QuickSpecEnd @interface PendingTests_ObjC : XCTestCase; @end @implementation PendingTests_ObjC - (void)setUp { [super setUp]; oneExampleBeforeEachExecutedCount = 0; onlyPendingExamplesBeforeEachExecutedCount = 0; } - (void)tearDown { oneExampleBeforeEachExecutedCount = 0; onlyPendingExamplesBeforeEachExecutedCount = 0; [super tearDown]; } - (void)testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail { XCTestRun *result = qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); XCTAssert(result.hasSucceeded); } - (void)testBeforeEachOnlyRunForEnabledExamples { qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1); } - (void)testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples { qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var oneExampleBeforeEachExecutedCount = 0 var onlyPendingExamplesBeforeEachExecutedCount = 0 class FunctionalTests_PendingSpec: QuickSpec { override func spec() { xit("an example that will not run") { expect(true).to(beFalsy()) } describe("a describe block containing only one enabled example") { beforeEach { oneExampleBeforeEachExecutedCount += 1 } it("an example that will run") {} pending("an example that will not run") {} } describe("a describe block containing only pending examples") { beforeEach { onlyPendingExamplesBeforeEachExecutedCount += 1 } pending("an example that will not run") {} } } } class PendingTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail", testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail), ("testBeforeEachOnlyRunForEnabledExamples", testBeforeEachOnlyRunForEnabledExamples), ("testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples", testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples), ] } func testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail() { let result = qck_runSpec(FunctionalTests_PendingSpec.self) XCTAssert(result.hasSucceeded) } func testBeforeEachOnlyRunForEnabledExamples() { oneExampleBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_PendingSpec.self) XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1) } func testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples() { onlyPendingExamplesBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_PendingSpec.self) XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static NSUInteger specBeforeEachExecutedCount = 0; static NSUInteger sharedExamplesBeforeEachExecutedCount = 0; QuickConfigurationBegin(FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples_ObjC) + (void)configure:(Configuration *)configuration { sharedExamples(@"a group of three shared examples with a beforeEach in Obj-C", ^(QCKDSLSharedExampleContext context) { beforeEach(^{ sharedExamplesBeforeEachExecutedCount += 1; }); it(@"passes once", ^{}); it(@"passes twice", ^{}); it(@"passes three times", ^{}); }); } QuickConfigurationEnd QuickSpecBegin(FunctionalTests_SharedExamples_BeforeEachSpec_ObjC) beforeEach(^{ specBeforeEachExecutedCount += 1; }); it(@"executes the spec beforeEach once", ^{}); itBehavesLike(@"a group of three shared examples with a beforeEach in Obj-C", ^NSDictionary*{ return @{}; }); QuickSpecEnd @interface SharedExamples_BeforeEachTests_ObjC : XCTestCase; @end @implementation SharedExamples_BeforeEachTests_ObjC - (void)setUp { [super setUp]; specBeforeEachExecutedCount = 0; sharedExamplesBeforeEachExecutedCount = 0; } - (void)tearDown { specBeforeEachExecutedCount = 0; sharedExamplesBeforeEachExecutedCount = 0; [super tearDown]; } - (void)testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample { qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]); XCTAssertEqual(specBeforeEachExecutedCount, 4); } - (void)testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample { qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]); XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var specBeforeEachExecutedCount = 0 var sharedExamplesBeforeEachExecutedCount = 0 class FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("a group of three shared examples with a beforeEach") { beforeEach { sharedExamplesBeforeEachExecutedCount += 1 } it("passes once") {} it("passes twice") {} it("passes three times") {} } } } class FunctionalTests_SharedExamples_BeforeEachSpec: QuickSpec { override func spec() { beforeEach { specBeforeEachExecutedCount += 1 } it("executes the spec beforeEach once") {} itBehavesLike("a group of three shared examples with a beforeEach") } } class SharedExamples_BeforeEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample", testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample), ("testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample", testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample), ] } func testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample() { specBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.self) XCTAssertEqual(specBeforeEachExecutedCount, 4) } func testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample() { sharedExamplesBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.self) XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" QuickSpecBegin(FunctionalTests_SharedExamples_Spec_ObjC) itBehavesLike(@"a group of three shared examples", ^NSDictionary*{ return @{}; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_SharedExamples_ContextSpec_ObjC) itBehavesLike(@"shared examples that take a context", ^NSDictionary *{ return @{ @"callsite": @"SharedExamplesSpec" }; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_SharedExamples_SameContextSpec_ObjC) __block NSInteger counter = 0; afterEach(^{ counter++; }); sharedExamples(@"gets called with a different context from within the same spec file", ^(QCKDSLSharedExampleContext exampleContext) { it(@"tracks correctly", ^{ NSString *payload = exampleContext()[@"payload"]; BOOL expected = [payload isEqualToString:[NSString stringWithFormat:@"%ld", (long)counter]]; expect(@(expected)).to(beTrue()); }); }); itBehavesLike(@"gets called with a different context from within the same spec file", ^{ return @{ @"payload" : @"0" }; }); itBehavesLike(@"gets called with a different context from within the same spec file", ^{ return @{ @"payload" : @"1" }; }); QuickSpecEnd @interface SharedExamplesTests_ObjC : XCTestCase; @end @implementation SharedExamplesTests_ObjC - (void)testAGroupOfThreeSharedExamplesExecutesThreeExamples { XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_Spec_ObjC class]); XCTAssert(result.hasSucceeded); XCTAssertEqual(result.executionCount, 3); } - (void)testSharedExamplesWithContextPassContextToExamples { XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_ContextSpec_ObjC class]); XCTAssert(result.hasSucceeded); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests.swift ================================================ import Foundation import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class FunctionalTests_SharedExamples_Spec: QuickSpec { override func spec() { itBehavesLike("a group of three shared examples") } } class FunctionalTests_SharedExamples_ContextSpec: QuickSpec { override func spec() { itBehavesLike("shared examples that take a context") { [NSString(string: "callsite"): NSString(string: "SharedExamplesSpec")] } } } #if _runtime(_ObjC) class FunctionalTests_SharedExamples_ErrorSpec: QuickSpec { override func spec() { describe("error handling when misusing ordering") { it("should throw an exception when including itBehavesLike in it block") { expect { itBehavesLike("a group of three shared examples") }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'itBehavesLike' cannot be used inside 'it', 'itBehavesLike' may only be used inside 'context' or 'describe'. ")) }) } } } } #endif // Shared examples are defined in QuickTests/Fixtures class SharedExamplesTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAGroupOfThreeSharedExamplesExecutesThreeExamples", testAGroupOfThreeSharedExamplesExecutesThreeExamples), ("testSharedExamplesWithContextPassContextToExamples", testSharedExamplesWithContextPassContextToExamples), ] } func testAGroupOfThreeSharedExamplesExecutesThreeExamples() { let result = qck_runSpec(FunctionalTests_SharedExamples_Spec.self) XCTAssert(result.hasSucceeded) XCTAssertEqual(result.executionCount, 3 as UInt) } func testSharedExamplesWithContextPassContextToExamples() { let result = qck_runSpec(FunctionalTests_SharedExamples_ContextSpec.self) XCTAssert(result.hasSucceeded) } } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.h ================================================ @import XCTest; /** Runs an XCTestSuite instance containing only the given XCTestCase subclass. Use this to run QuickSpec subclasses from within a set of unit tests. Due to implicit dependencies in _XCTFailureHandler, this function raises an exception when used in Swift to run a failing test case. @param specClass The class of the spec to be run. @return An XCTestRun instance that contains information such as the number of failures, etc. */ extern XCTestRun *qck_runSpec(Class specClass); /** Runs an XCTestSuite instance containing the given XCTestCase subclasses, in the order provided. See the documentation for `qck_runSpec` for more details. @param specClasses An array of QuickSpec classes, in the order they should be run. @return An XCTestRun instance that contains information such as the number of failures, etc. */ extern XCTestRun *qck_runSpecs(NSArray *specClasses); ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.m ================================================ @import Quick; #import "QCKSpecRunner.h" #import "XCTestObservationCenter+QCKSuspendObservation.h" #import "World.h" @interface XCTest (Redeclaration) - (XCTestRun *)run; @end XCTestRun *qck_runSuite(XCTestSuite *suite) { [World sharedWorld].isRunningAdditionalSuites = YES; __block XCTestRun *result = nil; [[XCTestObservationCenter sharedTestObservationCenter] qck_suspendObservationForBlock:^{ if ([suite respondsToSelector:@selector(runTest)]) { [suite runTest]; result = suite.testRun; } else { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" result = [suite run]; #pragma clang diagnostic pop } }]; return result; } XCTestRun *qck_runSpec(Class specClass) { return qck_runSuite([XCTestSuite testSuiteForTestCaseClass:specClass]); } XCTestRun *qck_runSpecs(NSArray *specClasses) { XCTestSuite *suite = [XCTestSuite testSuiteWithName:@"MySpecs"]; for (Class specClass in specClasses) { [suite addTest:[XCTestSuite testSuiteForTestCaseClass:specClass]]; } return qck_runSuite(suite); } ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.h ================================================ #import NS_ASSUME_NONNULL_BEGIN @interface QuickSpec (QuickSpec_MethodList) + (NSSet *)allSelectors; @end NS_ASSUME_NONNULL_END ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.m ================================================ #import "QuickSpec+QuickSpec_MethodList.h" #import @implementation QuickSpec (QuickSpec_MethodList) /** * This method will instantiate an instance of the class on which it is called, * returning a list of selector names for it. * * @warning Only intended to be used in test assertions! * * @return a set of NSStrings representing the list of selectors it contains */ + (NSSet *)allSelectors { QuickSpec *specInstance = [[[self class] alloc] init]; NSMutableSet *allSelectors = [NSMutableSet set]; unsigned int methodCount = 0; Method *mlist = class_copyMethodList(object_getClass(specInstance), &methodCount); for(unsigned int i = 0; i < methodCount; i++) { SEL selector = method_getName(mlist[i]); [allSelectors addObject:NSStringFromSelector(selector)]; } free(mlist); return [allSelectors copy]; } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h ================================================ #import "QCKSpecRunner.h" #import "QuickSpec+QuickSpec_MethodList.h" ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestCaseProvider.swift ================================================ import Foundation import XCTest // XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available // in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, // we ensure that the tests fail in Xcode if they haven't been configured properly to // be run with the open-source tools. #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) public protocol XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { get } } extension XCTestCase { override public func tearDown() { if let provider = self as? XCTestCaseProvider { provider.assertContainsTest(invocation!.selector.description) } super.tearDown() } } extension XCTestCaseProvider { private func assertContainsTest(name: String) { let contains = self.allTests.contains({ test in return test.0 == name }) XCTAssert(contains, "Test '\(name)' is missing from the allTests array") } } #endif ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.h ================================================ #import /** Add the ability to temporarily disable internal XCTest execution observation in order to run isolated XCTestSuite instances while the QuickTests test suite is running. */ @interface XCTestObservationCenter (QCKSuspendObservation) /** Suspends test suite observation for XCTest-provided observers for the duration that the block is executing. Any test suites that are executed within the block do not generate any log output. Failures are still reported. Use this method to run XCTestSuite objects while another XCTestSuite is running. Without this method, tests fail with the message: "Timed out waiting for IDE barrier message to complete" or "Unexpected TestSuiteDidStart". */ - (void)qck_suspendObservationForBlock:(void (^)(void))block; @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.m ================================================ @import XCTest; #import @interface XCTestObservationCenter (Redeclaration) - (id)observers; - (void)removeTestObserver:(id)testObserver; @end @implementation XCTestObservationCenter (QCKSuspendObservation) /// This allows us to only suspend observation for observers by provided by Apple /// as a part of the XCTest framework. In particular it is important that we not /// suspend the observer added by Nimble, otherwise it is unable to properly /// report assertion failures. static BOOL (^isFromApple)(id) = ^BOOL(id observer){ return [[NSBundle bundleForClass:[observer class]].bundleIdentifier containsString:@"com.apple.dt.XCTest"]; }; - (void)qck_suspendObservationForBlock:(void (^)(void))block { id originalObservers = [[self observers] copy]; NSMutableArray *suspendedObservers = [NSMutableArray new]; for (id observer in originalObservers) { if (isFromApple(observer)) { [suspendedObservers addObject:observer]; if ([self respondsToSelector:@selector(removeTestObserver:)]) { [self removeTestObserver:observer]; } else if ([[self observers] respondsToSelector:@selector(removeObject:)]) { [[self observers] removeObject:observer]; } else { NSAssert(NO, @"unexpected type: unable to remove observers: %@", originalObservers); } } } @try { block(); } @finally { for (id observer in suspendedObservers) { if ([[self observers] respondsToSelector:@selector(addObject:)]) { [[self observers] addObject:observer]; } else if ([self respondsToSelector:@selector(addTestObserver:)]) { [self addTestObserver:observer]; } } } } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/QuickConfigurationTests.m ================================================ #import #import @interface QuickConfigurationTests : XCTestCase; @end @implementation QuickConfigurationTests - (void)testInitThrows { XCTAssertThrowsSpecificNamed([QuickConfiguration new], NSException, NSInternalInconsistencyException); } @end ================================================ FILE: Carthage/Checkouts/Quick/Sources/QuickTests/main.swift ================================================ import Quick QCKMain([ FunctionalTests_AfterEachSpec(), AfterEachTests(), FunctionalTests_AfterSuite_AfterSuiteSpec(), FunctionalTests_AfterSuite_Spec(), AfterSuiteTests(), FunctionalTests_BeforeEachSpec(), BeforeEachTests(), FunctionalTests_BeforeSuite_BeforeSuiteSpec(), FunctionalTests_BeforeSuite_Spec(), BeforeSuiteTests(), // DescribeTests(), FunctionalTests_ItSpec(), ItTests(), FunctionalTests_PendingSpec(), PendingTests(), FunctionalTests_SharedExamples_BeforeEachSpec(), SharedExamples_BeforeEachTests(), FunctionalTests_SharedExamples_Spec(), FunctionalTests_SharedExamples_ContextSpec(), SharedExamplesTests(), Configuration_AfterEachSpec(), Configuration_AfterEachTests(), Configuration_BeforeEachSpec(), Configuration_BeforeEachTests(), FunctionalTests_CrossReferencingSpecA(), FunctionalTests_CrossReferencingSpecB(), ], configurations: [ FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples.self, FunctionalTests_SharedExamplesTests_SharedExamples.self, FunctionalTests_Configuration_AfterEach.self, FunctionalTests_Configuration_BeforeEach.self, ] ) ================================================ FILE: Carthage/Checkouts/Quick/circle.yml ================================================ machine: xcode: version: "7.3" checkout: post: - git submodule update --init --recursive dependencies: pre: - brew update test: override: - rake test:ios - rake test:osx ================================================ FILE: Carthage/Checkouts/Quick/script/release ================================================ #!/usr/bin/env sh REMOTE_BRANCH=master POD_NAME=Quick PODSPEC=Quick.podspec POD=${COCOAPODS:-pod} function help { echo "Usage: release VERSION RELEASE_NOTES [-f]" echo echo "VERSION should be the version to release, should not include the 'v' prefix" echo "RELEASE_NOTES should be a file that lists all the release notes for this version" echo " if file does not exist, creates a git-style commit with a diff as a comment" echo echo "FLAGS" echo " -f Forces override of tag" echo echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" echo echo "HINT: use 'git diff ...HEAD' to build the release notes" echo exit 2 } function die { echo "[ERROR] $@" echo exit 1 } if [ $# -lt 2 ]; then help fi VERSION=$1 RELEASE_NOTES=$2 FORCE_TAG=$3 VERSION_TAG="v$VERSION" echo "-> Verifying Local Directory for Release" if [ -z "`which $POD`" ]; then die "Cocoapods is required to produce a release. Aborting." fi echo " > Cocoapods is installed" echo " > Is this a reasonable tag?" echo $VERSION_TAG | grep -q "^vv" if [ $? -eq 0 ]; then die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." fi echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" if [ $? -ne 0 ]; then die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." fi echo " > Is this version ($VERSION) unique?" git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 if [ $? -eq 0 ]; then if [ -z "$FORCE_TAG" ]; then die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" else echo " > NO, but force was specified." fi else echo " > Yes, tag is unique" fi if [ ! -f "$RELEASE_NOTES" ]; then echo " > Failed to find $RELEASE_NOTES. Prompting editor" RELEASE_NOTES=.release-changes LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` echo " > Latest tag ${LATEST_TAG}" echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES echo "================" >> $RELEASE_NOTES echo >> $RELEASE_NOTES echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES $EDITOR $RELEASE_NOTES diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 STATUS=$? rm ${RELEASE_NOTES}.backup if [ $STATUS -eq 0 ]; then rm $RELEASE_NOTES die "No changes in release notes file. Aborting." fi fi echo " > Release notes: $RELEASE_NOTES" if [ ! -f "$PODSPEC" ]; then die "Cannot find podspec: $PODSPEC. Aborting." fi echo " > Podspec exists" git config --get user.signingkey > /dev/null || { echo "[ERROR] No PGP found to sign tag. Aborting." echo echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" echo " intermediate between you and the end-users to modify the git repository." echo echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" echo " from the official maintainers." echo echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." echo echo "Related resources:" echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" echo exit 2 } echo " > Found PGP key for git" # Verify cocoapods trunk ownership pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." echo " > Verified ownership to $POD_NAME pod" echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." function restore_podspec { if [ -f "${PODSPEC}.backup" ]; then mv -f ${PODSPEC}{.backup,} fi } echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" git fetch origin || die "Failed to fetch origin" git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" echo "-> Setting podspec version" cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" SET_PODSPEC_VERSION=$? if [ $SET_PODSPEC_VERSION -eq 0 ]; then echo " > Podspec already set to $VERSION. Skipping." else sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { restore_podspec die "Failed to update version in podspec" } git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi if [ -z "$FORCE_TAG" ]; then echo "-> Tagging version" git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin" git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" else echo "-> Tagging version (force)" git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin (force)" git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" fi if [ $SET_PODSPEC_VERSION -ne 0 ]; then rm $RELEASE_NOTES git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" echo " > Pushed version to origin" fi echo echo "Pushing to pod trunk..." $POD trunk push "$PODSPEC" echo echo "================ Finalizing the Release ================" echo echo " - Opening GitHub to mark this as a release..." echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for Github styling." echo " - Announce!" open "https://github.com/Quick/Quick/releases/new?tag=$VERSION_TAG" rm ${PODSPEC}.backup ================================================ FILE: Carthage/Checkouts/Quick/script/travis-install-linux ================================================ #!/usr/bin/env bash set -e # See: https://github.com/kylef/swiftenv/wiki/Travis-CI curl -sL https://gist.github.com/kylef/5c0475ff02b7c7671d2a/raw/621ef9b29bbb852fdfd2e10ed147b321d792c1e4/swiftenv-install.sh | bash ================================================ FILE: Carthage/Checkouts/Quick/script/travis-install-osx ================================================ #!/usr/bin/env sh set -e git submodule update --init --recursive ================================================ FILE: Carthage/Checkouts/Quick/script/travis-script-linux ================================================ #!/usr/bin/env sh . ~/.swiftenv/init rake test:swiftpm ================================================ FILE: Carthage/Checkouts/Quick/script/travis-script-osx ================================================ #!/usr/bin/env sh if [ "$PODSPEC" ]; then TASK="podspec:lint" else TASK="test:$PLATFORM" fi echo "Executing rake task: $TASK" rake "$TASK" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/.gitignore ================================================ # Xcode build/* *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 *.xcworkspace !default.xcworkspace xcuserdata profile *.moved-aside Carthage/Build ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/.gitmodules ================================================ [submodule "Carthage/Checkouts/Nimble"] path = Carthage/Checkouts/Nimble url = https://github.com/Quick/Nimble.git [submodule "Carthage/Checkouts/Quick"] path = Carthage/Checkouts/Quick url = https://github.com/sharplet/Quick.git [submodule "Carthage/Checkouts/xcconfigs"] path = Carthage/Checkouts/xcconfigs url = https://github.com/jspahrsummers/xcconfigs.git [submodule "Carthage/Checkouts/Result"] path = Carthage/Checkouts/Result url = https://github.com/antitypical/Result.git ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/.travis.yml ================================================ language: objective-c osx_image: xcode7.3 before_install: true install: true git: submodules: false before_script: - git submodule update --init --recursive script: - script/build xcode_workspace: ReactiveCocoa.xcworkspace matrix: include: - xcode_scheme: ReactiveCocoa-Mac env: - XCODE_SDK=macosx - XCODE_ACTION="build test" - XCODE_DESTINATION="arch=x86_64" - xcode_scheme: ReactiveCocoa-iOS env: - XCODE_SDK=iphonesimulator - XCODE_ACTION=test - XCODE_DESTINATION="platform=iOS Simulator,name=iPhone 6s" - xcode_scheme: ReactiveCocoa-tvOS env: - XCODE_SDK=appletvsimulator - XCODE_ACTION=test - XCODE_DESTINATION="platform=tvOS Simulator,name=Apple TV 1080p" - xcode_scheme: ReactiveCocoa-watchOS env: - XCODE_SDK=watchsimulator - XCODE_ACTION=build - XCODE_DESTINATION="platform=watchOS Simulator,name=Apple Watch - 38mm" - script: - brew update - brew outdated carthage || brew upgrade carthage - carthage build --no-skip-current env: - JOB=CARTHAGE - xcode_scheme: ReactiveCocoa-Mac osx_image: xcode8 env: - XCODE_SDK=macosx - XCODE_ACTION="build test" - XCODE_DESTINATION="arch=x86_64" - TOOLCHAINS="com.apple.dt.toolchain.Swift_2_3" - xcode_scheme: ReactiveCocoa-iOS osx_image: xcode8 env: - XCODE_SDK=iphonesimulator - XCODE_ACTION="build-for-testing test-without-building" - XCODE_DESTINATION="platform=iOS Simulator,name=iPhone 6s" - xcode_scheme: ReactiveCocoa-tvOS osx_image: xcode8 env: - XCODE_SDK=appletvsimulator - XCODE_ACTION="build-for-testing test-without-building" - XCODE_DESTINATION="platform=tvOS Simulator,name=Apple TV 1080p" - xcode_scheme: ReactiveCocoa-watchOS osx_image: xcode8 env: - XCODE_SDK=watchsimulator - XCODE_ACTION=build - XCODE_DESTINATION="platform=watchOS Simulator,name=Apple Watch - 38mm" - script: - brew update - brew outdated carthage || brew upgrade carthage - carthage build --no-skip-current osx_image: xcode8 env: - JOB=CARTHAGE notifications: email: false slack: secure: C9QTry5wUG9CfeH3rm3Z19R5rDWqDO7EhHAqHDXBxT6CpGRkTPFliJexpjBYB4sroJ8CiY5ZgTI2sjRBiAdGoE5ZQkfnwSoKQhWXkwo19TnbSnufr3cKO2SZkUhBqOlZcA+mgfjZ7rm2wm7RhpCR/4z8oBXDN4/xv0U5R2fLCLE= ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/CHANGELOG.md ================================================ # 4.0 If you’re new to the Swift API and migrating from RAC 2, start with the [3.0 changes](#30). This section only covers the differences between `3.0` and `4.0`. Just like in `RAC 3`, because Objective-C is still in widespread use, 99% of `RAC 2.x` code will continue to work under `RAC 4.0` without any changes. That is, `RAC 2.x` primitives are still available in `RAC 4.0`. `ReactiveCocoa 4.0` targets **Xcode 7.2.x** and **Swift 2.1.x**, and it supports `iOS 8.0`, `watchOS 2.0`, `tvOS 9.0` and `OS X 10.9`. #### Signal operators are protocol extensions The biggest change from `RAC 3` to `RAC 4` is that `Signal` and `SignalProducer` operators are implemented as **protocol extensions** instead of global functions. This is similar to many of the collection protocol changes in the `Swift 2` standard library. This enables chaining signal operators with normal dot-method calling syntax, which makes autocompleting operators a lot easier. Previously the custom `|>` was required to enable chaining global functions without a mess of nested calls and parenthesis. ```swift /// RAC 3 signal |> filter { $0 % 2 == 0 } |> map { $0 * $0 } |> observe { print($0) } /// RAC 4 signal .filter { $0 % 2 == 0 } .map { $0 * $0 } .observeNext { print($0) } ``` Additionally, this means that `SignalProducer` operators are less “magic”. In RAC 3 the `Signal` operators were implicitly lifted to work on `SignalProducer` via `|>`. This was a point of confusion for some, especially when browsing the source looking for these operators. Now as protocol extensions, the `SignalProducer` operators are explicitly implemented in terms of their `Signal` counterpart when available. #### Removal of `|>` custom operator As already alluded to above, the custom `|>` operator for chaining signals has been removed. Instead standard method calling syntax is used for chaining operators. #### Event cases are no longer boxed The improvements to associated enum values in `Swift 2` mean that `Event` case no longer need to be `Box`ed. In fact, the `Box` dependency has been removed completely from `RAC 4`. #### Replacements for the `start` and `observer` overloads The `observe` and `start` overloads taking `next`, `error`, etc. optional function parameters have been removed. They’ve been replaced with methods taking a single function with the target `Event` case — `observeNext`, `startWithNext`, and the same for `failed` and `completed`. See [#2311](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2311) and [#2318](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2318) for more details. #### Renamed `try` and `catch` operators The `try` and `catch` operators were renamed because of the addition of the error handling keywords with the same name. They are now `attempt` and `flatMapError` respectively. Also, `tryMap` was renamed to `attemptMap` for consistency. #### `flatten` and `flatMap` are now possible for all 4 combinations of `Signal`+`SignalProducer` This fills a gap that was missing in `RAC 3`. It’s a common pattern to have signals-of-signals or signals-of-producers. The addition of `flatten` and `flatMap` over these makes it now possible to work with any combination of `Signal`s and `SignalProducer`s. #### Renamed `Event.Error` to `Event.Failed` The `Error` case of `Event` has changed to `Failed`. This aims to help clarify the terminating nature of failure/error events and puts them in the same tense as other terminating cases (`Interrupted` and `Completed`). Likewise, some operations and parameters have been renamed (e.g. `Signal.observeError` is now `Signal.observeFailed`, `Observer.sendError` is now `Observer.sendFailed`). #### Renamed signal generic parameters The generic parameters of `Signal`, `SignalProducer`, and other related types have been renamed to `Value` and `Error` from `T` and `E` respectively. This is in-line with changes to the standard library to give more descriptive names to type parameters for increased clarity. This should have limited impact, only affecting generic, custom signal/producer extensions. #### Added missing `SignalProducer` operators There were some `Signal` operators that were missing `SignalProducer` equivalents: * `takeUntil` * `combineLatestWith` * `sampleOn` * `takeUntilReplacement` * `zipWith` #### Added new operators: * `Signal.on`. * `Signal.merge(signals:)`. * `Signal.empty`. * `skipUntil`. * `replayLazily` ([#2639](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2639)). #### Renamed `PropertyOf` to `AnyProperty` This is in-line with changes to the standard library in `Swift 2`. #### Enhancements to `PropertyType` `MutableProperty` received 3 new methods, similar to those in `Atomic`: `modify`, `swap`, and `withValue`. Additionally, all `PropertyType`s now have a `signal: Signal` in addition to their existing `producer: SignalProducer` property. #### Publicized `Bag` and `Atomic` `Bag` and `Atomic` are now public. These are useful when creating custom operators for RAC types. #### `SignalProducer.buffer` no longer has a default capacity In order to force users to think about the desired capacity, this no longer defaults to `Int.max`. Prior to this change one could have inadvertently cached every value emitted by the `SignalProducer`. This needs to be specified manually now. #### Added `SignalProducer.replayLazily` for multicasting It’s still recommended to use `SignalProducer.buffer` or `PropertyType` when buffering behavior is desired. However, when you need to compose an existing `SignalProducer` to avoid duplicate side effects, this operator is now available. The full semantics of the operator are documented in the code, and you can see [#2639](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2639) for full details. # 3.0 ReactiveCocoa 3.0 includes the first official Swift API, which is intended to eventually supplant the Objective-C API entirely. However, because migration is hard and time-consuming, and because Objective-C is still in widespread use, 99% of RAC 2.x code will continue to work under RAC 3.0 without any changes. Since the 3.0 changes are entirely additive, this document will discuss how concepts from the Objective-C API map to the Swift API. For a complete diff of all changes, see [the 3.0 pull request](https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1382). **[Additions](#additions)** 1. [Parameterized types](#parameterized-types) 1. [Interrupted event](#interrupted-event) 1. [Objective-C bridging](#objective-c-bridging) **[Replacements](#replacements)** 1. [Hot signals are now Signals](#hot-signals-are-now-signals) 1. [Cold signals are now SignalProducers](#cold-signals-are-now-signalproducers) 1. [Commands are now Actions](#commands-are-now-actions) 1. [Flattening/merging, concatenating, and switching are now one operator](#flatteningmerging-concatenating-and-switching-are-now-one-operator) 1. [Using PropertyType instead of RACObserve and RAC](#using-propertytype-instead-of-racobserve-and-rac) 1. [Using Signal.pipe instead of RACSubject](#using-signalpipe-instead-of-racsubject) 1. [Using SignalProducer.buffer instead of replaying](#using-signalproducerbuffer-instead-of-replaying) 1. [Using startWithSignal instead of multicasting](#using-startwithsignal-instead-of-multicasting) **[Minor changes](#minor-changes)** 1. [Disposable changes](#disposable-changes) 1. [Scheduler changes](#scheduler-changes) ## Additions ### Parameterized types Thanks to Swift, **it is now possible to express the type of value that a signal can send. RAC also requires that the type of errors be specified.** For example, `Signal` is a signal that may send zero or more integers, and which may send an error of type `NSError`. **If it is impossible for a signal to error out, use the built-in [`NoError`](ReactiveCocoa/Swift/Errors.swift) type** (which can be referred to, but never created) to represent that case—for example, `Signal` is a signal that may send zero or more strings, and which will _not_ send an error under any circumstances. Together, these additions make it much simpler to reason about signal interactions, and protect against several kinds of common bugs that occurred in Objective-C. ### Interrupted event In addition to the `Next`, `Error`, and `Completed` events that have always been part of RAC, version 3.0 [adds another terminating event](https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1735)—called `Interrupted`—that is used to communicate cancellation. Now, **whenever a [producer](#cold-signals-are-now-signalproducers) is disposed of, one final `Interrupted` event will be sent to all consumers,** giving them a chance to react to the cancellation. Similarly, observing a [hot signal](#hot-signals-are-now-signals) that has already terminated will immediately result in an `Interrupted` event, to clearly indicate that no further events are possible. This brings disposal semantics more in line with normal event delivery, where events propagate downstream from producers to consumers. The result is a simpler model for reasoning about non-erroneous, yet unsuccessful, signal terminations. **Note:** Custom `Signal` and `SignalProducer` operators should handle any received `Interrupted` event by forwarding it to their own observers. This ensures that interruption correctly propagates through the whole signal chain. ### Objective-C bridging **To support interoperation between the Objective-C APIs introduced in RAC 2 and the Swift APIs introduced in RAC 3, the framework offers [bridging functions](ReactiveCocoa/Swift/ObjectiveCBridging.swift)** that can convert types back and forth between the two. Because the APIs are based on fundamentally different designs, the conversion is not always one-to-one; however, every attempt has been made to faithfully translate the concepts between the two APIs (and languages). **Common conversions include:** * The `RACSignal.toSignalProducer` method **†** * Converts `RACSignal *` to `SignalProducer` * The `toRACSignal()` function * Converts `SignalProducer` to `RACSignal *` * Converts `Signal` to `RACSignal *` * The `RACCommand.toAction` method **‡** * Converts `RACCommand *` to `Action` * The `toRACCommand` function **‡** * Converts `Action` to `RACCommand *` **†** It is not possible (in the general case) to convert arbitrary `RACSignal` instances to `Signal`s, because any `RACSignal` subscription could potentially involve side effects. To obtain a `Signal`, use `RACSignal.toSignalProducer` followed by `SignalProducer.start`, thereby making those side effects explicit. **‡** Unfortunately, the `executing` properties of actions and commands are not synchronized across the API bridge. To ensure consistency, only observe the `executing` property from the base object (the one passed _into_ the bridge, not retrieved from it), so updates occur no matter which object is used for execution. ## Replacements ### Hot signals are now Signals In the terminology of RAC 2, a “hot” `RACSignal` does not trigger any side effects when a `-subscribe…` method is called upon it. In other words, hot signals are entirely producer-driven and push-based, and consumers (subscribers) cannot have any effect on their lifetime. This pattern is useful for notifying observers about events that will occur _no matter what_. For example, a `loading` boolean might flip between true and false regardless of whether anything is observing it. Concretely, _every_ `RACSubject` is a kind of hot signal, because the events being forwarded are not determined by the number of subscribers on the subject. In RAC 3, **“hot” signals are now solely represented by the [`Signal`](ReactiveCocoa/Swift/Signal.swift) class**, and “cold” signals have been [separated into their own type](#cold-signals-are-now-signalproducers). This reduces complexity by making it clear that no `Signal` object can trigger side effects when observed. ### Cold signals are now SignalProducers In the terminology of RAC 2, a “cold” `RACSignal` performs its work one time for _every_ subscription. In other words, cold signals perform side effects when a `-subscribe…` method is called upon them, and may be able to cancel in-progress work if `-dispose` is called upon the returned `RACDisposable`. This pattern is broadly useful because it minimizes unnecessary work, and allows operators like `take`, `retry`, `concat`, etc. to manipulate when work is started and cancelled. Cold signals are also similar to how [futures and promises](http://en.wikipedia.org/wiki/Futures_and_promises) work, and can be useful for structuring asynchronous code (like network requests). In RAC 3, **“cold” signals are now solely represented by the [`SignalProducer`](ReactiveCocoa/Swift/SignalProducer.swift) class**, which clearly indicates their relationship to [“hot” signals](#hot-signals-are-now-signals). As the name indicates, a signal _producer_ is responsible for creating a [_signal_](#hot-signals-are-now-signals) (when started), and can perform work as part of that process—meanwhile, the signal can have any number of observers without any additional side effects. ### Commands are now Actions Instead of the ambiguously named `RACCommand`, the Swift API offers the [`Action`](ReactiveCocoa/Swift/Action.swift) type—named as such because it’s mainly useful in UI programming—to fulfill the same purpose. Like the rest of the Swift API, actions are [parameterized](#parameterized-types) by the types they use. **An action must indicate the type of input it accepts, the type of output it produces, and what kinds of errors can occur (if any).** This eliminates a few classes of type error, and clarifies intention. Actions are also intended to be simpler overall than their predecessor: * **Unlike commands, actions are not bound to or dependent upon the main thread**, making it easier to reason about when they can be executed and when they will generate notifications. * **Actions also only support serial execution**, because concurrent execution was a rarely used feature of `RACCommand` that added significant complexity to the interface and implementation. Because actions are frequently used in conjunction with AppKit or UIKit, there is also a `CocoaAction` class that erases the type parameters of an `Action`, allowing it to be used from Objective-C. As an example, an action can be wrapped and bound to `UIControl` like so: ```swift self.cocoaAction = CocoaAction(underlyingAction) self.button.addTarget(self.cocoaAction, action: CocoaAction.selector, forControlEvents: UIControlEvents.TouchUpInside) ``` ### Flattening/merging, concatenating, and switching are now one operator RAC 2 offers several operators for transforming a signal-of-signals into one `RACSignal`, including: * `-flatten` * `-flattenMap:` * `+merge:` * `-concat` * `+concat:` * `-switchToLatest` Because `-flattenMap:` is the easiest to use, it was often incorrectly chosen even when concatenation or switching semantics are more appropriate. **RAC 3 distills these concepts down into just two operators, `flatten` and `flatMap`.** Note that these do _not_ have the same behavior as `-flatten` and `-flattenMap:` from RAC 2. Instead, both accept a “strategy” which determines how the producer-of-producers should be integrated, which can be one of: * `.Merge`, which is equivalent to RAC 2’s `-flatten` or `+merge:` * `.Concat`, which is equivalent to `-concat` or `+concat:` * `.Latest`, which is equivalent to `-switchToLatest` This reduces the API surface area, and forces callers to consciously think about which strategy is most appropriate for a given use. **For streams of exactly one value, calls to `-flattenMap:` can be replaced with `flatMap(.Concat)`**, which has the additional benefit of predictable behavior if the input stream is refactored to have more values in the future. ### Using PropertyType instead of RACObserve and RAC To be more Swift-like, RAC 3 de-emphasizes [Key-Value Coding](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html) (KVC) and [Key-Value Observing](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) (KVO) in favor of a less “magical” representation for properties. **The [`PropertyType` protocol and implementations](ReactiveCocoa/Swift/Property.swift) replace most uses of the `RACObserve()` and `RAC()` macros.** For example, `MutableProperty` can be used to represent a property that can be bound to. If changes to that property should be visible to consumers, it can additionally be wrapped in `PropertyOf` (to hide the mutable bits) and exposed publicly. **If KVC or KVO is required by a specific API**—for example, to observe changes to `NSOperation.executing`—RAC 3 offers a `DynamicProperty` type that can wrap those key paths. Use this class with caution, though, as it can’t offer any type safety, and many APIs (especially in AppKit and UIKit) are not documented to be KVO-compliant. ### Using Signal.pipe instead of RACSubject Since the `Signal` type, like `RACSubject`, is [always “hot”](#hot-signals-are-now-signals), there is a special class method for creating a controllable signal. **The `Signal.pipe` method can replace the use of subjects**, and expresses intent better by separating the observing API from the sending API. To use a pipe, set up observers on the signal as desired, then send values to the sink: ```swift let (signal, sink) = Signal.pipe() signal.observe(next: { value in print(value) }) // Prints each number sendNext(sink, 0) sendNext(sink, 1) sendNext(sink, 2) ``` ### Using SignalProducer.buffer instead of replaying The producer version of [`Signal.pipe`](#using-signalpipe-instead-of-racsubject), **the `SignalProducer.buffer` method can replace replaying** with `RACReplaySubject` or any of the `-replay…` methods. Conceptually, `buffer` creates a (optionally bounded) queue for events, much like `RACReplaySubject`, and replays those events when new `Signal`s are created from the producer. For example, to replay the values of an existing `Signal`, it just needs to be fed into the write end of the buffer: ```swift let signal: Signal let (producer, sink) = SignalProducer.buffer() // Saves observed values in the buffer signal.observe(sink) // Prints each value buffered producer.start(next: { value in print(value) }) ``` ### Using startWithSignal instead of multicasting `RACMulticastConnection` and the `-publish` and `-multicast:` operators were always poorly understood features of RAC 2. In RAC 3, thanks to the `Signal` and `SignalProducer` split, **the `SignalProducer.startWithSignal` method can replace multicasting**. `startWithSignal` allows any number of observers to attach to the created signal _before_ any work is begun—therefore, the work (and any side effects) still occurs just once, but the values can be distributed to multiple interested observers. This fulfills the same purpose of multicasting, in a much clearer and more tightly-scoped way. For example: ```swift let producer = timer(5, onScheduler: QueueScheduler.mainQueueScheduler).take(3) // Starts just one timer, sending the dates to two different observers as they // are generated. producer.startWithSignal { signal, disposable in signal.observe(next: { date in print(date) }) signal.observe(someOtherObserver) } ``` ## Minor changes ### Disposable changes [Disposables](ReactiveCocoa/Swift/Disposable.swift) haven’t changed much overall in RAC 3, besides the addition of a protocol and minor naming tweaks. The biggest change to be aware of is that **setting `SerialDisposable.innerDisposable` will always dispose of the previous value**, which helps prevent resource leaks or logic errors from forgetting to dispose manually. ### Scheduler changes RAC 3 replaces the multipurpose `RACScheduler` class with two protocols, [`SchedulerType` and `DateSchedulerType`](ReactiveCocoa/Swift/Scheduler.swift), with multiple implementations of each. This design indicates and enforces the capabilities of each scheduler using the type system. In addition, **the `mainThreadScheduler` has been replaced with `UIScheduler` and `QueueScheduler.mainQueueScheduler`**. The `UIScheduler` type runs operations as soon as possible on the main thread—even synchronously (if possible), thereby replacing RAC 2’s `-performOnMainThread` operator—while `QueueScheduler.mainQueueScheduler` will always enqueue work after the current run loop iteration, and can be used to schedule work at a future date. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/CONTRIBUTING.md ================================================ We love that you're interested in contributing to this project! To make the process as painless as possible, we have just a couple of guidelines that should make life easier for everyone involved. ## Prefer Pull Requests If you know exactly how to implement the feature being suggested or fix the bug being reported, please open a pull request instead of an issue. Pull requests are easier than patches or inline code blocks for discussing and merging the changes. If you can't make the change yourself, please open an issue after making sure that one isn't already logged. We are also happy to help you in our Slack room (ping [@ReactiveCocoa](https://twitter.com/ReactiveCocoa) for an invitation). ## Contributing Code Fork this repository, make it awesomer (preferably in a branch named for the topic), send a pull request! All code contributions should match our coding conventions ([Objective-c](https://github.com/github/objective-c-conventions) and [Swift](https://github.com/github/swift-style-guide)). If your particular case is not described in the coding convention, check the ReactiveCocoa codebase. Thanks for contributing! :boom::camel: ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Cartfile ================================================ github "antitypical/Result" ~> 2.1.3 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Cartfile.private ================================================ github "jspahrsummers/xcconfigs" "1ef9763" github "sharplet/Quick" "xcode-8" github "Quick/Nimble" "188caeb" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Cartfile.resolved ================================================ github "Quick/Nimble" "188caeb094bc342614d8a5c706cd8bb9a6c355eb" github "sharplet/Quick" "e2cfb86c8379417c9272bb853e9f0c407167d486" github "antitypical/Result" "2.1.3" github "jspahrsummers/xcconfigs" "1ef97639ffbe041da0b1392b2114fa19b922a7a1" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/.gitignore ================================================ .DS_Store xcuserdata/ build/ .idea DerivedData/ Nimble.framework.zip # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ .build/ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/.ruby-version ================================================ system ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-02-25-a ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/.travis.yml ================================================ osx_image: xcode7.3 language: generic matrix: include: - os: osx sudo: required env: TYPE=podspec - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=9.0 TYPE=tvos - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx - os: osx env: TYPE=swiftpm - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=10.0 TYPE=ios osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=10.0 TYPE=tvos osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.12 TYPE=osx osx_image: xcode8 - os: linux dist: trusty sudo: required env: TYPE=swiftpm install: - if [[ "$TYPE" == "swiftpm" ]]; then eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)"; fi - if [[ "$TYPE" == "podspec" ]]; then sudo gem install bundler; bundle install; fi script: - ./test $TYPE ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/CONTRIBUTING.md ================================================ - [Welcome to Nimble!](#welcome-to-nimble!) - [Reporting Bugs](#reporting-bugs) - [Building the Project](#building-the-project) - [Pull Requests](#pull-requests) - [Style Conventions](#style-conventions) - [Core Members](#core-members) - [Code of Conduct](#code-of-conduct) # Welcome to Nimble! We're building a testing framework for a new generation of Swift and Objective-C developers. Nimble should be easy to use and easy to maintain. Let's keep things simple and well-tested. **tl;dr:** If you've added a file to the project, make sure it's included in both the OS X and iOS targets. ## Reporting Bugs Nothing is off-limits. If you're having a problem, we want to hear about it. - See a crash? File an issue. - Code isn't compiling, but you don't know why? Sounds like you should submit a new issue, bud. - Went to the kitchen, only to forget why you went in the first place? Better submit an issue. Be sure to include in your issue: - Your Xcode version (eg - Xcode 7.0.1 7A1001) - Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`) - What are the steps to reproduce this issue? - What platform are you using? (eg - OS X, iOS, watchOS, tvOS) - If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration - Are you using carthage or cocoapods? ## Building the Project - Use `Nimble.xcodeproj` to work on Nimble. ## Pull Requests - Nothing is trivial. Submit pull requests for anything: typos, whitespace, you name it. - Not all pull requests will be merged, but all will be acknowledged. If no one has provided feedback on your request, ping one of the owners by name. - Make sure your pull request includes any necessary updates to the README or other documentation. - Be sure the unit tests for both the OS X and iOS targets of Nimble before submitting your pull request. You can run all the OS X & iOS unit tests using `./test`. - If you've added a file to the project, make sure it's included in both the OS X and iOS targets. - The `master` branch will always support the stable Xcode version. Other branches will point to their corresponding versions they support. - If you're making a configuration change, make sure to edit both the xcode project and the podspec file. ### Style Conventions - Indent using 4 spaces. - Keep lines 100 characters or shorter. Break long statements into shorter ones over multiple lines. - In Objective-C, use `#pragma mark -` to mark public, internal, protocol, and superclass methods. ## Core Members If a few of your pull requests have been merged, and you'd like a controlling stake in the project, file an issue asking for write access to the repository. ### Code of Conduct Your conduct as a core member is your own responsibility, but here are some "ground rules": - Feel free to push whatever you want to master, and (if you have ownership permissions) to create any repositories you'd like. Ideally, however, all changes should be submitted as GitHub pull requests. No one should merge their own pull request, unless no other core members respond for at least a few days. If you'd like to create a new repository, it'd be nice if you created a GitHub issue and gathered some feedback first. - It'd be awesome if you could review, provide feedback on, and close issues or pull requests submitted to the project. Please provide kind, constructive feedback. Please don't be sarcastic or snarky. ### Creating a Release The process is relatively straight forward, but here's is a useful checklist for tagging: - Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` - Run the release script: `./script/release A.B.C release-notes-file` - The script will prompt you to create a new [GitHub release](https://github.com/Quick/Nimble/releases). - Use the same release notes you created for the tag, but tweak up formatting for GitHub. - Update [Quick](https://github.com/Quick/Quick) - Update Quick's submodule reference to the newly released Nimble version - Update Nimble version in `README.md` and Documentation in [Quick](https://github.com/Quick/Quick) if it's not a patch version update. - Announce! ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Gemfile ================================================ # A sample Gemfile source "https://rubygems.org" gem 'cocoapods' ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/LICENSE.md ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2014 Quick Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.podspec ================================================ Pod::Spec.new do |s| s.name = "Nimble" s.version = "4.1.0" s.summary = "A Matcher Framework for Swift and Objective-C" s.description = <<-DESC Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar. DESC s.homepage = "https://github.com/Quick/Nimble" s.license = { :type => "Apache 2.0", :file => "LICENSE.md" } s.author = "Quick Contributors" s.ios.deployment_target = "7.0" s.osx.deployment_target = "10.9" s.tvos.deployment_target = "9.0" s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } s.source_files = "Sources/Nimble/**/*.{swift,h,m}" s.private_header_files = "Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h" s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" s.weak_framework = "XCTest" s.requires_arc = true s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"' } end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; }; 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; }; 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; }; 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531; remoteInfo = "Nimble-tvOS"; }; 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = ""; }; 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = ""; }; 1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = ""; }; 1F1871BC1CA89EDB00A34BF2 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = ""; }; 1F1871BD1CA89EDB00A34BF2 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = ""; }; 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = ""; }; 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = ""; }; 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBStringify.h; sourceTree = ""; }; 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBStringify.m; sourceTree = ""; }; 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBExpectation.swift; sourceTree = ""; }; 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBObjCMatcher.swift; sourceTree = ""; }; 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExceptionCapture.swift; sourceTree = ""; }; 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = ""; }; 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = ""; }; 1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = ""; }; 1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = ""; }; 1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.markdown; }; 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = ""; }; 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = ""; }; 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = ""; }; 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = ""; }; 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = ""; }; 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = ""; }; 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = ""; }; 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = ""; }; 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = ""; }; 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = ""; }; 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = ""; }; 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = ""; }; 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = ""; }; 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = ""; }; 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = ""; }; 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = ""; }; 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = ""; }; 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = ""; }; 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = ""; }; 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = ""; }; 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = ""; }; 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = ""; }; 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = ""; }; 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoidTest.swift; sourceTree = ""; }; 1F91DD301C74BF61002C309F /* BeVoid.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoid.swift; sourceTree = ""; }; 1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = ""; }; 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = ""; }; 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = ""; }; 1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = ""; }; 1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = ""; }; 1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = ""; }; 1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = ""; }; 1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = ""; }; 1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = ""; }; 1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = ""; }; 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = ""; }; 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = ""; }; 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = ""; }; 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = ""; }; 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = ""; }; 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = ""; }; 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = ""; }; 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotificationTest.swift; sourceTree = ""; }; 1FCF91521C61C8A400B15DCB /* PostNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotification.swift; sourceTree = ""; }; 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = ""; }; 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = ""; }; 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = ""; }; 1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; 1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = ""; }; 1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = ""; }; 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = ""; }; 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = ""; }; 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = ""; }; 1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = ""; }; 1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = ""; }; 1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = ""; }; 1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = ""; }; 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = ""; }; 1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; 1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; 1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = ""; }; 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = ""; }; 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = ""; }; 29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = ""; }; 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; 472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = ""; }; 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = ""; }; 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = ""; }; 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = ""; }; 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = ""; }; 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjcStringersTest.m; sourceTree = ""; }; 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = ""; }; 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = ""; }; AE4BA9AC1C88DDB500B73906 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; AE7ADE441C80BF8000B94CD3 /* MatchError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchError.swift; sourceTree = ""; }; AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchErrorTest.swift; sourceTree = ""; }; DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; DDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = ""; }; DDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = ""; }; DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = ""; }; F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+Register.m"; sourceTree = ""; }; F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CurrentTestCaseTracker.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 1F1A74251940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74311940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1511BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA9195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB4195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1F14FB61194180A7009F2A08 /* Helpers */ = { isa = PBXGroup; children = ( 1F14FB63194180C5009F2A08 /* utils.swift */, 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */, 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */, ); path = Helpers; sourceTree = ""; }; 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */ = { isa = PBXGroup; children = ( F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */, 1F1871BC1CA89EDB00A34BF2 /* DSL.h */, 1F1871BD1CA89EDB00A34BF2 /* DSL.m */, 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */, 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */, 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */, 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */, 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */, 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */, F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */, ); path = ObjectiveC; sourceTree = ""; }; 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */ = { isa = PBXGroup; children = ( 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */, ); path = NonObjectiveC; sourceTree = ""; }; 1F1A741F1940169200FFFC47 = { isa = PBXGroup; children = ( 1F2752D119445B8400052A26 /* README.md */, 1F1A742B1940169200FFFC47 /* Nimble */, 1F1A74381940169200FFFC47 /* NimbleTests */, 1F1A742A1940169200FFFC47 /* Products */, ); sourceTree = ""; }; 1F1A742A1940169200FFFC47 /* Products */ = { isa = PBXGroup; children = ( 1F1A74291940169200FFFC47 /* Nimble.framework */, 1F1A74341940169200FFFC47 /* NimbleTests.xctest */, 1F925EAD195C0D6300ED456B /* Nimble.framework */, 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, ); name = Products; sourceTree = ""; }; 1F1A742B1940169200FFFC47 /* Nimble */ = { isa = PBXGroup; children = ( 1FD8CD041968AB07008ED995 /* Adapters */, 1FD8CD081968AB07008ED995 /* DSL.swift */, DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */, 1FD8CD091968AB07008ED995 /* Expectation.swift */, 1FD8CD0A1968AB07008ED995 /* Expression.swift */, 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */, 1F1A742D1940169200FFFC47 /* Info.plist */, 1FD8CD0C1968AB07008ED995 /* Matchers */, 1F1A742E1940169200FFFC47 /* Nimble.h */, 1FD8CD241968AB07008ED995 /* Utils */, ); name = Nimble; path = Sources/Nimble; sourceTree = ""; }; 1F1A74381940169200FFFC47 /* NimbleTests */ = { isa = PBXGroup; children = ( 1F925EE5195C121200ED456B /* AsynchronousTest.swift */, 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */, 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */, 1FFD729A1963FC8200CD29A2 /* objc */, 1F14FB61194180A7009F2A08 /* Helpers */, 1F925EE3195C11B000ED456B /* Matchers */, 1F1A74391940169200FFFC47 /* Supporting Files */, ); name = NimbleTests; path = Tests/Nimble; sourceTree = ""; }; 1F1A74391940169200FFFC47 /* Supporting Files */ = { isa = PBXGroup; children = ( 1F1A743A1940169200FFFC47 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 1F925EE3195C11B000ED456B /* Matchers */ = { isa = PBXGroup; children = ( DD72EC631A93874A002F7651 /* AllPassTest.swift */, 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */, 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */, 1F925EF5195C147800ED456B /* BeCloseToTest.swift */, 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */, 1F925EFB195C186800ED456B /* BeginWithTest.swift */, 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */, 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */, DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */, 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */, 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */, 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */, 1F925EEE195C136500ED456B /* BeLogicalTest.swift */, 1F925EF8195C175000ED456B /* BeNilTest.swift */, 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */, 1F925F01195C189500ED456B /* ContainTest.swift */, 1F925EFE195C187600ED456B /* EndWithTest.swift */, 1F925F04195C18B700ED456B /* EqualTest.swift */, 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */, DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */, 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */, 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */, 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */, 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */, AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD041968AB07008ED995 /* Adapters */ = { isa = PBXGroup; children = ( 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */, 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */, 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */, 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */, 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */, 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */, 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */, ); path = Adapters; sourceTree = ""; }; 1FD8CD0C1968AB07008ED995 /* Matchers */ = { isa = PBXGroup; children = ( DDB1BC781A92235600F743C3 /* AllPass.swift */, 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */, 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */, 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */, 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */, 1FD8CD101968AB07008ED995 /* BeEmpty.swift */, 1FD8CD111968AB07008ED995 /* BeginWith.swift */, 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */, 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */, 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */, 1FD8CD151968AB07008ED995 /* BeLessThan.swift */, 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */, 1FD8CD171968AB07008ED995 /* BeLogical.swift */, 1FD8CD181968AB07008ED995 /* BeNil.swift */, 1F91DD301C74BF61002C309F /* BeVoid.swift */, 1FD8CD1A1968AB07008ED995 /* Contain.swift */, 1FD8CD1B1968AB07008ED995 /* EndWith.swift */, 1FD8CD1C1968AB07008ED995 /* Equal.swift */, 472FD1341B9E085700C7B8DA /* HaveCount.swift */, DDB4D5EC19FE43C200E9D9FE /* Match.swift */, 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */, 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */, AE7ADE441C80BF8000B94CD3 /* MatchError.swift */, 1FCF91521C61C8A400B15DCB /* PostNotification.swift */, 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */, 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */, 29EA59651B551EE6002D767E /* ThrowError.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD241968AB07008ED995 /* Utils */ = { isa = PBXGroup; children = ( 1FD8CD251968AB07008ED995 /* Functional.swift */, 1FD8CD261968AB07008ED995 /* Async.swift */, 1FD8CD271968AB07008ED995 /* SourceLocation.swift */, 1FD8CD281968AB07008ED995 /* Stringers.swift */, AE4BA9AC1C88DDB500B73906 /* Errors.swift */, ); path = Utils; sourceTree = ""; }; 1FFD729A1963FC8200CD29A2 /* objc */ = { isa = PBXGroup; children = ( 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */, 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */, 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */, 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */, 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */, 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */, 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */, 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */, 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */, 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */, 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */, 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */, 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */, 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */, 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */, 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */, 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */, 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */, 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */, 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */, 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */, 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */, 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */, 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */, 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */, DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */, 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */, 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */, ); path = objc; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 1F1A74261940169200FFFC47 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */, 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */, 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */, 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1521BDCA0CE00C3A531 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */, 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */, 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */, 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAA195C0D6300ED456B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */, 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */, 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */, 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 1F1A74281940169200FFFC47 /* Nimble-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */; buildPhases = ( 1F1A74241940169200FFFC47 /* Sources */, 1F1A74251940169200FFFC47 /* Frameworks */, 1F1A74261940169200FFFC47 /* Headers */, 1F1A74271940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-iOS"; productName = "Nimble-iOS"; productReference = 1F1A74291940169200FFFC47 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */; buildPhases = ( 1F1A74301940169200FFFC47 /* Sources */, 1F1A74311940169200FFFC47 /* Frameworks */, 1F1A74321940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( 1F1A74371940169200FFFC47 /* PBXTargetDependency */, 1F925EA5195C0C8500ED456B /* PBXTargetDependency */, 1F925EA7195C0C8500ED456B /* PBXTargetDependency */, 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */, ); name = "Nimble-iOSTests"; productName = "Nimble-iOSTests"; productReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */; buildPhases = ( 1F5DF1501BDCA0CE00C3A531 /* Sources */, 1F5DF1511BDCA0CE00C3A531 /* Frameworks */, 1F5DF1521BDCA0CE00C3A531 /* Headers */, 1F5DF1531BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-tvOS"; productName = "Nimble-tvOS"; productReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */; buildPhases = ( 1F5DF15A1BDCA0CE00C3A531 /* Sources */, 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */, 1F5DF15C1BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */, ); name = "Nimble-tvOSTests"; productName = "Nimble-tvOSTests"; productReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F925EAC195C0D6300ED456B /* Nimble-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */; buildPhases = ( 1F925EA8195C0D6300ED456B /* Sources */, 1F925EA9195C0D6300ED456B /* Frameworks */, 1F925EAA195C0D6300ED456B /* Headers */, 1F925EAB195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-OSX"; productName = "Nimble-OSX"; productReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */; buildPhases = ( 1F925EB3195C0D6300ED456B /* Sources */, 1F925EB4195C0D6300ED456B /* Frameworks */, 1F925EB5195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( 1F925EBA195C0D6300ED456B /* PBXTargetDependency */, 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */, 1F9B7C001968AD760094EB8F /* PBXTargetDependency */, 1F9B7C021968AD820094EB8F /* PBXTargetDependency */, ); name = "Nimble-OSXTests"; productName = "Nimble-OSXTests"; productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 1F1A74201940169200FFFC47 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0710; ORGANIZATIONNAME = "Jeff Hui"; TargetAttributes = { 1F1A74281940169200FFFC47 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 1F1A74331940169200FFFC47 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 1F1A74281940169200FFFC47; }; 1F5DF1541BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F5DF15D1BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F925EAC195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 1F925EB6195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 1F925EAC195C0D6300ED456B; }; }; }; buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 1F1A741F1940169200FFFC47; productRefGroup = 1F1A742A1940169200FFFC47 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 1F1A74281940169200FFFC47 /* Nimble-iOS */, 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, 1F925EAC195C0D6300ED456B /* Nimble-OSX */, 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */, 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 1F1A74271940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74321940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1531BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15C1BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAB195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB5195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 1F1A74241940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */, 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */, AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */, DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */, 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */, 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */, 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */, 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */, AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */, 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */, 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74301940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */, 1F14FB64194180C5009F2A08 /* utils.swift in Sources */, DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F02195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1501BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */, 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */, 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */, 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */, 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */, 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */, 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */, 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */, 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */, 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */, AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */, 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */, 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */, 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */, 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */, 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */, 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */, 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */, 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */, 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */, 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */, 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */, 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */, 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */, AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */, 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */, 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */, 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */, 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */, 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */, 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */, 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */, 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */, 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */, 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */, 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */, 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */, 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */, 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */, 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15A1BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */, CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */, 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */, 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */, CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */, CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */, CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */, 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */, 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */, 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */, 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */, 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */, CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */, 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */, AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */, 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */, 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */, CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */, CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */, CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */, 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */, 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */, 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */, 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */, CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */, 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */, 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */, 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */, 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */, 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */, CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */, 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */, CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */, 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */, CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */, 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */, CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */, CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */, 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */, 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */, 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */, CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */, 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */, CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */, 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */, CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */, 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */, CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */, CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */, CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */, CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */, CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA8195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */, 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */, AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */, 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */, DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */, 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */, 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */, 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */, AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */, 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */, 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB3195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */, 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */, DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F03195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 1F1A74371940169200FFFC47 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */; }; 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */; targetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */; }; 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */; }; 1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */; }; 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1F1A743D1940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; 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_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_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 1F1A743E1940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 1F1A74401940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74411940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; }; name = Release; }; 1F1A74431940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74441940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; }; name = Release; }; 1F5DF1661BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1671BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { 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 = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F5DF1681BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1691BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F925EC1195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; 1F925EC2195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; 1F925EC4195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F925EC5195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A743D1940169200FFFC47 /* Debug */, 1F1A743E1940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74401940169200FFFC47 /* Debug */, 1F1A74411940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74431940169200FFFC47 /* Debug */, 1F1A74441940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1661BDCA0CE00C3A531 /* Debug */, 1F5DF1671BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1681BDCA0CE00C3A531 /* Debug */, 1F5DF1691BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC1195C0D6300ED456B /* Debug */, 1F925EC2195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC4195C0D6300ED456B /* Debug */, 1F925EC5195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 1F1A74201940169200FFFC47 /* Project object */; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Package.swift ================================================ import PackageDescription let package = Package( name: "Nimble" ) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/README.md ================================================ # Nimble Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by [Cedar](https://github.com/pivotal/cedar). ```swift // Swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` # How to Use Nimble **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest) - [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto) - [Custom Failure Messages](#custom-failure-messages) - [Type Checking](#type-checking) - [Operator Overloads](#operator-overloads) - [Lazily Computed Values](#lazily-computed-values) - [C Primitives](#c-primitives) - [Asynchronous Expectations](#asynchronous-expectations) - [Objective-C Support](#objective-c-support) - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) - [Built-in Matcher Functions](#built-in-matcher-functions) - [Equivalence](#equivalence) - [Identity](#identity) - [Comparisons](#comparisons) - [Types/Classes](#typesclasses) - [Truthiness](#truthiness) - [Swift Error Handling](#swift-error-handling) - [Exceptions](#exceptions) - [Collection Membership](#collection-membership) - [Strings](#strings) - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition) - [Verify collection count](#verify-collection-count) - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) - [Writing Your Own Matchers](#writing-your-own-matchers) - [Lazy Evaluation](#lazy-evaluation) - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - [Customizing Failure Messages](#customizing-failure-messages) - [Supporting Objective-C](#supporting-objective-c) - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers) - [Installing Nimble](#installing-nimble) - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) - [Using Nimble without XCTest](#using-nimble-without-xctest) # Some Background: Expressing Outcomes Using Assertions in XCTest Apple's Xcode includes the XCTest framework, which provides assertion macros to test whether code behaves properly. For example, to assert that `1 + 1 = 2`, XCTest has you write: ```swift // Swift XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two") ``` Or, in Objective-C: ```objc // Objective-C XCTAssertEqual(1 + 1, 2, @"expected one plus one to equal two"); ``` XCTest assertions have a couple of drawbacks: 1. **Not enough macros.** There's no easy way to assert that a string contains a particular substring, or that a number is less than or equal to another. 2. **It's hard to write asynchronous tests.** XCTest forces you to write a lot of boilerplate code. Nimble addresses these concerns. # Nimble: Expectations Using `expect(...).to` Nimble allows you to express expectations using a natural, easily understood language: ```swift // Swift import Nimble expect(seagull.squawk).to(equal("Squee!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).to(equal(@"Squee!")); ``` > The `expect` function autocompletes to include `file:` and `line:`, but these parameters are optional. Use the default values to have Xcode highlight the correct line when an expectation is not met. To perform the opposite expectation--to assert something is *not* equal--use `toNot` or `notTo`: ```swift // Swift import Nimble expect(seagull.squawk).toNot(equal("Oh, hello there!")) expect(seagull.squawk).notTo(equal("Oh, hello there!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).toNot(equal(@"Oh, hello there!")); expect(seagull.squawk).notTo(equal(@"Oh, hello there!")); ``` ## Custom Failure Messages Would you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text: ```swift // Swift expect(1 + 1).to(equal(3)) // failed - expected to equal <3>, got <2> expect(1 + 1).to(equal(3), description: "Make sure libKindergartenMath is loaded") // failed - Make sure libKindergartenMath is loaded // expected to equal <3>, got <2> ``` Or the *WithDescription version in Objective-C: ```objc // Objective-C @import Nimble; expect(@(1+1)).to(equal(@3)); // failed - expected to equal <3.0000>, got <2.0000> expect(@(1+1)).toWithDescription(equal(@3), @"Make sure libKindergartenMath is loaded"); // failed - Make sure libKindergartenMath is loaded // expected to equal <3.0000>, got <2.0000> ``` ## Type Checking Nimble makes sure you don't compare two types that don't match: ```swift // Swift // Does not compile: expect(1 + 1).to(equal("Squee!")) ``` > Nimble uses generics--only available in Swift--to ensure type correctness. That means type checking is not available when using Nimble in Objective-C. :sob: ## Operator Overloads Tired of so much typing? With Nimble, you can use overloaded operators like `==` for equivalence, or `>` for comparisons: ```swift // Swift // Passes if squawk does not equal "Hi!": expect(seagull.squawk) != "Hi!" // Passes if 10 is greater than 2: expect(10) > 2 ``` > Operator overloads are only available in Swift, so you won't be able to use this syntax in Objective-C. :broken_heart: ## Lazily Computed Values The `expect` function doesn't evaluate the value it's given until it's time to match. So Nimble can test whether an expression raises an exception once evaluated: ```swift // Swift // Note: Swift currently doesn't have exceptions. // Only Objective-C code can raise exceptions // that Nimble will catch. // (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) let exception = NSException( name: NSInternalInconsistencyException, reason: "Not enough fish in the sea.", userInfo: ["something": "is fishy"]) expect { exception.raise() }.to(raiseException()) // Also, you can customize raiseException to be more specific expect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException)) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea")) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea", userInfo: ["something": "is fishy"])) ``` Objective-C works the same way, but you must use the `expectAction` macro when making an expectation on an expression that has no return value: ```objc // Objective-C NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Not enough fish in the sea." userInfo:nil]; expectAction(^{ [exception raise]; }).to(raiseException()); // Use the property-block syntax to be more specific. expectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea"). userInfo(@{@"something": @"is fishy"})); // You can also pass a block for custom matching of the raised exception expectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(NSInternalInconsistencyException)); })); ``` ## C Primitives Some testing frameworks make it hard to test primitive C values. In Nimble, it just works: ```swift // Swift let actual: CInt = 1 let expectedValue: CInt = 1 expect(actual).to(equal(expectedValue)) ``` In fact, Nimble uses type inference, so you can write the above without explicitly specifying both types: ```swift // Swift expect(1 as CInt).to(equal(1)) ``` > In Objective-C, Nimble only supports Objective-C objects. To make expectations on primitive C values, wrap then in an object literal: ```objc expect(@(1 + 1)).to(equal(@2)); ``` ## Asynchronous Expectations In Nimble, it's easy to make expectations on values that are updated asynchronously. Just use `toEventually` or `toEventuallyNot`: ```swift // Swift dispatch_async(dispatch_get_main_queue()) { ocean.add("dolphins") ocean.add("whales") } expect(ocean).toEventually(contain("dolphins", "whales")) ``` ```objc // Objective-C dispatch_async(dispatch_get_main_queue(), ^{ [ocean add:@"dolphins"]; [ocean add:@"whales"]; }); expect(ocean).toEventually(contain(@"dolphins", @"whales")); ``` Note: toEventually triggers its polls on the main thread. Blocking the main thread will cause Nimble to stop the run loop. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In the above example, `ocean` is constantly re-evaluated. If it ever contains dolphins and whales, the expectation passes. If `ocean` still doesn't contain them, even after being continuously re-evaluated for one whole second, the expectation fails. Sometimes it takes more than a second for a value to update. In those cases, use the `timeout` parameter: ```swift // Swift // Waits three seconds for ocean to contain "starfish": expect(ocean).toEventually(contain("starfish"), timeout: 3) ``` ```objc // Objective-C // Waits three seconds for ocean to contain "starfish": expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); ``` You can also provide a callback by using the `waitUntil` function: ```swift // Swift waitUntil { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(0.5) done() } ``` ```objc // Objective-C waitUntil(^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:0.5]; done(); }); ``` `waitUntil` also optionally takes a timeout parameter: ```swift // Swift waitUntil(timeout: 10) { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(1) done() } ``` ```objc // Objective-C waitUntilTimeout(10, ^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:1]; done(); }); ``` Note: waitUntil triggers its timeout code on the main thread. Blocking the main thread will cause Nimble to stop the run loop to continue. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In some cases (e.g. when running on slower machines) it can be useful to modify the default timeout and poll interval values. This can be done as follows: ```swift // Swift // Increase the global timeout to 5 seconds: Nimble.AsyncDefaults.Timeout = 5 // Slow the polling interval to 0.1 seconds: Nimble.AsyncDefaults.PollInterval = 0.1 ``` ## Objective-C Support Nimble has full support for Objective-C. However, there are two things to keep in mind when using Nimble in Objective-C: 1. All parameters passed to the `expect` function, as well as matcher functions like `equal`, must be Objective-C objects: ```objc // Objective-C @import Nimble; expect(@(1 + 1)).to(equal(@2)); expect(@"Hello world").to(contain(@"world")); ``` 2. To make an expectation on an expression that does not return a value, such as `-[NSException raise]`, use `expectAction` instead of `expect`: ```objc // Objective-C expectAction(^{ [exception raise]; }).to(raiseException()); ``` ## Disabling Objective-C Shorthand Nimble provides a shorthand for expressing expectations using the `expect` function. To disable this shorthand in Objective-C, define the `NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before importing Nimble: ```objc #define NIMBLE_DISABLE_SHORT_SYNTAX 1 @import Nimble; NMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@"Squee!")); ``` > Disabling the shorthand is useful if you're testing functions with names that conflict with Nimble functions, such as `expect` or `equal`. If that's not the case, there's no point in disabling the shorthand. # Built-in Matcher Functions Nimble includes a wide variety of matcher functions. ## Equivalence ```swift // Swift // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) expect(actual) == expected // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) expect(actual) != expected ``` ```objc // Objective-C // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) ``` Values must be `Equatable`, `Comparable`, or subclasses of `NSObject`. `equal` will always fail when used to compare one or more `nil` values. ## Identity ```swift // Swift // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)) expect(actual) === expected // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)) expect(actual) !== expected ``` Its important to remember that `beIdenticalTo` only makes sense when comparing types with reference semantics, which have a notion of identity. In Swift, that means a `class`. This matcher will not work with types with value semantics such as `struct` or `enum`. If you need to compare two value types, you can either compare individual properties or if it makes sense to do so, make your type implement `Equatable` and use Nimble's equivalence matchers instead. ```objc // Objective-C // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)); // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)); ``` ## Comparisons ```swift // Swift expect(actual).to(beLessThan(expected)) expect(actual) < expected expect(actual).to(beLessThanOrEqualTo(expected)) expect(actual) <= expected expect(actual).to(beGreaterThan(expected)) expect(actual) > expected expect(actual).to(beGreaterThanOrEqualTo(expected)) expect(actual) >= expected ``` ```objc // Objective-C expect(actual).to(beLessThan(expected)); expect(actual).to(beLessThanOrEqualTo(expected)); expect(actual).to(beGreaterThan(expected)); expect(actual).to(beGreaterThanOrEqualTo(expected)); ``` > Values given to the comparison matchers above must implement `Comparable`. Because of how computers represent floating point numbers, assertions that two floating point numbers be equal will sometimes fail. To express that two numbers should be close to one another within a certain margin of error, use `beCloseTo`: ```swift // Swift expect(actual).to(beCloseTo(expected, within: delta)) ``` ```objc // Objective-C expect(actual).to(beCloseTo(expected).within(delta)); ``` For example, to assert that `10.01` is close to `10`, you can write: ```swift // Swift expect(10.01).to(beCloseTo(10, within: 0.1)) ``` ```objc // Objective-C expect(@(10.01)).to(beCloseTo(@10).within(0.1)); ``` There is also an operator shortcut available in Swift: ```swift // Swift expect(actual) ≈ expected expect(actual) ≈ (expected, delta) ``` (Type Option-x to get ≈ on a U.S. keyboard) The former version uses the default delta of 0.0001. Here is yet another way to do this: ```swift // Swift expect(actual) ≈ expected ± delta expect(actual) == expected ± delta ``` (Type Option-Shift-= to get ± on a U.S. keyboard) If you are comparing arrays of floating point numbers, you'll find the following useful: ```swift // Swift expect([0.0, 2.0]) ≈ [0.0001, 2.0001] expect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1)) ``` > Values given to the `beCloseTo` matcher must be coercable into a `Double`. ## Types/Classes ```swift // Swift // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)) // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)) ``` ```objc // Objective-C // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)); // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)); ``` > Instances must be Objective-C objects: subclasses of `NSObject`, or Swift objects bridged to Objective-C with the `@objc` prefix. For example, to assert that `dolphin` is a kind of `Mammal`: ```swift // Swift expect(dolphin).to(beAKindOf(Mammal)) ``` ```objc // Objective-C expect(dolphin).to(beAKindOf([Mammal class])); ``` > `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`. ## Truthiness ```swift // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()) // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()) // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()) // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()) // Passes if actual is nil: expect(actual).to(beNil()) ``` ```objc // Objective-C // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()); // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()); // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()); // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()); // Passes if actual is nil: expect(actual).to(beNil()); ``` ## Swift Error Handling If you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown. ```swift // Swift // Passes if somethingThatThrows() throws an ErrorType: expect{ try somethingThatThrows() }.to(throwError()) // Passes if somethingThatThrows() throws an error with a given domain: expect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in expect(error._domain).to(equal(NSCocoaErrorDomain)) }) // Passes if somethingThatThrows() throws an error with a given case: expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) // Passes if somethingThatThrows() throws an error with a given type: expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) ``` If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. ```swift // Swift let actual: ErrorType = … // Passes if actual contains any error value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum)) // Passes if actual contains the Timeout value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum.Timeout)) // Passes if actual contains an NSError equal to the given one: expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) ``` Note: This feature is only available in Swift. ## Exceptions ```swift // Swift // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name: expect(actual).to(raiseException(named: name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException(named: name, reason: reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect { exception.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(beginWith("a r")) }) ``` ```objc // Objective-C // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name expect(actual).to(raiseException().named(name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException().named(name).reason(reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(@"a r")); })); ``` Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise exceptions that Nimble will catch. ## Collection Membership ```swift // Swift // Passes if all of the expected values are members of actual: expect(actual).to(contain(expected...)) // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()) ``` ```objc // Objective-C // Passes if expected is a member of actual: expect(actual).to(contain(expected)); // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()); ``` > In Swift `contain` takes any number of arguments. The expectation passes if all of them are members of the collection. In Objective-C, `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27). For example, to assert that a list of sea creature names contains "dolphin" and "starfish": ```swift // Swift expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish")) ``` ```objc // Objective-C expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"dolphin")); expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"starfish")); ``` > `contain` and `beEmpty` expect collections to be instances of `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements. To test whether a set of elements is present at the beginning or end of an ordered collection, use `beginWith` and `endWith`: ```swift // Swift // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected...)) // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected...)) ``` ```objc // Objective-C // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected)); // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected)); ``` > `beginWith` and `endWith` expect collections to be instances of `NSArray`, or ordered Swift collections composed of `Equatable` elements. Like `contain`, in Objective-C `beginWith` and `endWith` only support a single argument [for now](https://github.com/Quick/Nimble/issues/27). ## Strings ```swift // Swift // Passes if actual contains substring expected: expect(actual).to(contain(expected)) // Passes if actual begins with substring: expect(actual).to(beginWith(expected)) // Passes if actual ends with substring: expect(actual).to(endWith(expected)) // Passes if actual is an empty string, "": expect(actual).to(beEmpty()) // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ```objc // Objective-C // Passes if actual contains substring expected: expect(actual).to(contain(expected)); // Passes if actual begins with substring: expect(actual).to(beginWith(expected)); // Passes if actual ends with substring: expect(actual).to(endWith(expected)); // Passes if actual is an empty string, "": expect(actual).to(beEmpty()); // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ## Checking if all elements of a collection pass a condition ```swift // Swift // with a custom function: expect([1,2,3,4]).to(allPass({$0 < 5})) // with another matcher: expect([1,2,3,4]).to(allPass(beLessThan(5))) ``` ```objc // Objective-C expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); ``` For Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type. For Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which uses another matcher is available here. ## Verify collection count ```swift // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` ```objc // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` For Swift the actual value must be a `CollectionType` such as array, dictionary or set. For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. ## Matching a value to any of a group of matchers ```swift // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) // in Swift you also have the option to use the || operator to achieve a similar function expect(82).to(beLessThan(50) || beGreaterThan(80)) ``` ```objc // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) ``` Note: This matcher allows you to chain any number of matchers together. This provides flexibility, but if you find yourself chaining many matchers together in one test, consider whether you could instead refactor that single test into multiple, more precisely focused tests for better coverage. # Writing Your Own Matchers In Nimble, matchers are Swift functions that take an expected value and return a `MatcherFunc` closure. Take `equal`, for example: ```swift // Swift public func equal(expectedValue: T?) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(expectedValue)>" return actualExpression.evaluate() == expectedValue } } ``` The return value of a `MatcherFunc` closure is a `Bool` that indicates whether the actual value matches the expectation: `true` if it does, or `false` if it doesn't. > The actual `equal` matcher function does not match when either `actual` or `expected` are nil; the example above has been edited for brevity. Since matchers are just Swift functions, you can define them anywhere: at the top of your test file, in a file shared by all of your tests, or in an Xcode project you distribute to others. > If you write a matcher you think everyone can use, consider adding it to Nimble's built-in set of matchers by sending a pull request! Or distribute it yourself via GitHub. For examples of how to write your own matchers, just check out the [`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Sources/Nimble/Matchers) to see how Nimble's built-in set of matchers are implemented. You can also check out the tips below. ## Lazy Evaluation `actualExpression` is a lazy, memoized closure around the value provided to the `expect` function. The expression can either be a closure or a value directly passed to `expect(...)`. In order to determine whether that value matches, custom matchers should call `actualExpression.evaluate()`: ```swift // Swift public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" return actualExpression.evaluate() == nil } } ``` In the above example, `actualExpression` is not `nil`--it is a closure that returns a value. The value it returns, which is accessed via the `evaluate()` method, may be `nil`. If that value is `nil`, the `beNil` matcher function returns `true`, indicating that the expectation passed. Use `expression.isClosure` to determine if the expression will be invoking a closure to produce its value. ## Type Checking via Swift Generics Using Swift's generics, matchers can constrain the type of the actual value passed to the `expect` function by modifying the return type. For example, the following matcher, `haveDescription`, only accepts actual values that implement the `Printable` protocol. It checks their `description` against the one provided to the matcher function, and passes if they are the same: ```swift // Swift public func haveDescription(description: String) -> MatcherFunc { return MatcherFunc { actual, failureMessage in return actual.evaluate().description == description } } ``` ## Customizing Failure Messages By default, Nimble outputs the following failure message when an expectation fails: ``` expected to match, got <\(actual)> ``` You can customize this message by modifying the `failureMessage` struct from within your `MatcherFunc` closure. To change the verb "match" to something else, update the `postfixMessage` property: ```swift // Swift // Outputs: expected to be under the sea, got <\(actual)> failureMessage.postfixMessage = "be under the sea" ``` You can change how the `actual` value is displayed by updating `failureMessage.actualValue`. Or, to remove it altogether, set it to `nil`: ```swift // Swift // Outputs: expected to be under the sea failureMessage.actualValue = nil failureMessage.postfixMessage = "be under the sea" ``` ## Supporting Objective-C To use a custom matcher written in Swift from Objective-C, you'll have to extend the `NMBObjCMatcher` class, adding a new class method for your custom matcher. The example below defines the class method `+[NMBObjCMatcher beNilMatcher]`: ```swift // Swift extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualBlock, failureMessage, location in let block = ({ actualBlock() as NSObject? }) let expr = Expression(expression: block, location: location) return beNil().matches(expr, failureMessage: failureMessage) } } } ``` The above allows you to use the matcher from Objective-C: ```objc // Objective-C expect(actual).to([NMBObjCMatcher beNilMatcher]()); ``` To make the syntax easier to use, define a C function that calls the class method: ```objc // Objective-C FOUNDATION_EXPORT id beNil() { return [NMBObjCMatcher beNilMatcher]; } ``` ### Properly Handling `nil` in Objective-C Matchers When supporting Objective-C, make sure you handle `nil` appropriately. Like [Cedar](https://github.com/pivotal/cedar/issues/100), **most matchers do not match with nil**. This is to bring prevent test writers from being surprised by `nil` values where they did not expect them. Nimble provides the `beNil` matcher function for test writer that want to make expectations on `nil` objects: ```objc // Objective-C expect(nil).to(equal(nil)); // fails expect(nil).to(beNil()); // passes ``` If your matcher does not want to match with nil, you use `NonNilMatcherFunc` and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will automatically generate expected value failure messages when they're nil. ```swift public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.evaluate() let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return beginWith(expected).matches(expr, failureMessage: failureMessage) } } } ``` # Installing Nimble > Nimble can be used on its own, or in conjunction with its sister project, [Quick](https://github.com/Quick/Quick). To install both Quick and Nimble, follow [the installation instructions in the Quick README](https://github.com/Quick/Quick#how-to-install-quick). Nimble can currently be installed in one of two ways: using CocoaPods, or with git submodules. ## Installing Nimble as a Submodule To use Nimble as a submodule to test your iOS or OS X applications, follow these 4 easy steps: 1. Clone the Nimble repository 2. Add Nimble.xcodeproj to the Xcode workspace for your project 3. Link Nimble.framework to your test target 4. Start writing expectations! For more detailed instructions on each of these steps, read [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick). Ignore the steps involving adding Quick to your project in order to install just Nimble. ## Installing Nimble via CocoaPods To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift support for CocoaPods. ```ruby platform :ios, '8.0' source 'https://github.com/CocoaPods/Specs.git' # Whatever pods you need for your app go here target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do use_frameworks! pod 'Nimble', '~> 4.0.0' end ``` Finally run `pod install`. ## Using Nimble without XCTest Nimble is integrated with XCTest to allow it work well when used in Xcode test bundles, however it can also be used in a standalone app. After installing Nimble using one of the above methods, there are two additional steps required to make this work. 1. Create a custom assertion handler and assign an instance of it to the global `NimbleAssertionHandler` variable. For example: ```swift class MyAssertionHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if (!assertion) { print("Expectation failed: \(message.stringValue)") } } } ``` ```swift // Somewhere before you use any assertions NimbleAssertionHandler = MyAssertionHandler() ``` 2. Add a post-build action to fix an issue with the Swift XCTest support library being unnecessarily copied into your app * Edit your scheme in Xcode, and navigate to Build -> Post-actions * Click the "+" icon and select "New Run Script Action" * Open the "Provide build settings from" dropdown and select your target * Enter the following script contents: ``` rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" ``` You can now use Nimble assertions in your code and handle failures as you see fit. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift ================================================ import Foundation /// Protocol for the assertion handler that Nimble uses for all expectations. public protocol AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) } /// Global backing interface for assertions that Nimble creates. /// Defaults to a private test handler that passes through to XCTest. /// /// If XCTest is not available, you must assign your own assertion handler /// before using any matchers, otherwise Nimble will abort the program. /// /// @see AssertionHandler public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() }() ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift ================================================ /// AssertionDispatcher allows multiple AssertionHandlers to receive /// assertion messages. /// /// @warning Does not fully dispatch if one of the handlers raises an exception. /// This is possible with XCTest-based assertion handlers. /// public class AssertionDispatcher: AssertionHandler { let handlers: [AssertionHandler] public init(handlers: [AssertionHandler]) { self.handlers = handlers } public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { for handler in handlers { handler.assert(assertion, message: message, location: location) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift ================================================ import Foundation /// A data structure that stores information about an assertion when /// AssertionRecorder is set as the Nimble assertion handler. /// /// @see AssertionRecorder /// @see AssertionHandler public struct AssertionRecord: CustomStringConvertible { /// Whether the assertion succeeded or failed public let success: Bool /// The failure message the assertion would display on failure. public let message: FailureMessage /// The source location the expectation occurred on. public let location: SourceLocation public var description: String { return "AssertionRecord { success=\(success), message='\(message.stringValue)', location=\(location) }" } } /// An AssertionHandler that silently records assertions that Nimble makes. /// This is useful for testing failure messages for matchers. /// /// @see AssertionHandler public class AssertionRecorder : AssertionHandler { /// All the assertions that were captured by this recorder public var assertions = [AssertionRecord]() public init() {} public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { assertions.append( AssertionRecord( success: assertion, message: message, location: location)) } } /// Allows you to temporarily replace the current Nimble assertion handler with /// the one provided for the scope of the closure. /// /// Once the closure finishes, then the original Nimble assertion handler is restored. /// /// @see AssertionHandler public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { let environment = NimbleEnvironment.activeInstance let oldRecorder = environment.assertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ environment.assertionHandler = oldRecorder })) environment.assertionHandler = tempAssertionHandler capturer.tryBlock { try! closure() } } /// Captures expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about expectations /// that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherFailingExpectations public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler let recorder = AssertionRecorder() let handlers: [AssertionHandler] if silently { handlers = [recorder] } else { handlers = [recorder, previousRecorder] } let dispatcher = AssertionDispatcher(handlers: handlers) withAssertionHandler(dispatcher, closure: closure) return recorder.assertions } /// Captures failed expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about failed /// expectations that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherExpectations /// @see raiseException source for an example use case. public func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let assertions = gatherExpectations(silently: silently, closure: closure) return assertions.filter { assertion in !assertion.success } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift ================================================ import Foundation /// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this /// class' existance internal class NimbleEnvironment { static var activeInstance: NimbleEnvironment { get { let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] if let env = env as? NimbleEnvironment { return env } else { let newEnv = NimbleEnvironment() self.activeInstance = newEnv return newEnv } } set { NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue } } // TODO: eventually migrate the global to this environment value var assertionHandler: AssertionHandler { get { return NimbleAssertionHandler } set { NimbleAssertionHandler = newValue } } #if _runtime(_ObjC) var awaiter: Awaiter init() { awaiter = Awaiter( waitLock: AssertionWaitLock(), asyncQueue: dispatch_get_main_queue(), timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) } #endif } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift ================================================ import Foundation import XCTest /// Default handler for Nimble. This assertion handler passes failures along to /// XCTest. public class NimbleXCTestHandler : AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { recordFailure("\(message.stringValue)\n", location: location) } } } /// Alternative handler for Nimble. This assertion handler passes failures along /// to XCTest by attempting to reduce the failure message size. public class NimbleShortXCTestHandler: AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { let msg: String if let actual = message.actualValue { msg = "got: \(actual) \(message.postfixActual)" } else { msg = "expected \(message.to) \(message.postfixMessage)" } recordFailure("\(msg)\n", location: location) } } } /// Fallback handler in case XCTest is unavailable. This assertion handler will abort /// the program if it is invoked. class NimbleXCTestUnavailableHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") } } #if _runtime(_ObjC) /// Helper class providing access to the currently executing XCTestCase instance, if any @objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { @objc static let sharedInstance = CurrentTestCaseTracker() private(set) var currentTestCase: XCTestCase? @objc func testCaseWillStart(testCase: XCTestCase) { currentTestCase = testCase } @objc func testCaseDidFinish(testCase: XCTestCase) { currentTestCase = nil } } #endif func isXCTestAvailable() -> Bool { #if _runtime(_ObjC) // XCTest is weakly linked and so may not be present return NSClassFromString("XCTestCase") != nil #else return true #endif } private func recordFailure(message: String, location: SourceLocation) { #if _runtime(_ObjC) if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) } else { let msg = "Attempted to report a test failure to XCTest while no test case was running. " + "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() } #else XCTFail("\(message)\n", file: location.file, line: location.line) #endif } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift ================================================ import Foundation #if !_runtime(_ObjC) // swift-corelibs-foundation doesn't provide NSException at all, so provide a dummy class NSException {} #endif // NOTE: This file is not intended to be included in the Xcode project. It // is picked up by the Swift Package Manager during its build process. /// A dummy reimplementation of the `NMBExceptionCapture` class to serve /// as a stand-in for build and runtime environments that don't support /// Objective C. internal class ExceptionCapture { let finally: (() -> Void)? init(handler: ((NSException!) -> Void)?, finally: (() -> Void)?) { self.finally = finally } func tryBlock(unsafeBlock: (() -> Void)) { // We have no way of handling Objective C exceptions in Swift, // so we just go ahead and run the unsafeBlock as-is unsafeBlock() finally?() } } /// Compatibility with the actual Objective-C implementation typealias NMBExceptionCapture = ExceptionCapture ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h ================================================ #import #import SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") @interface CurrentTestCaseTracker : NSObject + (CurrentTestCaseTracker *)sharedInstance; @end @interface CurrentTestCaseTracker (Register) @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h ================================================ #import @class NMBExpectation; @class NMBObjCBeCloseToMatcher; @class NMBObjCRaiseExceptionMatcher; @protocol NMBMatcher; #define NIMBLE_EXPORT FOUNDATION_EXPORT #ifdef NIMBLE_DISABLE_SHORT_SYNTAX #define NIMBLE_SHORT(PROTO, ORIGINAL) #else #define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); } #endif NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT id NMB_equal(id expectedValue); NIMBLE_SHORT(id equal(id expectedValue), NMB_equal(expectedValue)); NIMBLE_EXPORT id NMB_haveCount(id expectedValue); NIMBLE_SHORT(id haveCount(id expectedValue), NMB_haveCount(expectedValue)); NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue), NMB_beCloseTo(expectedValue)); NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); NIMBLE_SHORT(id beAnInstanceOf(Class expectedClass), NMB_beAnInstanceOf(expectedClass)); NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); NIMBLE_SHORT(id beAKindOf(Class expectedClass), NMB_beAKindOf(expectedClass)); NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); NIMBLE_SHORT(id beginWith(id itemElementOrSubstring), NMB_beginWith(itemElementOrSubstring)); NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThan(NSNumber *expectedValue), NMB_beGreaterThan(expectedValue)); NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThanOrEqualTo(NSNumber *expectedValue), NMB_beGreaterThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), NMB_beIdenticalTo(expectedInstance)); NIMBLE_EXPORT id NMB_be(id expectedInstance); NIMBLE_SHORT(id be(id expectedInstance), NMB_be(expectedInstance)); NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), NMB_beLessThan(expectedValue)); NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThanOrEqualTo(NSNumber *expectedValue), NMB_beLessThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beTruthy(void); NIMBLE_SHORT(id beTruthy(void), NMB_beTruthy()); NIMBLE_EXPORT id NMB_beFalsy(void); NIMBLE_SHORT(id beFalsy(void), NMB_beFalsy()); NIMBLE_EXPORT id NMB_beTrue(void); NIMBLE_SHORT(id beTrue(void), NMB_beTrue()); NIMBLE_EXPORT id NMB_beFalse(void); NIMBLE_SHORT(id beFalse(void), NMB_beFalse()); NIMBLE_EXPORT id NMB_beNil(void); NIMBLE_SHORT(id beNil(void), NMB_beNil()); NIMBLE_EXPORT id NMB_beEmpty(void); NIMBLE_SHORT(id beEmpty(void), NMB_beEmpty()); NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; #define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define contain(...) NMB_contain(__VA_ARGS__) #endif NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); NIMBLE_SHORT(id endWith(id itemElementOrSubstring), NMB_endWith(itemElementOrSubstring)); NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), NMB_raiseException()); NIMBLE_EXPORT id NMB_match(id expectedValue); NIMBLE_SHORT(id match(id expectedValue), NMB_match(expectedValue)); NIMBLE_EXPORT id NMB_allPass(id matcher); NIMBLE_SHORT(id allPass(id matcher), NMB_allPass(matcher)); NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); #define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) #endif // In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, // define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout // and action arguments. See https://github.com/Quick/Quick/pull/185 for details. typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void))); typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void))); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); #define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__) #define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__) #define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__) #define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__) #define fail() failWithMessage(@"fail() always fails") #define waitUntilTimeout NMB_waitUntilTimeout #define waitUntil NMB_waitUntil #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m ================================================ #import #import SWIFT_CLASS("_TtC6Nimble7NMBWait") @interface NMBWait : NSObject + (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action; + (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action; @end NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) { return [[NMBExpectation alloc] initWithActualBlock:actualBlock negative:NO file:file line:line]; } NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) { return NMB_expect(^id{ actualBlock(); return nil; }, file, line); } NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) { return [NMBExpectation failWithMessage:msg file:file line:line]; } NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; } NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; } NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; } NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_be(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beTruthy() { return [NMBObjCMatcher beTruthyMatcher]; } NIMBLE_EXPORT id NMB_beFalsy() { return [NMBObjCMatcher beFalsyMatcher]; } NIMBLE_EXPORT id NMB_beTrue() { return [NMBObjCMatcher beTrueMatcher]; } NIMBLE_EXPORT id NMB_beFalse() { return [NMBObjCMatcher beFalseMatcher]; } NIMBLE_EXPORT id NMB_beNil() { return [NMBObjCMatcher beNilMatcher]; } NIMBLE_EXPORT id NMB_beEmpty() { return [NMBObjCMatcher beEmptyMatcher]; } NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; if (itemOrSubstring) { [itemOrSubstringArray addObject:itemOrSubstring]; va_list args; va_start(args, itemOrSubstring); id next; while ((next = va_arg(args, id))) { [itemOrSubstringArray addObject:next]; } va_end(args); } return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; } NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_equal(id expectedValue) { return [NMBObjCMatcher equalMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_haveCount(id expectedValue) { return [NMBObjCMatcher haveCountMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_match(id expectedValue) { return [NMBObjCMatcher matchMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_allPass(id expectedValue) { return [NMBObjCMatcher allPassMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; } NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { return [NMBObjCMatcher raiseExceptionMatcher]; } NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { [NMBWait untilTimeout:timeout file:file line:line action:action]; }; } NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) { return ^(void (^action)(void (^)(void))) { [NMBWait untilFile:file line:line action:action]; }; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h ================================================ #import #import @interface NMBExceptionCapture : NSObject - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally; - (void)tryBlock:(void(^)())unsafeBlock; @end typedef void(^NMBSourceCallbackBlock)(BOOL successful); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m ================================================ #import "NMBExceptionCapture.h" @interface NMBExceptionCapture () @property (nonatomic, copy) void(^handler)(NSException *exception); @property (nonatomic, copy) void(^finally)(); @end @implementation NMBExceptionCapture - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally { self = [super init]; if (self) { self.handler = handler; self.finally = finally; } return self; } - (void)tryBlock:(void(^)())unsafeBlock { @try { unsafeBlock(); } @catch (NSException *exception) { if (self.handler) { self.handler(exception); } } @finally { if (self.finally) { self.finally(); } } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift ================================================ import Foundation #if _runtime(_ObjC) internal struct ObjCMatcherWrapper : Matcher { let matcher: NMBMatcher func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.matches( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.doesNotMatch( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } } // Equivalent to Expectation, but for Nimble's Objective-C interface public class NMBExpectation : NSObject { internal let _actualBlock: () -> NSObject! internal var _negative: Bool internal let _file: FileString internal let _line: UInt internal var _timeout: NSTimeInterval = 1.0 public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { self._actualBlock = actualBlock self._negative = negative self._file = file self._line = line } private var expectValue: Expectation { return expect(_file, line: _line){ self._actualBlock() as NSObject? } } public var withTimeout: (NSTimeInterval) -> NMBExpectation { return ({ timeout in self._timeout = timeout return self }) } public var to: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) }) } public var toWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) }) } public var toNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher) ) }) } public var toNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher), description: description ) }) } public var notTo: (NMBMatcher) -> Void { return toNot } public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } public var toEventually: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toEventuallyNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot } public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } public class func failWithMessage(message: String, file: FileString, line: UInt) { fail(message, location: SourceLocation(file: file, line: line)) } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift ================================================ import Foundation #if _runtime(_ObjC) public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool public class NMBObjCMatcher : NSObject, NMBMatcher { let _match: MatcherBlock let _doesNotMatch: MatcherBlock let canMatchNil: Bool public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) { self.canMatchNil = canMatchNil self._match = matcher self._doesNotMatch = notMatcher } public convenience init(matcher: MatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: MatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in return !matcher(actualExpression: actualExpression, failureMessage: failureMessage) })) } public convenience init(matcher: FullMatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false) }), notMatcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true) })) } private func canMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { do { if !canMatchNil { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return false } } } catch let error { failureMessage.actualValue = "an unexpected error thrown: \(error)" return false } return true } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _match( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _doesNotMatch( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h ================================================ @class NSString; /** * Returns a string appropriate for displaying in test output * from the provided value. * * @param value A value that will show up in a test's output. * * @return The string that is returned can be * customized per type by conforming a type to the `TestOutputStringConvertible` * protocol. When stringifying a non-`TestOutputStringConvertible` type, this * function will return the value's debug description and then its * normal description if available and in that order. Otherwise it * will return the result of constructing a string from the value. * * @see `TestOutputStringConvertible` */ extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m ================================================ #import "NMBStringify.h" #import NSString *_Nonnull NMBStringify(id _Nullable anyObject) { return [NMBStringer stringify:anyObject]; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m ================================================ #import "CurrentTestCaseTracker.h" #import #import #pragma mark - Method Swizzling /// Swaps the implementations between two instance methods. /// /// @param class The class containing `originalSelector`. /// @param originalSelector Original method to replace. /// @param replacementSelector Replacement method. void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method replacementMethod = class_getInstanceMethod(class, replacementSelector); BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(replacementMethod), method_getTypeEncoding(replacementMethod)); if (didAddMethod) { class_replaceMethod(class, replacementSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, replacementMethod); } } #pragma mark - Private @interface XCTestObservationCenter (Private) - (void)_addLegacyTestObserver:(id)observer; @end @implementation XCTestObservationCenter (Register) /// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary /// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early /// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. /// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, /// falling back to registering after the first normal observer if this private method ever changes. + (void)load { if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { // Swizzle -_addLegacyTestObserver: swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); } else { // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); } } #pragma mark - Replacement Methods /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. - (void)NMB_original__addLegacyTestObserver:(id)observer { [self NMB_original__addLegacyTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. /// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) - (void)NMB_original_addTestObserver:(id)observer { [self NMB_original_addTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/DSL+Wait.swift ================================================ import Foundation #if _runtime(_ObjC) private enum ErrorResult { case Exception(NSException) case Error(ErrorType) case None } /// Only classes, protocols, methods, properties, and subscript declarations can be /// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style /// asynchronous waiting logic so that it may be called from Objective-C and Swift. internal class NMBWait: NSObject { internal class func until( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in action() { done() } } } // Using a throwable closure makes this method not objc compatible. internal class func throwableUntil( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) throws -> Void) -> Void { let awaiter = NimbleEnvironment.activeInstance.awaiter let leeway = timeout / 2.0 let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in dispatch_async(dispatch_get_main_queue()) { let capture = NMBExceptionCapture( handler: ({ exception in done(.Exception(exception)) }), finally: ({ }) ) capture.tryBlock { do { try action() { done(.None) } } catch let e { done(.Error(e)) } } } }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) switch result { case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") case .BlockedRunLoop: fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), file: file, line: line) case .TimedOut: let pluralize = (timeout == 1 ? "" : "s") fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) case let .RaisedException(exception): fail("Unexpected exception raised: \(exception)") case let .ErrorThrown(error): fail("Unexpected error thrown: \(error)") case .Completed(.Exception(let exception)): fail("Unexpected exception raised: \(exception)") case .Completed(.Error(let error)): fail("Unexpected error thrown: \(error)") case .Completed(.None): // success break } } @objc(untilFile:line:action:) internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { until(timeout: 1, file: file, line: line, action: action) } } internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." } /// Wait asynchronously until the done closure is called or the timeout has been reached. /// /// @discussion /// Call the done() closure to indicate the waiting has completed. /// /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { NMBWait.until(timeout: timeout, file: file, line: line, action: action) } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/DSL.swift ================================================ import Foundation /// Make an expectation on a given actual value. The value given is lazily evaluated. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Make an expectation on a given actual value. The closure is lazily invoked. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Always fails the test with a message and a specified location. public func fail(message: String, location: SourceLocation) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(false, message: FailureMessage(stringValue: message), location: location) } /// Always fails the test with a message. public func fail(message: String, file: FileString = #file, line: UInt = #line) { fail(message, location: SourceLocation(file: file, line: line)) } /// Always fails the test. public func fail(file: FileString = #file, line: UInt = #line) { fail("fail() always fails", file: file, line: line) } /// Like Swift's precondition(), but raises NSExceptions instead of sigaborts internal func nimblePrecondition( @autoclosure expr: () -> Bool, @autoclosure _ name: () -> String, @autoclosure _ message: () -> String, file: StaticString = #file, line: UInt = #line) -> Bool { let result = expr() if !result { #if _runtime(_ObjC) let e = NSException( name: name(), reason: message(), userInfo: nil) e.raise() #else preconditionFailure("\(name()) - \(message())", file: file, line: line) #endif } return result } @noreturn internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { fatalError( "Nimble Bug Found: \(msg) at \(file):\(line).\n" + "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + "code snippet that caused this error." ) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Expectation.swift ================================================ import Foundation internal func expressionMatches(expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = to do { let pass = try matcher.matches(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } internal func expressionDoesNotMatch(expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = toNot do { let pass = try matcher.doesNotMatch(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } public struct Expectation { public let expression: Expression public func verify(pass: Bool, _ message: FailureMessage) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(pass, message: message, location: expression.location) } /// Tests the actual value using a matcher to match. public func to(matcher: U, description: String? = nil) { let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. public func toNot(matcher: U, description: String? = nil) { let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. /// /// Alias to toNot(). public func notTo(matcher: U, description: String? = nil) { toNot(matcher, description: description) } // see: // - AsyncMatcherWrapper for extension // - NMBExpectation for Objective-C interface } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Expression.swift ================================================ import Foundation // Memoizes the given closure, only calling the passed // closure once; even if repeat calls to the returned closure internal func memoizedClosure(closure: () throws -> T) -> (Bool) throws -> T { var cache: T? return ({ withoutCaching in if (withoutCaching || cache == nil) { cache = try closure() } return cache! }) } /// Expression represents the closure of the value inside expect(...). /// Expressions are memoized by default. This makes them safe to call /// evaluate() multiple times without causing a re-evaluation of the underlying /// closure. /// /// @warning Since the closure can be any code, Objective-C code may choose /// to raise an exception. Currently, Expression does not memoize /// exception raising. /// /// This provides a common consumable API for matchers to utilize to allow /// Nimble to change internals to how the captured closure is managed. public struct Expression { internal let _expression: (Bool) throws -> T? internal let _withoutCaching: Bool public let location: SourceLocation public let isClosure: Bool /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. The expression is memoized. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) { self._expression = memoizedClosure(expression) self.location = location self._withoutCaching = false self.isClosure = isClosure } /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param withoutCaching Indicates if the struct should memoize the given /// closure's result. Subsequent evaluate() calls will /// not call the given closure if this is true. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) { self._expression = memoizedExpression self.location = location self._withoutCaching = withoutCaching self.isClosure = isClosure } /// Returns a new Expression from the given expression. Identical to a map() /// on this type. This should be used only to typecast the Expression's /// closure value. /// /// The returned expression will preserve location and isClosure. /// /// @param block The block that can cast the current Expression value to a /// new type. public func cast(block: (T?) throws -> U?) -> Expression { return Expression(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) } public func evaluate() throws -> T? { return try self._expression(_withoutCaching) } public func withoutCaching() -> Expression { return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/FailureMessage.swift ================================================ import Foundation /// Encapsulates the failure message that matchers can report to the end user. /// /// This is shared state between Nimble and matchers that mutate this value. public class FailureMessage: NSObject { public var expected: String = "expected" public var actualValue: String? = "" // empty string -> use default; nil -> exclude public var to: String = "to" public var postfixMessage: String = "match" public var postfixActual: String = "" /// An optional message that will be appended as a new line and provides additional details /// about the failure. This message will only be visible in the issue navigator / in logs but /// not directly in the source editor since only a single line is presented there. public var extendedMessage: String? = nil public var userDescription: String? = nil public var stringValue: String { get { if let value = _stringValueOverride { return value } else { return computeStringValue() } } set { _stringValueOverride = newValue } } internal var _stringValueOverride: String? public override init() { } public init(stringValue: String) { _stringValueOverride = stringValue } internal func stripNewlines(str: String) -> String { var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } return lines.joinWithSeparator("") } internal func computeStringValue() -> String { var value = "\(expected) \(to) \(postfixMessage)" if let actualValue = actualValue { value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" } value = stripNewlines(value) if let extendedMessage = extendedMessage { value += "\n\(stripNewlines(extendedMessage))" } if let userDescription = userDescription { return "\(userDescription)\n\(value)" } return value } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSHumanReadableCopyright Copyright © 2014 Jeff Hui. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AllPass.swift ================================================ import Foundation public func allPass (passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return allPass("pass a condition", passFunc) } public func allPass (passName: String, _ passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return createAllPassMatcher() { expression, failureMessage in failureMessage.postfixMessage = passName return passFunc(try expression.evaluate()) } } public func allPass (matcher: V) -> NonNilMatcherFunc { return createAllPassMatcher() { try matcher.matches($0, failureMessage: $1) } } private func createAllPassMatcher (elementEvaluator:(Expression, FailureMessage) throws -> Bool) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.actualValue = nil if let actualValue = try actualExpression.evaluate() { for currentElement in actualValue { let exp = Expression( expression: {currentElement}, location: actualExpression.location) if try !elementEvaluator(exp, failureMessage) { failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)," + " but failed first at element <\(stringify(currentElement))>" + " in <\(stringify(actualValue))>" return false } } failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)" } else { failureMessage.postfixMessage = "all pass (use beNil() to match nils)" return false } return true } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() var nsObjects = [NSObject]() var collectionIsUsable = true if let value = actualValue as? NSFastEnumeration { let generator = NSFastGenerator(value) while let obj:AnyObject = generator.next() { if let nsObject = obj as? NSObject { nsObjects.append(nsObject) } else { collectionIsUsable = false break } } } else { collectionIsUsable = false } if !collectionIsUsable { failureMessage.postfixMessage = "allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects" failureMessage.expected = "" failureMessage.to = "" return false } let expr = Expression(expression: ({ nsObjects }), location: location) let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location) } return try! createAllPassMatcher(elementEvaluator).matches( expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift ================================================ import Foundation #if _runtime(_ObjC) public struct AsyncDefaults { public static var Timeout: NSTimeInterval = 1 public static var PollInterval: NSTimeInterval = 0.01 } internal struct AsyncMatcherWrapper: Matcher { let fullMatcher: U let timeoutInterval: NSTimeInterval let pollInterval: NSTimeInterval init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { self.fullMatcher = fullMatcher self.timeoutInterval = timeoutInterval self.pollInterval = pollInterval } func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let fnName = "expect(...).toEventually(...)" let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: fnName) { try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventually(...).") } } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: "expect(...).toEventuallyNot(...)") { try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventuallyNot(...).") } } } private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function") extension Expectation { /// Tests the actual value using a matcher to match by checking continuously /// at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionMatches( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), to: "to eventually", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionDoesNotMatch( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), toNot: "to eventually not", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// Alias of toEventuallyNot() /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift ================================================ import Foundation #if _runtime(_ObjC) // A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAKindOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAnInstanceOf if you want to match against the exact class public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" return instance != nil && instance!.isKindOfClass(expectedClass) } } extension NMBObjCMatcher { public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift ================================================ import Foundation // A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types public func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAKindOf if you want to match against subclasses public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be an instance of \(classAsString(expectedClass))" #if _runtime(_ObjC) return instance != nil && instance!.isMemberOfClass(expectedClass) #else return instance != nil && instance!.dynamicType == expectedClass #endif } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift ================================================ #if os(Linux) import Glibc #endif import Foundation internal let DefaultDelta = 0.0001 internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" failureMessage.actualValue = "<\(stringify(actualValue))>" return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } #if _runtime(_ObjC) public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { var _expected: NSNumber var _delta: CDouble init(expected: NSNumber, within: CDouble) { _expected = expected _delta = within } public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.doesNotMatch(expr, failureMessage: failureMessage) } public var within: (CDouble) -> NMBObjCBeCloseToMatcher { return ({ delta in return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) }) } } extension NMBObjCMatcher { public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { return NMBObjCBeCloseToMatcher(expected: expected, within: within) } } #endif public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" if let actual = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actual))>" if actual.count != expectedValues.count { return false } else { for (index, actualItem) in actual.enumerate() { if fabs(actualItem - expectedValues[index]) > delta { return false } } return true } } return false } } // MARK: - Operators infix operator ≈ { associativity none precedence 130 } public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } public func ==(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } // make this higher precedence than exponents so the Doubles either end aren't pulled in // unexpectantly infix operator ± { precedence 170 } public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { return (expected: lhs, delta: rhs) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeEmpty.swift ================================================ import Foundation /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualSeq = try actualExpression.evaluate() if actualSeq == nil { return true } var generator = actualSeq!.generate() return generator.next() == nil } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || NSString(string: actualString!).length == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For NSString instances, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || actualString!.length == 0 } } // Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray, // etc, since they conform to SequenceType as well as NMBCollection. /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualDictionary = try actualExpression.evaluate() return actualDictionary == nil || actualDictionary!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualArray = try actualExpression.evaluate() return actualArray == nil || actualArray!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actual = try actualExpression.evaluate() return actual == nil || actual!.count == 0 } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beEmptyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() failureMessage.postfixMessage = "be empty" if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" return try actualExpression.evaluate() > expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending return matches } } public func >(lhs: Expectation, rhs: T) { lhs.to(beGreaterThan(rhs)) } public func >(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beGreaterThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue >= expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending return matches } } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actual = try actualExpression.evaluate() failureMessage.actualValue = "\(identityAsString(actual))" failureMessage.postfixMessage = "be identical to \(identityAsString(expected))" return actual === expected && actual !== nil } } public func ===(lhs: Expectation, rhs: AnyObject?) { lhs.to(beIdenticalTo(rhs)) } public func !==(lhs: Expectation, rhs: AnyObject?) { lhs.toNot(beIdenticalTo(rhs)) } /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. /// /// Alias for "beIdenticalTo". public func be(expected: AnyObject?) -> NonNilMatcherFunc { return beIdenticalTo(expected) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let aExpr = actualExpression.cast { $0 as AnyObject? } return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" return try actualExpression.evaluate() < expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending return matches } } public func <(lhs: Expectation, rhs: T) { lhs.to(beLessThan(rhs)) } public func <(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beLessThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as! NMBComparable? } return try! beLessThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" return try actualExpression.evaluate() <= expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending } } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLogical.swift ================================================ import Foundation internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in defer { postprocessor(failureMessage) } return try matcher.matcher(actualExpression, failureMessage) } } // MARK: beTrue() / beFalse() /// A Nimble matcher that succeeds when the actual value is exactly true. /// This matcher will not match against nils. public func beTrue() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(true)) { failureMessage in failureMessage.postfixMessage = "be true" } } /// A Nimble matcher that succeeds when the actual value is exactly false. /// This matcher will not match against nils. public func beFalse() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(false)) { failureMessage in failureMessage.postfixMessage = "be false" } } // MARK: beTruthy() / beFalsy() /// A Nimble matcher that succeeds when the actual value is not logically false. public func beTruthy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be truthy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue == true } } return actualValue != nil } } /// A Nimble matcher that succeeds when the actual value is logically false. /// This matcher will match against nils. public func beFalsy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be falsy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue != true } } return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beTruthyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beTruthy().matches(expr, failureMessage: failureMessage) } } public class func beFalsyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beFalsy().matches(expr, failureMessage: failureMessage) } } public class func beTrueMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beTrue().matches(expr, failureMessage: failureMessage) } } public class func beFalseMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beFalse().matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeNil.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is nil. public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" let actualValue = try actualExpression.evaluate() return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in return try! beNil().matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeVoid.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is Void. public func beVoid() -> MatcherFunc<()> { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be void" let actualValue: ()? = try actualExpression.evaluate() return actualValue != nil } } public func ==(lhs: Expectation<()>, rhs: ()) { lhs.to(beVoid()) } public func !=(lhs: Expectation<()>, rhs: ()) { lhs.toNot(beVoid()) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeginWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's first element /// is equal to the expected value. public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's first element /// is equal to the expected object. public func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(startingElement) == 0 } } /// A Nimble matcher that succeeds when the actual string contains expected substring /// where the expected substring's location is zero. public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingSubstring)>" if let actual = try actualExpression.evaluate() { let range = actual.rangeOfString(startingSubstring) return range != nil && range!.startIndex == actual.startIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! beginWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Contain.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence contains the expected value. public func contain(items: T...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [T]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" if let actual = try actualExpression.evaluate() { return items.all { return actual.contains($0) } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: String...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [String]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { let range = actual.rangeOfString($0) return range != nil && !range!.isEmpty } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: NSString...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [NSString]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { actual.rangeOfString($0.description).length != 0 } } return false } } /// A Nimble matcher that succeeds when the actual collection contains the expected object. public func contain(items: AnyObject?...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [AnyObject?]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" guard let actual = try actualExpression.evaluate() else { return false } return items.all { item in return item != nil && actual.containsObject(item!) } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBContainer { let expr = Expression(expression: ({ value as NMBContainer }), location: location) // A straightforward cast on the array causes this to crash, so we have to cast the individual items let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? }) return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage) } else if actualValue != nil { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" } else { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/EndWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's last element /// is equal to the expected value. public func endWith(endingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() var lastItem: T? var item: T? repeat { lastItem = item item = actualGenerator.next() } while(item != nil) return lastItem == endingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's last element /// is equal to the expected object. public func endWith(endingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1 } } /// A Nimble matcher that succeeds when the actual string contains the expected substring /// where the expected substring's location is the actual string's length minus the /// expected substring's length. public func endWith(endingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingSubstring)>" if let collection = try actualExpression.evaluate() { let range = collection.rangeOfString(endingSubstring) return range != nil && range!.endIndex == collection.endIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! endWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Equal.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue == expectedValue && expectedValue != nil if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return matches } } /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. /// Items must implement the Equatable protocol. public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher allowing comparison of collection with optional type public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let actualValue = try actualExpression.evaluate() { if expectedValue.count != actualValue.count { return false } for (index, item) in actualValue.enumerate() { let otherItem = expectedValue[index] if item == nil && otherItem == nil { continue } else if item == nil && otherItem != nil { return false } else if item != nil && otherItem == nil { return false } else if item! != otherItem! { return false } } return true } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: stringify) } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: { if let set = $0 { return stringify(Array(set).sort { $0 < $1 }) } else { return "nil" } }) } private func equal(expectedValue: Set?, stringify: Set? -> String) -> NonNilMatcherFunc> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let expectedValue = expectedValue { if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actualValue))>" if expectedValue == actualValue { return true } let missing = expectedValue.subtract(actualValue) if missing.count > 0 { failureMessage.postfixActual += ", missing <\(stringify(missing))>" } let extra = actualValue.subtract(expectedValue) if extra.count > 0 { failureMessage.postfixActual += ", extra <\(stringify(extra))>" } } } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } public func ==(lhs: Expectation, rhs: T?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation, rhs: T?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T]>, rhs: [T]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T]>, rhs: [T]?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.toNot(equal(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func equalMatcher(expected: NSObject) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! equal(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/HaveCount.swift ================================================ import Foundation // The `haveCount` matchers do not print the full string representation of the collection value, // instead they only print the type name and the expected count. This makes it easier to understand // the reason for failed expectations. See: https://github.com/Quick/Nimble/issues/308. // The representation of the collection content is provided in a new line as an `extendedMessage`. /// A Nimble matcher that succeeds when the actual CollectionType's count equals /// the expected value public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" return result } else { return false } } } /// A Nimble matcher that succeeds when the actual collection's count equals /// the expected value public func haveCount(expectedValue: Int) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" return result } else { return false } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection}), location: location) return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Match.swift ================================================ import Foundation #if _runtime(_ObjC) /// A Nimble matcher that succeeds when the actual string satisfies the regular expression /// described by the expected string. public func match(expectedValue: String?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "match <\(stringify(expectedValue))>" if let actual = try actualExpression.evaluate() { if let regexp = expectedValue { return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil } } return false } } extension NMBObjCMatcher { public class func matchMatcher(expected: NSString) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.cast { $0 as? String } return try! match(expected.description).matches(actual, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatchError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. public func matchError(error: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) return errorMatchesNonNilFieldsOrClosure(actualError, error: error) } } /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error of the specified type public func matchError(errorType: T.Type) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift ================================================ /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil /// values are recieved in an expectation. /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct MatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try matcher(actualExpression, failureMessage) } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try !matcher(actualExpression, failureMessage) } } /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// Unlike MatcherFunc, this will always fail if an expectation contains nil. /// This applies regardless of using to() or toNot(). /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct NonNilMatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try !matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } internal func attachNilErrorIfNeeded(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return true } return false } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift ================================================ import Foundation /// Implement this protocol to implement a custom matcher for Swift public protocol Matcher { associatedtype ValueType func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool } #if _runtime(_ObjC) /// Objective-C interface to the Swift variant of Matcher. @objc public protocol NMBMatcher { func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool } #endif #if _runtime(_ObjC) /// Protocol for types that support contain() matcher. @objc public protocol NMBContainer { func containsObject(object: AnyObject!) -> Bool } extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet #else public protocol NMBContainer { func containsObject(object: AnyObject) -> Bool } #endif extension NSArray : NMBContainer {} extension NSSet : NMBContainer {} #if _runtime(_ObjC) /// Protocol for types that support only beEmpty(), haveCount() matchers @objc public protocol NMBCollection { var count: Int { get } } extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet extension NSMapTable : NMBCollection {} #else public protocol NMBCollection { var count: Int { get } } #endif extension NSSet : NMBCollection {} extension NSIndexSet : NMBCollection {} extension NSDictionary : NMBCollection {} #if _runtime(_ObjC) /// Protocol for types that support beginWith(), endWith(), beEmpty() matchers @objc public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject!) -> Int } #else public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject) -> Int } #endif extension NSArray : NMBOrderedCollection {} #if _runtime(_ObjC) /// Protocol for types to support beCloseTo() matcher @objc public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } #else public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } extension Double : NMBDoubleConvertible { public var doubleValue: CDouble { get { return self } } } extension Float : NMBDoubleConvertible { public var doubleValue: CDouble { get { return CDouble(self) } } } #endif extension NSNumber : NMBDoubleConvertible { } private let dateFormatter: NSDateFormatter = { let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") return formatter }() #if _runtime(_ObjC) extension NSDate: NMBDoubleConvertible { public var doubleValue: CDouble { get { return self.timeIntervalSinceReferenceDate } } } #endif extension NSDate: TestOutputStringConvertible { public var testDescription: String { return dateFormatter.stringFromDate(self) } } /// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), /// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. /// /// Types that conform to Swift's Comparable protocol will work implicitly too #if _runtime(_ObjC) @objc public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #else // This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #endif extension NSNumber : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! NSNumber) } } extension NSString : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! String) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/PostNotification.swift ================================================ import Foundation internal class NotificationCollector { private(set) var observedNotifications: [NSNotification] private let notificationCenter: NSNotificationCenter #if _runtime(_ObjC) private var token: AnyObject? #else private var token: NSObjectProtocol? #endif required init(notificationCenter: NSNotificationCenter) { self.notificationCenter = notificationCenter self.observedNotifications = [] } func startObserving() { self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { // linux-swift gets confused by .append(n) [weak self] n in self?.observedNotifications += [n] } } deinit { #if _runtime(_ObjC) if let token = self.token { self.notificationCenter.removeObserver(token) } #else if let token = self.token as? AnyObject { self.notificationCenter.removeObserver(token) } #endif } } private let mainThread = pthread_self() public func postNotifications( notificationsMatcher: T, fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) -> MatcherFunc { let _ = mainThread // Force lazy-loading of this value let collector = NotificationCollector(notificationCenter: center) collector.startObserving() var once: Bool = false return MatcherFunc { actualExpression, failureMessage in let collectorNotificationsExpression = Expression(memoizedExpression: { _ in return collector.observedNotifications }, location: actualExpression.location, withoutCaching: true) assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") if !once { once = true try actualExpression.evaluate() } let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) if collector.observedNotifications.isEmpty { failureMessage.actualValue = "no notifications" } else { failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" } return match } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/RaisesException.swift ================================================ import Foundation // This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager #if _runtime(_ObjC) && !SWIFT_PACKAGE /// A Nimble matcher that succeeds when the actual expression raises an /// exception with the specified name, reason, and/or userInfo. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the raised exception. The closure only gets called when an exception /// is raised. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func raiseException( named named: String? = nil, reason: String? = nil, userInfo: NSDictionary? = nil, closure: ((NSException) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var exception: NSException? let capture = NMBExceptionCapture(handler: ({ e in exception = e }), finally: nil) capture.tryBlock { try! actualExpression.evaluate() return } setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure) return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure) } } internal func setFailureMessageForException( failureMessage: FailureMessage, exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) { failureMessage.postfixMessage = "raise exception" if let named = named { failureMessage.postfixMessage += " with name <\(named)>" } if let reason = reason { failureMessage.postfixMessage += " with reason <\(reason)>" } if let userInfo = userInfo { failureMessage.postfixMessage += " with userInfo <\(userInfo)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if named == nil && reason == nil && userInfo == nil && closure == nil { failureMessage.postfixMessage = "raise any exception" } if let exception = exception { failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" } else { failureMessage.actualValue = "no exception" } } internal func exceptionMatchesNonNilFieldsOrClosure( exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) -> Bool { var matches = false if let exception = exception { matches = true if named != nil && exception.name != named { matches = false } if reason != nil && exception.reason != reason { matches = false } if userInfo != nil && exception.userInfo != userInfo { matches = false } if let closure = closure { let assertions = gatherFailingExpectations { closure(exception) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } public class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher { internal var _name: String? internal var _reason: String? internal var _userInfo: NSDictionary? internal var _block: ((NSException) -> Void)? internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { _name = name _reason = reason _userInfo = userInfo _block = block } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let block: () -> Any? = ({ actualBlock(); return nil }) let expr = Expression(expression: block, location: location) return try! raiseException( named: _name, reason: _reason, userInfo: _userInfo, closure: _block ).matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { return !matches(actualBlock, failureMessage: failureMessage, location: location) } public var named: (name: String) -> NMBObjCRaiseExceptionMatcher { return ({ name in return NMBObjCRaiseExceptionMatcher( name: name, reason: self._reason, userInfo: self._userInfo, block: self._block ) }) } public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher { return ({ reason in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: reason, userInfo: self._userInfo, block: self._block ) }) } public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { return ({ userInfo in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: userInfo, block: self._block ) }) } public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { return ({ block in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: self._userInfo, block: block ) }) } } extension NMBObjCMatcher { public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value matches with any of the matchers /// provided in the variable list of matchers. public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { return satisfyAnyOf(matchers) } internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let postfixMessages = NSMutableArray() var matches = false for matcher in matchers { if try matcher.matches(actualExpression, failureMessage: failureMessage) { matches = true } postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) } failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "\(actualValue)" } return matches } } public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in if matchers.isEmpty { failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" return false } var elementEvaluators = [NonNilMatcherFunc]() for matcher in matchers { let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) } elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) } return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/ThrowError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression throws an /// error of the specified type or from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the thrown error. The closure only gets called when an error was thrown. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func throwError( error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) } } /// A Nimble matcher that succeeds when the actual expression throws any /// error or when the passed closures' arbitrary custom matching succeeds. /// /// This duplication to it's generic adequate is required to allow to receive /// values of the existential type ErrorType in the closure. /// /// The closure only gets called when an error was thrown. public func throwError( closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Nimble.h ================================================ #import #import "NMBExceptionCapture.h" #import "NMBStringify.h" #import "DSL.h" FOUNDATION_EXPORT double NimbleVersionNumber; FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Async.swift ================================================ import Foundation #if _runtime(_ObjC) import Dispatch private let timeoutLeeway: UInt64 = NSEC_PER_MSEC private let pollLeeway: UInt64 = NSEC_PER_MSEC /// Stores debugging information about callers internal struct WaitingInfo: CustomStringConvertible { let name: String let file: FileString let lineNumber: UInt var description: String { return "\(name) at \(file):\(lineNumber)" } } internal protocol WaitLock { func acquireWaitingLock(fnName: String, file: FileString, line: UInt) func releaseWaitingLock() func isWaitingLocked() -> Bool } internal class AssertionWaitLock: WaitLock { private var currentWaiter: WaitingInfo? = nil init() { } func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { let info = WaitingInfo(name: fnName, file: file, lineNumber: line) nimblePrecondition( NSThread.isMainThread(), "InvalidNimbleAPIUsage", "\(fnName) can only run on the main thread." ) nimblePrecondition( currentWaiter == nil, "InvalidNimbleAPIUsage", "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + "The call to\n\t\(info)\n" + "triggered this exception because\n\t\(currentWaiter!)\n" + "is currently managing the main run loop." ) currentWaiter = info } func isWaitingLocked() -> Bool { return currentWaiter != nil } func releaseWaitingLock() { currentWaiter = nil } } internal enum AwaitResult { /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) case Incomplete /// TimedOut indicates the result reached its defined timeout limit before returning case TimedOut /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger /// the timeout code. /// /// This may also mean the async code waiting upon may have never actually ran within the /// required time because other timers & sources are running on the main run loop. case BlockedRunLoop /// The async block successfully executed and returned a given result case Completed(T) /// When a Swift Error is thrown case ErrorThrown(ErrorType) /// When an Objective-C Exception is raised case RaisedException(NSException) func isIncomplete() -> Bool { switch self { case .Incomplete: return true default: return false } } func isCompleted() -> Bool { switch self { case .Completed(_): return true default: return false } } } /// Holds the resulting value from an asynchronous expectation. /// This class is thread-safe at receiving an "response" to this promise. internal class AwaitPromise { private(set) internal var asyncResult: AwaitResult = .Incomplete private var signal: dispatch_semaphore_t init() { signal = dispatch_semaphore_create(1) } /// Resolves the promise with the given result if it has not been resolved. Repeated calls to /// this method will resolve in a no-op. /// /// @returns a Bool that indicates if the async result was accepted or rejected because another /// value was recieved first. func resolveResult(result: AwaitResult) -> Bool { if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { self.asyncResult = result return true } else { return false } } } internal struct AwaitTrigger { let timeoutSource: dispatch_source_t let actionSource: dispatch_source_t? let start: () throws -> Void } /// Factory for building fully configured AwaitPromises and waiting for their results. /// /// This factory stores all the state for an async expectation so that Await doesn't /// doesn't have to manage it. internal class AwaitPromiseBuilder { let awaiter: Awaiter let waitLock: WaitLock let trigger: AwaitTrigger let promise: AwaitPromise internal init( awaiter: Awaiter, waitLock: WaitLock, promise: AwaitPromise, trigger: AwaitTrigger) { self.awaiter = awaiter self.waitLock = waitLock self.promise = promise self.trigger = trigger } func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { // = Discussion = // // There's a lot of technical decisions here that is useful to elaborate on. This is // definitely more lower-level than the previous NSRunLoop based implementation. // // // Why Dispatch Source? // // // We're using a dispatch source to have better control of the run loop behavior. // A timer source gives us deferred-timing control without having to rely as much on // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) // which is ripe for getting corrupted by application code. // // And unlike dispatch_async(), we can control how likely our code gets prioritized to // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. // // This timer is assumed to run on the HIGH priority queue to ensure it maintains the // highest priority over normal application / test code when possible. // // // Run Loop Management // // In order to properly interrupt the waiting behavior performed by this factory class, // this timer stops the main run loop to tell the waiter code that the result should be // checked. // // In addition, stopping the run loop is used to halt code executed on the main run loop. dispatch_source_set_timer( trigger.timeoutSource, dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), DISPATCH_TIME_FOREVER, timeoutLeeway ) dispatch_source_set_event_handler(trigger.timeoutSource) { guard self.promise.asyncResult.isIncomplete() else { return } let timedOutSem = dispatch_semaphore_create(0) let semTimedOutOrBlocked = dispatch_semaphore_create(0) dispatch_semaphore_signal(semTimedOutOrBlocked) let runLoop = CFRunLoopGetMain() CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { dispatch_semaphore_signal(timedOutSem) dispatch_semaphore_signal(semTimedOutOrBlocked) if self.promise.resolveResult(.TimedOut) { CFRunLoopStop(CFRunLoopGetMain()) } } } // potentially interrupt blocking code on run loop to let timeout code run CFRunLoopStop(runLoop) let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 if didNotTimeOut && timeoutWasNotTriggered { if self.promise.resolveResult(.BlockedRunLoop) { CFRunLoopStop(CFRunLoopGetMain()) } } } return self } /// Blocks for an asynchronous result. /// /// @discussion /// This function must be executed on the main thread and cannot be nested. This is because /// this function (and it's related methods) coordinate through the main run loop. Tampering /// with the run loop can cause undesireable behavior. /// /// This method will return an AwaitResult in the following cases: /// /// - The main run loop is blocked by other operations and the async expectation cannot be /// be stopped. /// - The async expectation timed out /// - The async expectation succeeded /// - The async expectation raised an unexpected exception (objc) /// - The async expectation raised an unexpected error (swift) /// /// The returned AwaitResult will NEVER be .Incomplete. func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { waitLock.acquireWaitingLock( fnName, file: file, line: line) let capture = NMBExceptionCapture(handler: ({ exception in self.promise.resolveResult(.RaisedException(exception)) }), finally: ({ self.waitLock.releaseWaitingLock() })) capture.tryBlock { do { try self.trigger.start() } catch let error { self.promise.resolveResult(.ErrorThrown(error)) } dispatch_resume(self.trigger.timeoutSource) while self.promise.asyncResult.isIncomplete() { // Stopping the run loop does not work unless we run only 1 mode NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) } dispatch_suspend(self.trigger.timeoutSource) dispatch_source_cancel(self.trigger.timeoutSource) if let asyncSource = self.trigger.actionSource { dispatch_source_cancel(asyncSource) } } return promise.asyncResult } } internal class Awaiter { let waitLock: WaitLock let timeoutQueue: dispatch_queue_t let asyncQueue: dispatch_queue_t internal init( waitLock: WaitLock, asyncQueue: dispatch_queue_t, timeoutQueue: dispatch_queue_t) { self.waitLock = waitLock self.asyncQueue = asyncQueue self.timeoutQueue = timeoutQueue } private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { return dispatch_source_create( DISPATCH_SOURCE_TYPE_TIMER, 0, DISPATCH_TIMER_STRICT, queue ) } func performBlock( closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) var completionCount = 0 let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { try closure() { completionCount += 1 nimblePrecondition( completionCount < 2, "InvalidNimbleAPIUsage", "Done closure's was called multiple times. waitUntil(..) expects its " + "completion closure to only be called once.") if promise.resolveResult(.Completed($0)) { CFRunLoopStop(CFRunLoopGetMain()) } } } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) let asyncSource = createTimerSource(asyncQueue) let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) dispatch_source_set_event_handler(asyncSource) { do { if let result = try closure() { if promise.resolveResult(.Completed(result)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } catch let error { if promise.resolveResult(.ErrorThrown(error)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } dispatch_resume(asyncSource) } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } } internal func pollBlock( pollInterval pollInterval: NSTimeInterval, timeoutInterval: NSTimeInterval, file: FileString, line: UInt, fnName: String = #function, expression: () throws -> Bool) -> AwaitResult { let awaiter = NimbleEnvironment.activeInstance.awaiter let result = awaiter.poll(pollInterval) { () throws -> Bool? in do { if try expression() { return true } return nil } catch let error { throw error } }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) return result } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Errors.swift ================================================ import Foundation // Generic internal func setFailureMessageForError( failureMessage: FailureMessage, postfixMessageVerb: String = "throw", actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) { failureMessage.postfixMessage = "\(postfixMessageVerb) error" if let error = error { if let error = error as? CustomDebugStringConvertible { failureMessage.postfixMessage += " <\(error.debugDescription)>" } else { failureMessage.postfixMessage += " <\(error)>" } } else if errorType != nil || closure != nil { failureMessage.postfixMessage += " from type <\(T.self)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if error == nil && errorType == nil && closure == nil { failureMessage.postfixMessage = "\(postfixMessageVerb) any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { return actualError._domain == expectedError._domain && actualError._code == expectedError._code } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { if let actualError = actualError as? T { return actualError == expectedError } return false } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> Bool { var matches = false if let actualError = actualError { matches = true if let error = error { if !errorMatchesExpectedError(actualError, expectedError: error) { matches = false } } if let actualError = actualError as? T { if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError as T) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } else if errorType != nil && closure != nil { // The closure expects another ErrorType as argument, so this // is _supposed_ to fail, so that it becomes more obvious. let assertions = gatherExpectations { expect(actualError is T).to(equal(true)) } precondition(assertions.map { $0.message }.count > 0) matches = false } } return matches } // Non-generic internal func setFailureMessageForError( failureMessage: FailureMessage, actualError: ErrorType?, closure: ((ErrorType) -> Void)?) { failureMessage.postfixMessage = "throw error" if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } else { failureMessage.postfixMessage = "throw any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, closure: ((ErrorType) -> Void)?) -> Bool { var matches = false if let actualError = actualError { matches = true if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Functional.swift ================================================ import Foundation extension SequenceType { internal func all(fn: Generator.Element -> Bool) -> Bool { for item in self { if !fn(item) { return false } } return true } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/SourceLocation.swift ================================================ import Foundation // Ideally we would always use `StaticString` as the type for tracking the file name // that expectations originate from, for consistency with `assert` etc. from the // stdlib, and because recent versions of the XCTest overlay require `StaticString` // when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we // have to use `String` instead because StaticString can't be generated from Objective-C #if _runtime(_ObjC) public typealias FileString = String #else public typealias FileString = StaticString #endif public final class SourceLocation : NSObject { public let file: FileString public let line: UInt override init() { file = "Unknown File" line = 0 } init(file: FileString, line: UInt) { self.file = file self.line = line } override public var description: String { return "\(file):\(line)" } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Stringers.swift ================================================ import Foundation internal func identityAsString(value: AnyObject?) -> String { if let value = value { return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description } else { return "nil" } } internal func classAsString(cls: AnyClass) -> String { #if _runtime(_ObjC) return NSStringFromClass(cls) #else return String(cls) #endif } internal func arrayAsString(items: [T], joiner: String = ", ") -> String { return items.reduce("") { accum, item in let prefix = (accum.isEmpty ? "" : joiner) return accum + prefix + "\(stringify(item))" } } /// A type with a customized test output text representation. /// /// This textual representation is produced when values will be /// printed in test runs, and may be useful when producing /// error messages in custom matchers. /// /// - SeeAlso: `CustomDebugStringConvertible` public protocol TestOutputStringConvertible { var testDescription: String { get } } extension Double: TestOutputStringConvertible { public var testDescription: String { return NSNumber(double: self).testDescription } } extension Float: TestOutputStringConvertible { public var testDescription: String { return NSNumber(float: self).testDescription } } extension NSNumber: TestOutputStringConvertible { // This is using `NSString(format:)` instead of // `String(format:)` because the latter somehow breaks // the travis CI build on linux. public var testDescription: String { let description = self.description if description.containsString(".") { // Travis linux swiftpm build doesn't like casting String to NSString, // which is why this annoying nested initializer thing is here. // Maybe this will change in a future snapshot. let decimalPlaces = NSString(string: NSString(string: description) .componentsSeparatedByString(".")[1]) if decimalPlaces.length > 4 { return NSString(format: "%0.4f", self.doubleValue).description } } return self.description } } extension Array: TestOutputStringConvertible { public var testDescription: String { let list = self.map(Nimble.stringify).joinWithSeparator(", ") return "[\(list)]" } } extension AnySequence: TestOutputStringConvertible { public var testDescription: String { let generator = self.generate() var strings = [String]() var value: AnySequence.Generator.Element? repeat { value = generator.next() if let value = value { strings.append(stringify(value)) } } while value != nil let list = strings.joinWithSeparator(", ") return "[\(list)]" } } extension NSArray: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension NSIndexSet: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension String: TestOutputStringConvertible { public var testDescription: String { return self } } extension NSData: TestOutputStringConvertible { public var testDescription: String { #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) return "NSData" #else return "NSData" #endif } } /// /// Returns a string appropriate for displaying in test output /// from the provided value. /// /// - parameter value: A value that will show up in a test's output. /// /// - returns: The string that is returned can be /// customized per type by conforming a type to the `TestOutputStringConvertible` /// protocol. When stringifying a non-`TestOutputStringConvertible` type, this /// function will return the value's debug description and then its /// normal description if available and in that order. Otherwise it /// will return the result of constructing a string from the value. /// /// - SeeAlso: `TestOutputStringConvertible` @warn_unused_result public func stringify(value: T) -> String { if let value = value as? TestOutputStringConvertible { return value.testDescription } if let value = value as? CustomDebugStringConvertible { return value.debugDescription } return String(value) } /// -SeeAlso: `stringify(value: T)` @warn_unused_result public func stringify(value: T?) -> String { if let unboxed = value { return stringify(unboxed) } return "nil" } #if _runtime(_ObjC) @objc public class NMBStringer: NSObject { @warn_unused_result @objc public class func stringify(obj: AnyObject?) -> String { return Nimble.stringify(obj) } } #endif // MARK: Collection Type Stringers /// Attempts to generate a pretty type string for a given value. If the value is of a Objective-C /// collection type, or a subclass thereof, (e.g. `NSArray`, `NSDictionary`, etc.). /// This function will return the type name of the root class of the class cluster for better /// readability (e.g. `NSArray` instead of `__NSArrayI`). /// /// For values that don't have a type of an Objective-C collection, this function returns the /// default type description. /// /// - parameter value: A value that will be used to determine a type name. /// /// - returns: The name of the class cluster root class for Objective-C collection types, or the /// the `dynamicType` of the value for values of any other type. public func prettyCollectionType(value: T) -> String { #if _runtime(_ObjC) // Check for types that are not in corelibs-foundation separately if value is NSHashTable { return String(NSHashTable.self) } #endif switch value { case is NSArray: return String(NSArray.self) case is NSDictionary: return String(NSDictionary.self) case is NSSet: return String(NSSet.self) case is NSIndexSet: return String(NSIndexSet.self) default: return String(value) } } /// Returns the type name for a given collection type. This overload is used by Swift /// collection types. /// /// - parameter collection: A Swift `CollectionType` value. /// /// - returns: A string representing the `dynamicType` of the value. public func prettyCollectionType(collection: T) -> String { return String(collection.dynamicType) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/LinuxMain.swift ================================================ import XCTest @testable import Nimbletest // This is the entry point for NimbleTests on Linux XCTMain([ // AsynchronousTests(), SynchronousTest(), UserDescriptionTest(), // Matchers AllPassTest(), // BeAKindOfTest(), BeAnInstanceOfTest(), BeCloseToTest(), BeginWithTest(), BeGreaterThanOrEqualToTest(), BeGreaterThanTest(), BeIdenticalToObjectTest(), BeIdenticalToTest(), BeLessThanOrEqualToTest(), BeLessThanTest(), BeTruthyTest(), BeTrueTest(), BeFalsyTest(), BeFalseTest(), BeNilTest(), ContainTest(), EndWithTest(), EqualTest(), HaveCountTest(), // MatchTest(), // RaisesExceptionTest(), ThrowErrorTest(), SatisfyAnyOfTest(), PostNotificationTest(), ]) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/AsynchronousTest.swift ================================================ import Foundation import XCTest import Nimble // These tests require the ObjC runtimes do not currently have the GCD and run loop facilities // required for working with Nimble's async matchers #if _runtime(_ObjC) class AsyncTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToEventuallyPositiveMatches", testToEventuallyPositiveMatches), ("testToEventuallyNegativeMatches", testToEventuallyNegativeMatches), ("testWaitUntilPositiveMatches", testWaitUntilPositiveMatches), ("testToEventuallyWithCustomDefaultTimeout", testToEventuallyWithCustomDefaultTimeout), ("testWaitUntilTimesOutIfNotCalled", testWaitUntilTimesOutIfNotCalled), ("testWaitUntilTimesOutWhenExceedingItsTime", testWaitUntilTimesOutWhenExceedingItsTime), ("testWaitUntilNegativeMatches", testWaitUntilNegativeMatches), ("testWaitUntilDetectsStalledMainThreadActivity", testWaitUntilDetectsStalledMainThreadActivity), ("testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed", testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed), ("testWaitUntilErrorsIfDoneIsCalledMultipleTimes", testWaitUntilErrorsIfDoneIsCalledMultipleTimes), ("testWaitUntilMustBeInMainThread", testWaitUntilMustBeInMainThread), ("testToEventuallyMustBeInMainThread", testToEventuallyMustBeInMainThread), ] } let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testToEventuallyPositiveMatches() { var value = 0 deferToMainQueue { value = 1 } expect { value }.toEventually(equal(1)) deferToMainQueue { value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testToEventuallyNegativeMatches() { let value = 0 failsWithErrorMessage("expected to eventually not equal <0>, got <0>") { expect { value }.toEventuallyNot(equal(0)) } failsWithErrorMessage("expected to eventually equal <1>, got <0>") { expect { value }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually not equal <0>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventuallyNot(equal(0)) } } func testToEventuallyWithCustomDefaultTimeout() { AsyncDefaults.Timeout = 2 defer { AsyncDefaults.Timeout = 1 } var value = 0 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 1 } expect { value }.toEventually(equal(1)) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testWaitUntilPositiveMatches() { waitUntil { done in done() } waitUntil { done in deferToMainQueue { done() } } } func testWaitUntilTimesOutIfNotCalled() { failsWithErrorMessage("Waited more than 1.0 second") { waitUntil(timeout: 1) { done in return } } } func testWaitUntilTimesOutWhenExceedingItsTime() { var waiting = true failsWithErrorMessage("Waited more than 0.01 seconds") { waitUntil(timeout: 0.01) { done in dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(0.1) done() waiting = false } } } // "clear" runloop to ensure this test doesn't poison other tests repeat { NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2)) } while(waiting) } func testWaitUntilNegativeMatches() { failsWithErrorMessage("expected to equal <2>, got <1>") { waitUntil { done in NSThread.sleepForTimeInterval(0.1) expect(1).to(equal(2)) done() } } } func testWaitUntilDetectsStalledMainThreadActivity() { let msg = "-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." failsWithErrorMessage(msg) { waitUntil(timeout: 1) { done in NSThread.sleepForTimeInterval(5.0) done() } } } func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() { // Currently we are unable to catch Objective-C exceptions when built by the Swift Package Manager #if !SWIFT_PACKAGE let referenceLine = #line + 9 var msg = "Unexpected exception raised: Nested async expectations are not allowed " msg += "to avoid creating flaky tests." msg += "\n\n" msg += "The call to\n\t" msg += "expect(...).toEventually(...) at \(#file):\(referenceLine + 7)\n" msg += "triggered this exception because\n\t" msg += "waitUntil(...) at \(#file):\(referenceLine + 1)\n" msg += "is currently managing the main run loop." failsWithErrorMessage(msg) { // reference line waitUntil(timeout: 2.0) { done in var protected: Int = 0 dispatch_async(dispatch_get_main_queue()) { protected = 1 } expect(protected).toEventually(equal(1)) done() } } #endif } func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() { #if !SWIFT_PACKAGE waitUntil { done in deferToMainQueue { done() expect { done() }.to(raiseException(named: "InvalidNimbleAPIUsage")) } } #endif } func testWaitUntilMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { waitUntil { done in done() } }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } func testToEventuallyMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { expect(1).toEventually(equal(2)) }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift ================================================ import Foundation class ObjectWithLazyProperty { init() {} lazy var value: String = "hello" lazy var anotherValue: String = { return "world" }() } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift ================================================ import Foundation import XCTest // XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available // in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, // we ensure that the tests fail in Xcode if they haven't been configured properly to // be run with the open-source tools. #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) public protocol XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { get } } extension XCTestCase { override public func tearDown() { if let provider = self as? XCTestCaseProvider { provider.assertContainsTest(invocation!.selector.description) } super.tearDown() } } extension XCTestCaseProvider { private func assertContainsTest(name: String) { let contains = self.allTests.contains({ test in return test.0 == name }) XCTAssert(contains, "Test '\(name)' is missing from the allTests array") } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/utils.swift ================================================ import Foundation @testable import Nimble import XCTest func failsWithErrorMessage(messages: [String], file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) { var filePath = file var lineNumber = line let recorder = AssertionRecorder() withAssertionHandler(recorder, closure: closure) for msg in messages { var lastFailure: AssertionRecord? var foundFailureMessage = false for assertion in recorder.assertions { lastFailure = assertion if assertion.message.stringValue == msg { foundFailureMessage = true break } } if foundFailureMessage { continue } if preferOriginalSourceLocation { if let failure = lastFailure { filePath = failure.location.file lineNumber = failure.location.line } } let message: String if let lastFailure = lastFailure { message = "Got failure message: \"\(lastFailure.message.stringValue)\", but expected \"\(msg)\"" } else { message = "expected failure message, but got none" } NimbleAssertionHandler.assert(false, message: FailureMessage(stringValue: message), location: SourceLocation(file: filePath, line: lineNumber)) } } func failsWithErrorMessage(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { return failsWithErrorMessage( [message], file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure ) } func failsWithErrorMessageForNil(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { failsWithErrorMessage("\(message) (use beNil() to match nils)", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure) } #if _runtime(_ObjC) func deferToMainQueue(action: () -> Void) { dispatch_async(dispatch_get_main_queue()) { NSThread.sleepForTimeInterval(0.01) action() } } #endif public class NimbleHelper : NSObject { public class func expectFailureMessage(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessages(messages: [NSString], block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(messages.map({ String($0) }), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessageForNil(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } } extension NSDate { convenience init(dateTimeString:String) { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") let date = dateFormatter.dateFromString(dateTimeString)! self.init(timeInterval:0, sinceDate:date) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/AllPassTest.swift ================================================ import XCTest import Nimble class AllPassTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAllPassArray", testAllPassArray), ("testAllPassMatcher", testAllPassMatcher), ("testAllPassCollectionsWithOptionalsDontWork", testAllPassCollectionsWithOptionalsDontWork), ("testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer", testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer), ("testAllPassSet", testAllPassSet), ("testAllPassWithNilAsExpectedValue", testAllPassWithNilAsExpectedValue), ] } func testAllPassArray() { expect([1,2,3,4]).to(allPass({$0 < 5})) expect([1,2,3,4]).toNot(allPass({$0 > 5})) failsWithErrorMessage( "expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass({$0 < 3})) } failsWithErrorMessage("expected to not all pass a condition") { expect([1,2,3,4]).toNot(allPass({$0 < 5})) } failsWithErrorMessage( "expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass("be something", {$0 < 3})) } failsWithErrorMessage("expected to not all be something") { expect([1,2,3,4]).toNot(allPass("be something", {$0 < 5})) } } func testAllPassMatcher() { expect([1,2,3,4]).to(allPass(beLessThan(5))) expect([1,2,3,4]).toNot(allPass(beGreaterThan(5))) failsWithErrorMessage( "expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass(beLessThan(3))) } failsWithErrorMessage("expected to not all be less than <5>") { expect([1,2,3,4]).toNot(allPass(beLessThan(5))) } } func testAllPassCollectionsWithOptionalsDontWork() { failsWithErrorMessage("expected to all be nil, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass(beNil())) } failsWithErrorMessage("expected to all pass a condition, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil})) } } func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() { expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil})) expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil})) expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1})) expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1})) expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4})) expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3})) expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3})) } func testAllPassSet() { expect(Set([1,2,3,4])).to(allPass({$0 < 5})) expect(Set([1,2,3,4])).toNot(allPass({$0 > 5})) failsWithErrorMessage("expected to not all pass a condition") { expect(Set([1,2,3,4])).toNot(allPass({$0 < 5})) } failsWithErrorMessage("expected to not all be something") { expect(Set([1,2,3,4])).toNot(allPass("be something", {$0 < 5})) } } func testAllPassWithNilAsExpectedValue() { failsWithErrorMessageForNil("expected to all pass") { expect(nil as [Int]?).to(allPass(beLessThan(5))) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class TestNull : NSNull {} class BeAKindOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(TestNull()).to(beAKindOf(NSNull)) expect(NSObject()).to(beAKindOf(NSObject)) expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be a kind of NSNull, got ") { expect(nil as NSNull?).toNot(beAKindOf(NSNull)) } failsWithErrorMessageForNil("expected to be a kind of NSString, got ") { expect(nil as NSString?).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to be a kind of NSString, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to not be a kind of NSNumber, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAKindOf(Int)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAKindOf(String)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAKindOf(TestEnum)) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift ================================================ import Foundation import XCTest import Nimble class BeAnInstanceOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(NSNull()).to(beAnInstanceOf(NSNull)) expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be an instance of NSNull, got ") { expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull)) } failsWithErrorMessageForNil("expected to be an instance of NSString, got ") { expect(nil as NSString?).to(beAnInstanceOf(NSString)) } #if _runtime(_ObjC) let numberTypeName = "__NSCFNumber" #else let numberTypeName = "NSNumber" #endif failsWithErrorMessage("expected to be an instance of NSString, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString)) } failsWithErrorMessage("expected to not be an instance of NSNumber, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAnInstanceOf(Int)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAnInstanceOf(String)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAnInstanceOf(TestEnum)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift ================================================ import Foundation import XCTest import Nimble class BeCloseToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeCloseTo", testBeCloseTo), ("testBeCloseToWithin", testBeCloseToWithin), ("testBeCloseToWithNSNumber", testBeCloseToWithNSNumber), ("testBeCloseToWithNSDate", testBeCloseToWithNSDate), ("testBeCloseToOperator", testBeCloseToOperator), ("testBeCloseToWithinOperator", testBeCloseToWithinOperator), ("testPlusMinusOperator", testPlusMinusOperator), ("testBeCloseToOperatorWithNSDate", testBeCloseToOperatorWithNSDate), ("testBeCloseToWithinOperatorWithNSDate", testBeCloseToWithinOperatorWithNSDate), ("testPlusMinusOperatorWithNSDate", testPlusMinusOperatorWithNSDate), ("testBeCloseToArray", testBeCloseToArray), ] } func testBeCloseTo() { expect(1.2).to(beCloseTo(1.2001)) expect(1.2 as CDouble).to(beCloseTo(1.2001)) expect(1.2 as Float).to(beCloseTo(1.2001)) failsWithErrorMessage("expected to not be close to <1.2001> (within 0.0001), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001)) } } func testBeCloseToWithin() { expect(1.2).to(beCloseTo(9.300, within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSNumber() { expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10)) expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10)) expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).to(beCloseTo(NSDate(dateTimeString: "2015-08-26 11:43:05"), within: 10)) failsWithErrorMessage("expected to not be close to <2015-08-26 11:43:00.0050> (within 0.004), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).toNot(beCloseTo(expectedDate, within: 0.004)) } #endif } func testBeCloseToOperator() { expect(1.2) ≈ 1.2001 expect(1.2 as CDouble) ≈ 1.2001 failsWithErrorMessage("expected to be close to <1.2002> (within 0.0001), got <1.2>") { expect(1.2) ≈ 1.2002 } } func testBeCloseToWithinOperator() { expect(1.2) ≈ (9.300, 10) expect(1.2) == (9.300, 10) failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ (1.0, 0.1) } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == (1.0, 0.1) } } func testPlusMinusOperator() { expect(1.2) ≈ 9.300 ± 10 expect(1.2) == 9.300 ± 10 failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ 1.0 ± 0.1 } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == 1.0 ± 0.1 } } func testBeCloseToOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:00") failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.0001), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate } #endif } func testBeCloseToWithinOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (expectedDate, 0.006) } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (expectedDate, 0.006) } #endif } func testPlusMinusOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate ± 0.006 } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == expectedDate ± 0.006 } #endif } func testBeCloseToArray() { expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001] expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1)) failsWithErrorMessage("expected to be close to <[0, 1]> (each within 0.0001), got <[0, 1.1]>") { expect([0.0, 1.1]) ≈ [0.0, 1.0] } failsWithErrorMessage("expected to be close to <[0.2, 1.2]> (each within 0.1), got <[0, 1.1]>") { expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift ================================================ import Foundation import XCTest import Nimble class BeEmptyTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeEmptyPositive", testBeEmptyPositive), ("testBeEmptyNegative", testBeEmptyNegative), ] } func testBeEmptyPositive() { expect([] as [Int]).to(beEmpty()) expect([1]).toNot(beEmpty()) expect([] as [CInt]).to(beEmpty()) expect([1] as [CInt]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSDictionary() as? [Int:Int]).to(beEmpty()) expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty()) #endif expect(Dictionary()).to(beEmpty()) expect(["hi": 1]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSArray() as? [Int]).to(beEmpty()) expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty()) #endif expect(NSSet()).to(beEmpty()) expect(NSSet(array: [NSNumber(integer: 1)])).toNot(beEmpty()) expect(NSIndexSet()).to(beEmpty()) expect(NSIndexSet(index: 1)).toNot(beEmpty()) expect(NSString()).to(beEmpty()) expect(NSString(string: "hello")).toNot(beEmpty()) expect("").to(beEmpty()) expect("foo").toNot(beEmpty()) } func testBeEmptyNegative() { failsWithErrorMessageForNil("expected to be empty, got ") { expect(nil as NSString?).to(beEmpty()) } failsWithErrorMessageForNil("expected to not be empty, got ") { expect(nil as [CInt]?).toNot(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSArray()).toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got <[1]>") { expect([1]).to(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <{()}>") { expect(NSSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <{(1)}>") { expect(NSSet(object: NSNumber(int: 1))).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSIndexSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <(1)>") { expect(NSIndexSet(index: 1)).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <>") { expect("").toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got ") { expect("foo").to(beEmpty()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThanOrEqualTo", testGreaterThanOrEqualTo), ("testGreaterThanOrEqualToOperator", testGreaterThanOrEqualToOperator), ] } func testGreaterThanOrEqualTo() { expect(10).to(beGreaterThanOrEqualTo(10)) expect(10).to(beGreaterThanOrEqualTo(2)) expect(1).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2))) #if _runtime(_ObjC) expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0))) #endif failsWithErrorMessage("expected to be greater than or equal to <2>, got <0>") { expect(0).to(beGreaterThanOrEqualTo(2)) return } failsWithErrorMessage("expected to not be greater than or equal to <1>, got <1>") { expect(1).toNot(beGreaterThanOrEqualTo(1)) return } failsWithErrorMessageForNil("expected to be greater than or equal to <-2>, got ") { expect(nil as Int?).to(beGreaterThanOrEqualTo(-2)) } failsWithErrorMessageForNil("expected to not be greater than or equal to <1>, got ") { expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1)) } } func testGreaterThanOrEqualToOperator() { expect(0) >= 0 expect(1) >= 0 expect(NSNumber(int:1)) >= 1 expect(NSNumber(int:1)) >= NSNumber(int:1) failsWithErrorMessage("expected to be greater than or equal to <2>, got <1>") { expect(1) >= 2 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThan", testGreaterThan), ("testGreaterThanOperator", testGreaterThanOperator), ] } func testGreaterThan() { expect(10).to(beGreaterThan(2)) expect(1).toNot(beGreaterThan(2)) #if _runtime(_ObjC) expect(NSNumber(int:3)).to(beGreaterThan(2)) #endif expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2))) failsWithErrorMessage("expected to be greater than <2>, got <0>") { expect(0).to(beGreaterThan(2)) } failsWithErrorMessage("expected to not be greater than <0>, got <1>") { expect(1).toNot(beGreaterThan(0)) } failsWithErrorMessageForNil("expected to be greater than <-2>, got ") { expect(nil as Int?).to(beGreaterThan(-2)) } failsWithErrorMessageForNil("expected to not be greater than <0>, got ") { expect(nil as Int?).toNot(beGreaterThan(0)) } } func testGreaterThanOperator() { expect(1) > 0 expect(NSNumber(int:1)) > NSNumber(int:0) #if _runtime(_ObjC) expect(NSNumber(int:1)) > 0 #endif failsWithErrorMessage("expected to be greater than <2>, got <1>") { expect(1) > 2 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift ================================================ import Foundation import XCTest import Nimble class BeIdenticalToObjectTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testFailsOnNils", testFailsOnNils), ("testOperators", testOperators), ] } private class BeIdenticalToObjectTester {} private let testObjectA = BeIdenticalToObjectTester() private let testObjectB = BeIdenticalToObjectTester() func testBeIdenticalToPositive() { expect(self.testObjectA).to(beIdenticalTo(testObjectA)) } func testBeIdenticalToNegative() { expect(self.testObjectA).toNot(beIdenticalTo(testObjectB)) } func testBeIdenticalToPositiveMessage() { let message = String(NSString(format: "expected to be identical to <%p>, got <%p>", unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).to(beIdenticalTo(self.testObjectB)) } } func testBeIdenticalToNegativeMessage() { let message = String(NSString(format: "expected to not be identical to <%p>, got <%p>", unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA)) } } func testFailsOnNils() { let message1 = String(NSString(format: "expected to be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message1) { expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA)) } let message2 = String(NSString(format: "expected to not be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message2) { expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA)) } } func testOperators() { expect(self.testObjectA) === testObjectA expect(self.testObjectA) !== testObjectB } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift ================================================ import Foundation import XCTest @testable import Nimble class BeIdenticalToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testOperators", testOperators), ("testBeAlias", testBeAlias) ] } func testBeIdenticalToPositive() { let value = NSDate() expect(value).to(beIdenticalTo(value)) } func testBeIdenticalToNegative() { expect(NSNumber(integer:1)).toNot(beIdenticalTo(NSString(string: "yo"))) expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) } func testBeIdenticalToPositiveMessage() { let num1 = NSNumber(integer:1) let num2 = NSNumber(integer:2) let message = "expected to be identical to \(identityAsString(num2)), got \(identityAsString(num1))" failsWithErrorMessage(message) { expect(num1).to(beIdenticalTo(num2)) } } func testBeIdenticalToNegativeMessage() { let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(beIdenticalTo(value2)) } } func testOperators() { let value = NSDate() expect(value) === value expect(NSNumber(integer:1)) !== NSNumber(integer:2) } func testBeAlias() { let value = NSDate() expect(value).to(be(value)) expect(NSNumber(integer:1)).toNot(be(NSString(stringLiteral: "turtles"))) #if _runtime(_ObjC) expect([1]).toNot(be([1])) #else expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) #endif let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(be(value2)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThanOrEqualTo", testLessThanOrEqualTo), ("testLessThanOrEqualToOperator", testLessThanOrEqualToOperator), ] } func testLessThanOrEqualTo() { expect(10).to(beLessThanOrEqualTo(10)) expect(2).to(beLessThanOrEqualTo(10)) expect(2).toNot(beLessThanOrEqualTo(1)) expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10)) expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1)) #if _runtime(_ObjC) expect(2).to(beLessThanOrEqualTo(NSNumber(int:10))) expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1))) #endif failsWithErrorMessage("expected to be less than or equal to <0>, got <2>") { expect(2).to(beLessThanOrEqualTo(0)) return } failsWithErrorMessage("expected to not be less than or equal to <0>, got <0>") { expect(0).toNot(beLessThanOrEqualTo(0)) return } failsWithErrorMessageForNil("expected to be less than or equal to <2>, got ") { expect(nil as Int?).to(beLessThanOrEqualTo(2)) return } failsWithErrorMessageForNil("expected to not be less than or equal to <-2>, got ") { expect(nil as Int?).toNot(beLessThanOrEqualTo(-2)) return } } func testLessThanOrEqualToOperator() { expect(0) <= 1 expect(1) <= 1 failsWithErrorMessage("expected to be less than or equal to <1>, got <2>") { expect(2) <= 1 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThan", testLessThan), ("testLessThanOperator", testLessThanOperator), ] } func testLessThan() { expect(2).to(beLessThan(10)) expect(2).toNot(beLessThan(1)) #if _runtime(_ObjC) expect(NSNumber(integer:2)).to(beLessThan(10)) expect(NSNumber(integer:2)).toNot(beLessThan(1)) expect(2).to(beLessThan(NSNumber(integer:10))) expect(2).toNot(beLessThan(NSNumber(integer:1))) #endif failsWithErrorMessage("expected to be less than <0>, got <2>") { expect(2).to(beLessThan(0)) } failsWithErrorMessage("expected to not be less than <1>, got <0>") { expect(0).toNot(beLessThan(1)) } failsWithErrorMessageForNil("expected to be less than <2>, got ") { expect(nil as Int?).to(beLessThan(2)) } failsWithErrorMessageForNil("expected to not be less than <-1>, got ") { expect(nil as Int?).toNot(beLessThan(-1)) } } func testLessThanOperator() { expect(0) < 1 #if _runtime(_ObjC) expect(NSNumber(int:0)) < 1 #endif failsWithErrorMessage("expected to be less than <1>, got <2>") { expect(2) < 1 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift ================================================ import XCTest import Nimble enum ConvertsToBool : BooleanType, CustomStringConvertible { case TrueLike, FalseLike var boolValue : Bool { switch self { case .TrueLike: return true case .FalseLike: return false } } var description : String { switch self { case .TrueLike: return "TrueLike" case .FalseLike: return "FalseLike" } } } class BeTruthyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNonNilTypes", testShouldMatchNonNilTypes), ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchNilTypes", testShouldNotMatchNilTypes), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ("testShouldMatchBoolConvertibleTypesThatConvertToTrue", testShouldMatchBoolConvertibleTypesThatConvertToTrue), ("testShouldNotMatchBoolConvertibleTypesThatConvertToFalse", testShouldNotMatchBoolConvertibleTypesThatConvertToFalse), ] } func testShouldMatchNonNilTypes() { expect(true as Bool?).to(beTruthy()) expect(1 as Int?).to(beTruthy()) } func testShouldMatchTrue() { expect(true).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(true).toNot(beTruthy()) } } func testShouldNotMatchNilTypes() { expect(false as Bool?).toNot(beTruthy()) expect(nil as Bool?).toNot(beTruthy()) expect(nil as Int?).toNot(beTruthy()) } func testShouldNotMatchFalse() { expect(false).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(false).to(beTruthy()) } } func testShouldNotMatchNilBools() { expect(nil as Bool?).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(nil as Bool?).to(beTruthy()) } } func testShouldMatchBoolConvertibleTypesThatConvertToTrue() { expect(ConvertsToBool.TrueLike).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(ConvertsToBool.TrueLike).toNot(beTruthy()) } } func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() { expect(ConvertsToBool.FalseLike).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(ConvertsToBool.FalseLike).to(beTruthy()) } } } class BeTrueTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldMatchTrue() { expect(true).to(beTrue()) failsWithErrorMessage("expected to not be true, got ") { expect(true).toNot(beTrue()) } } func testShouldNotMatchFalse() { expect(false).toNot(beTrue()) failsWithErrorMessage("expected to be true, got ") { expect(false).to(beTrue()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to not be true, got ") { expect(nil as Bool?).toNot(beTrue()) } failsWithErrorMessageForNil("expected to be true, got ") { expect(nil as Bool?).to(beTrue()) } } } class BeFalsyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNilTypes", testShouldMatchNilTypes), ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldNotMatchNonNilTypes", testShouldNotMatchNonNilTypes), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldMatchNilBools", testShouldMatchNilBools), ] } func testShouldMatchNilTypes() { expect(false as Bool?).to(beFalsy()) expect(nil as Bool?).to(beFalsy()) expect(nil as Int?).to(beFalsy()) } func testShouldNotMatchTrue() { expect(true).toNot(beFalsy()) failsWithErrorMessage("expected to be falsy, got ") { expect(true).to(beFalsy()) } } func testShouldNotMatchNonNilTypes() { expect(true as Bool?).toNot(beFalsy()) expect(1 as Int?).toNot(beFalsy()) } func testShouldMatchFalse() { expect(false).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(false).toNot(beFalsy()) } } func testShouldMatchNilBools() { expect(nil as Bool?).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(nil as Bool?).toNot(beFalsy()) } } } class BeFalseTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldNotMatchTrue() { expect(true).toNot(beFalse()) failsWithErrorMessage("expected to be false, got ") { expect(true).to(beFalse()) } } func testShouldMatchFalse() { expect(false).to(beFalse()) failsWithErrorMessage("expected to not be false, got ") { expect(false).toNot(beFalse()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to be false, got ") { expect(nil as Bool?).to(beFalse()) } failsWithErrorMessageForNil("expected to not be false, got ") { expect(nil as Bool?).toNot(beFalse()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeNilTest.swift ================================================ import XCTest import Nimble class BeNilTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeNil", testBeNil), ] } func producesNil() -> Array? { return nil } func testBeNil() { expect(nil as Int?).to(beNil()) expect(1 as Int?).toNot(beNil()) expect(self.producesNil()).to(beNil()) failsWithErrorMessage("expected to not be nil, got ") { expect(nil as Int?).toNot(beNil()) } failsWithErrorMessage("expected to be nil, got <1>") { expect(1 as Int?).to(beNil()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift ================================================ import XCTest import Nimble class BeVoidTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeVoid", testBeVoid), ] } func testBeVoid() { expect(()).to(beVoid()) expect(() as ()?).to(beVoid()) expect(nil as ()?).toNot(beVoid()) expect(()) == () expect(() as ()?) == () expect(nil as ()?) != () failsWithErrorMessage("expected to not be void, got <()>") { expect(()).toNot(beVoid()) } failsWithErrorMessage("expected to not be void, got <()>") { expect(() as ()?).toNot(beVoid()) } failsWithErrorMessage("expected to be void, got ") { expect(nil as ()?).to(beVoid()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift ================================================ import Foundation import XCTest import Nimble class BeginWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testNegativeMatches", testNegativeMatches), ] } func testPositiveMatches() { expect([1, 2, 3]).to(beginWith(1)) expect([1, 2, 3]).toNot(beginWith(2)) expect("foobar").to(beginWith("foo")) expect("foobar").toNot(beginWith("oo")) expect(NSString(string: "foobar").description).to(beginWith("foo")) expect(NSString(string: "foobar").description).toNot(beginWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(beginWith("a")) expect(NSArray(array: ["a", "b"])).toNot(beginWith("b")) #endif } func testNegativeMatches() { failsWithErrorMessageForNil("expected to begin with , got ") { expect(nil as NSArray?).to(beginWith(NSString(string: "b"))) } failsWithErrorMessageForNil("expected to not begin with , got ") { expect(nil as NSArray?).toNot(beginWith(NSString(string: "b"))) } failsWithErrorMessage("expected to begin with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(beginWith(2)) } failsWithErrorMessage("expected to not begin with <1>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(beginWith(1)) } failsWithErrorMessage("expected to begin with , got ") { expect("batman").to(beginWith("atm")) } failsWithErrorMessage("expected to not begin with , got ") { expect("batman").toNot(beginWith("bat")) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ContainTest.swift ================================================ import Foundation import XCTest import Nimble class ContainTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testContain", testContain), ("testContainSubstring", testContainSubstring), ("testContainObjCSubstring", testContainObjCSubstring), ("testVariadicArguments", testVariadicArguments), ("testCollectionArguments", testCollectionArguments), ] } func testContain() { expect([1, 2, 3]).to(contain(1)) expect([1, 2, 3] as [CInt]).to(contain(1 as CInt)) expect([1, 2, 3] as Array).to(contain(1 as CInt)) expect(["foo", "bar", "baz"]).to(contain("baz")) expect([1, 2, 3]).toNot(contain(4)) expect(["foo", "bar", "baz"]).toNot(contain("ba")) #if _runtime(_ObjC) expect(NSArray(array: ["a"])).to(contain(NSString(string: "a"))) expect(NSArray(array: ["a"])).toNot(contain(NSString(string:"b"))) expect(NSArray(object: 1) as NSArray?).to(contain(1)) #endif failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("b")) } failsWithErrorMessageForNil("expected to contain , got ") { expect(nil as [String]?).to(contain("bar")) } failsWithErrorMessageForNil("expected to not contain , got ") { expect(nil as [String]?).toNot(contain("b")) } } func testContainSubstring() { expect("foo").to(contain("o")) expect("foo").to(contain("oo")) expect("foo").toNot(contain("z")) expect("foo").toNot(contain("zz")) failsWithErrorMessage("expected to contain , got ") { expect("foo").to(contain("bar")) } failsWithErrorMessage("expected to not contain , got ") { expect("foo").toNot(contain("oo")) } } func testContainObjCSubstring() { let str = NSString(string: "foo") expect(str).to(contain(NSString(string: "o"))) expect(str).to(contain(NSString(string: "oo"))) expect(str).toNot(contain(NSString(string: "z"))) expect(str).toNot(contain(NSString(string: "zz"))) } func testVariadicArguments() { expect([1, 2, 3]).to(contain(1, 2)) expect([1, 2, 3]).toNot(contain(1, 4)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("a", "bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("bar", "b")) } } func testCollectionArguments() { expect([1, 2, 3]).to(contain([1, 2])) expect([1, 2, 3]).toNot(contain([1, 4])) let collection = Array(1...10) let slice = Array(collection[3...5]) expect(collection).to(contain(slice)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain(["a", "bar"])) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain(["bar", "b"])) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EndWithTest.swift ================================================ import Foundation import XCTest import Nimble class EndWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEndWithPositives", testEndWithPositives), ("testEndWithNegatives", testEndWithNegatives), ] } func testEndWithPositives() { expect([1, 2, 3]).to(endWith(3)) expect([1, 2, 3]).toNot(endWith(2)) expect("foobar").to(endWith("bar")) expect("foobar").toNot(endWith("oo")) expect(NSString(string: "foobar").description).to(endWith("bar")) expect(NSString(string: "foobar").description).toNot(endWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(endWith("b")) expect(NSArray(array: ["a", "b"])).toNot(endWith("a")) #endif } func testEndWithNegatives() { failsWithErrorMessageForNil("expected to end with <2>, got ") { expect(nil as [Int]?).to(endWith(2)) } failsWithErrorMessageForNil("expected to not end with <2>, got ") { expect(nil as [Int]?).toNot(endWith(2)) } failsWithErrorMessage("expected to end with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(endWith(2)) } failsWithErrorMessage("expected to not end with <3>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(endWith(3)) } failsWithErrorMessage("expected to end with , got ") { expect("batman").to(endWith("atm")) } failsWithErrorMessage("expected to not end with , got ") { expect("batman").toNot(endWith("man")) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EqualTest.swift ================================================ import Foundation import XCTest import Nimble class EqualTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEquality", testEquality), ("testArrayEquality", testArrayEquality), ("testSetEquality", testSetEquality), ("testDoesNotMatchNils", testDoesNotMatchNils), ("testDictionaryEquality", testDictionaryEquality), ("testDataEquality", testDataEquality), ("testNSObjectEquality", testNSObjectEquality), ("testOperatorEquality", testOperatorEquality), ("testOperatorEqualityWithArrays", testOperatorEqualityWithArrays), ("testOperatorEqualityWithDictionaries", testOperatorEqualityWithDictionaries), ("testOptionalEquality", testOptionalEquality), ("testArrayOfOptionalsEquality", testArrayOfOptionalsEquality), ("testDictionariesWithDifferentSequences", testDictionariesWithDifferentSequences), ] } func testEquality() { expect(1 as CInt).to(equal(1 as CInt)) expect(1 as CInt).to(equal(1)) expect(1).to(equal(1)) expect("hello").to(equal("hello")) expect("hello").toNot(equal("world")) expect { 1 }.to(equal(1)) failsWithErrorMessage("expected to equal , got ") { expect("hello").to(equal("world")) } failsWithErrorMessage("expected to not equal , got ") { expect("hello").toNot(equal("hello")) } } func testArrayEquality() { expect([1, 2, 3]).to(equal([1, 2, 3])) expect([1, 2, 3]).toNot(equal([1, 2])) expect([1, 2, 3]).toNot(equal([1, 2, 4])) let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] expect(array1).to(equal(array2)) expect(array1).to(equal([1, 2, 3])) expect(array1).toNot(equal([1, 2] as Array)) #if _runtime(_ObjC) expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3]))) #endif failsWithErrorMessage("expected to equal <[1, 2]>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(equal([1, 2])) } } func testSetEquality() { expect(Set([1, 2])).to(equal(Set([1, 2]))) expect(Set()).to(equal(Set())) expect(Set()) == Set() expect(Set([1, 2])) != Set() failsWithErrorMessageForNil("expected to equal <[1, 2]>, got ") { expect(nil as Set?).to(equal(Set([1, 2]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>") { expect(Set([2, 3])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>") { expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])) == Set([1, 2, 3]) } failsWithErrorMessage("expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>") { expect(Set([1, 2, 3])) != Set([1, 2, 3]) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as String?).to(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect("foo").toNot(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect(nil as String?).toNot(equal("bar")) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int]?).to(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1]>, got ") { expect(nil as [Int]?).toNot(equal([1])) } failsWithErrorMessageForNil("expected to not equal , got <[1]>") { expect([1]).toNot(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1: 1]>, got ") { expect(nil as [Int: Int]?).toNot(equal([1: 1])) } failsWithErrorMessageForNil("expected to not equal , got <[1: 1]>") { expect([1: 1]).toNot(equal(nil as [Int: Int]?)) } } func testDictionaryEquality() { expect(["foo": "bar"]).to(equal(["foo": "bar"])) expect(["foo": "bar"]).toNot(equal(["foo": "baz"])) let actual = ["foo": "bar"] let expected = ["foo": "bar"] let unexpected = ["foo": "baz"] expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if _runtime(_ObjC) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(["foo": "bar"])) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(expected)) #endif } func testDataEquality() { let actual = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let expected = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let unexpected = "foobarfoo".dataUsingEncoding(NSUTF8StringEncoding) expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11) let expectedErrorMessage = "expected to equal >, got >" #else let expectedErrorMessage = "expected to equal >," + " got >" #endif failsWithErrorMessage(expectedErrorMessage) { expect(actual).to(equal(unexpected)) } } func testNSObjectEquality() { expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1))) expect(NSNumber(integer:1)) == NSNumber(integer:1) expect(NSNumber(integer:1)) != NSNumber(integer:2) expect { NSNumber(integer:1) }.to(equal(1)) } func testOperatorEquality() { expect("foo") == "foo" expect("foo") != "bar" failsWithErrorMessage("expected to equal , got ") { expect("hello") == "world" return } failsWithErrorMessage("expected to not equal , got ") { expect("hello") != "hello" return } } func testOperatorEqualityWithArrays() { let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] let array3: Array = [1, 2] expect(array1) == array2 expect(array1) != array3 } func testOperatorEqualityWithDictionaries() { let dict1 = ["foo": "bar"] let dict2 = ["foo": "bar"] let dict3 = ["foo": "baz"] expect(dict1) == dict2 expect(dict1) != dict3 } func testOptionalEquality() { expect(1 as CInt?).to(equal(1)) expect(1 as CInt?).to(equal(1 as CInt?)) expect(1).toNot(equal(nil)) } func testArrayOfOptionalsEquality() { let array1: Array = [1, nil, 3] let array2: Array = [nil, 2, 3] let array3: Array = [1, nil, 3] expect(array1).toNot(equal(array2)) expect(array1).to(equal(array3)) expect(array2).toNot(equal(array3)) let allNils1: Array = [nil, nil, nil, nil] let allNils2: Array = [nil, nil, nil, nil] let notReallyAllNils: Array = [nil, nil, nil, "turtles"] expect(allNils1).to(equal(allNils2)) expect(allNils1).toNot(equal(notReallyAllNils)) let noNils1: Array = [1, 2, 3, 4, 5] let noNils2: Array = [1, 3, 5, 7, 9] expect(noNils1).toNot(equal(noNils2)) failsWithErrorMessage("expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>") { let arrayOfOptionalInts: Array = [nil, 2] let anotherArrayOfOptionalInts: Array = [1, nil] expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts)) return } } func testDictionariesWithDifferentSequences() { // see: https://github.com/Quick/Nimble/issues/61 // these dictionaries generate different orderings of sequences. let result = ["how":1, "think":1, "didnt":2, "because":1, "interesting":1, "always":1, "right":1, "such":1, "to":3, "say":1, "cool":1, "you":1, "weather":3, "be":1, "went":1, "was":2, "sometimes":1, "and":3, "mind":1, "rain":1, "whole":1, "everything":1, "weather.":1, "down":1, "kind":1, "mood.":1, "it":2, "everyday":1, "might":1, "more":1, "have":2, "person":1, "could":1, "tenth":2, "night":1, "write":1, "Youd":1, "affects":1, "of":3, "Who":1, "us":1, "an":1, "I":4, "my":1, "much":2, "wrong.":1, "peacefully.":1, "amazing":3, "would":4, "just":1, "grade.":1, "Its":2, "The":2, "had":1, "that":1, "the":5, "best":1, "but":1, "essay":1, "for":1, "summer":2, "your":1, "grade":1, "vary":1, "pretty":1, "at":1, "rain.":1, "about":1, "allow":1, "thought":1, "in":1, "sleep":1, "a":1, "hot":1, "really":1, "beach":1, "life.":1, "we":1, "although":1] let storyCount = ["The":2, "summer":2, "of":3, "tenth":2, "grade":1, "was":2, "the":5, "best":1, "my":1, "life.":1, "I":4, "went":1, "to":3, "beach":1, "everyday":1, "and":3, "we":1, "had":1, "amazing":3, "weather.":1, "weather":3, "didnt":2, "really":1, "vary":1, "much":2, "always":1, "pretty":1, "hot":1, "although":1, "sometimes":1, "at":1, "night":1, "it":2, "would":4, "rain.":1, "mind":1, "rain":1, "because":1, "cool":1, "everything":1, "down":1, "allow":1, "us":1, "sleep":1, "peacefully.":1, "Its":2, "how":1, "affects":1, "your":1, "mood.":1, "Who":1, "have":2, "thought":1, "that":1, "could":1, "write":1, "a":1, "whole":1, "essay":1, "just":1, "about":1, "in":1, "grade.":1, "kind":1, "right":1, "Youd":1, "think":1, "for":1, "such":1, "an":1, "interesting":1, "person":1, "might":1, "more":1, "say":1, "but":1, "you":1, "be":1, "wrong.":1] expect(result).to(equal(storyCount)) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift ================================================ import XCTest import Nimble class HaveCountTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testHaveCountForArray", testHaveCountForArray), ("testHaveCountForDictionary", testHaveCountForDictionary), ("testHaveCountForSet", testHaveCountForSet), ] } func testHaveCountForArray() { expect([1, 2, 3]).to(haveCount(3)) expect([1, 2, 3]).notTo(haveCount(1)) failsWithErrorMessage("expected to have Array with count 1, got 3\nActual Value: [1, 2, 3]") { expect([1, 2, 3]).to(haveCount(1)) } failsWithErrorMessage("expected to not have Array with count 3, got 3\nActual Value: [1, 2, 3]") { expect([1, 2, 3]).notTo(haveCount(3)) } } func testHaveCountForDictionary() { let dictionary = ["1":1, "2":2, "3":3] expect(dictionary).to(haveCount(3)) expect(dictionary).notTo(haveCount(1)) failsWithErrorMessage("expected to have Dictionary with count 1, got 3\nActual Value: \(stringify(dictionary))") { expect(dictionary).to(haveCount(1)) } failsWithErrorMessage("expected to not have Dictionary with count 3, got 3" + "\nActual Value: \(stringify(dictionary))") { expect(dictionary).notTo(haveCount(3)) } } func testHaveCountForSet() { let set = Set([1, 2, 3]) expect(set).to(haveCount(3)) expect(set).notTo(haveCount(1)) failsWithErrorMessage("expected to have Set with count 1, got 3" + "\nActual Value: \(stringify(set))") { expect(set).to(haveCount(1)) } failsWithErrorMessage("expected to not have Set with count 3, got 3" + "\nActual Value: \(stringify(set))") { expect(set).notTo(haveCount(3)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift ================================================ import Foundation import XCTest import Nimble class MatchErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchErrorPositive", testMatchErrorPositive), ("testMatchErrorNegative", testMatchErrorNegative), ("testMatchNSErrorPositive", testMatchNSErrorPositive), ("testMatchNSErrorNegative", testMatchNSErrorNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testDoesNotMatchNils", testDoesNotMatchNils), ] } func testMatchErrorPositive() { expect(Error.Laugh).to(matchError(Error.Laugh)) expect(Error.Laugh).to(matchError(Error.self)) expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 1))) expect(Error.Laugh as ErrorType).to(matchError(Error.Laugh)) } func testMatchErrorNegative() { expect(Error.Laugh).toNot(matchError(Error.Cry)) expect(Error.Laugh as ErrorType).toNot(matchError(Error.Cry)) } func testMatchNSErrorPositive() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 0, userInfo: nil) expect(error1).to(matchError(error2)) } func testMatchNSErrorNegative() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).toNot(matchError(error2)) } func testMatchPositiveMessage() { failsWithErrorMessage("expected to match error , got ") { expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 2))) } failsWithErrorMessage("expected to match error , got ") { expect(Error.Laugh).to(matchError(Error.Cry)) } failsWithErrorMessage("expected to match error , got ") { expect(CustomDebugStringConvertibleError.A).to(matchError(CustomDebugStringConvertibleError.B)) } failsWithErrorMessage("expected to match error , got ") { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).to(matchError(error2)) } } func testMatchNegativeMessage() { failsWithErrorMessage("expected to not match error , got ") { expect(Error.Laugh).toNot(matchError(Error.Laugh)) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to match error , got no error") { expect(nil as ErrorType?).to(matchError(Error.Laugh)) } failsWithErrorMessageForNil("expected to not match error , got no error") { expect(nil as ErrorType?).toNot(matchError(Error.Laugh)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class MatchTest:XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchPositive", testMatchPositive), ("testMatchNegative", testMatchNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testMatchNils", testMatchNils), ] } func testMatchPositive() { expect("11:14").to(match("\\d{2}:\\d{2}")) } func testMatchNegative() { expect("hello").toNot(match("\\d{2}:\\d{2}")) } func testMatchPositiveMessage() { let message = "expected to match <\\d{2}:\\d{2}>, got " failsWithErrorMessage(message) { expect("hello").to(match("\\d{2}:\\d{2}")) } } func testMatchNegativeMessage() { let message = "expected to not match <\\d{2}:\\d{2}>, got <11:14>" failsWithErrorMessage(message) { expect("11:14").toNot(match("\\d{2}:\\d{2}")) } } func testMatchNils() { failsWithErrorMessageForNil("expected to match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).to(match("\\d{2}:\\d{2}")) } failsWithErrorMessageForNil("expected to not match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).toNot(match("\\d{2}:\\d{2}")) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift ================================================ import XCTest import Nimble import Foundation class PostNotificationTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPassesWhenNoNotificationsArePosted", testPassesWhenNoNotificationsArePosted), ("testPassesWhenExpectedNotificationIsPosted", testPassesWhenExpectedNotificationIsPosted), ("testPassesWhenAllExpectedNotificationsArePosted", testPassesWhenAllExpectedNotificationsArePosted), ("testFailsWhenNoNotificationsArePosted", testFailsWhenNoNotificationsArePosted), ("testFailsWhenNotificationWithWrongNameIsPosted", testFailsWhenNotificationWithWrongNameIsPosted), ("testFailsWhenNotificationWithWrongObjectIsPosted", testFailsWhenNotificationWithWrongObjectIsPosted), ("testPassesWhenExpectedNotificationEventuallyIsPosted", testPassesWhenExpectedNotificationEventuallyIsPosted), ] } var notificationCenter: NSNotificationCenter! #if _runtime(_ObjC) override func setUp() { _setUp() super.setUp() } #else func setUp() { _setUp() } #endif func _setUp() { notificationCenter = NSNotificationCenter() } func testPassesWhenNoNotificationsArePosted() { expect { // no notifications here! return nil }.to(postNotifications(beEmpty(), fromNotificationCenter: notificationCenter)) } func testPassesWhenExpectedNotificationIsPosted() { let testNotification = NSNotification(name: "Foo", object: nil) expect { self.notificationCenter.postNotification(testNotification) }.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) } func testPassesWhenAllExpectedNotificationsArePosted() { let foo = NSNumber(int: 1) let bar = NSNumber(int: 2) let n1 = NSNotification(name: "Foo", object: foo) let n2 = NSNotification(name: "Bar", object: bar) expect { self.notificationCenter.postNotification(n1) self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1, n2]), fromNotificationCenter: notificationCenter)) } func testFailsWhenNoNotificationsArePosted() { let testNotification = NSNotification(name: "Foo", object: nil) failsWithErrorMessage("expected to equal <[\(testNotification)]>, got no notifications") { expect { // no notifications here! return nil }.to(postNotifications(equal([testNotification]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongNameIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name + "a", object: nil) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongObjectIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name, object: NSObject()) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testPassesWhenExpectedNotificationEventuallyIsPosted() { #if _runtime(_ObjC) let testNotification = NSNotification(name: "Foo", object: nil) expect { deferToMainQueue { self.notificationCenter.postNotification(testNotification) } return nil }.toEventually(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) #else print("\(#function) is missing because toEventually is not implement on this platform") #endif } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) && !SWIFT_PACKAGE class RaisesExceptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testNegativeMatchesDoNotCallClosureWithoutException", testNegativeMatchesDoNotCallClosureWithoutException), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } var anException = NSException(name: "laugh", reason: "Lulz", userInfo: ["key": "value"]) func testPositiveMatches() { expect { self.anException.raise() }.to(raiseException()) expect { self.anException.raise() }.to(raiseException(named: "laugh")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } func testPositiveMatchesWithClosures() { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("laugh")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).toNot(beginWith("df")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) } func testNegativeMatches() { failsWithErrorMessage("expected to raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "foo")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "bar")) } failsWithErrorMessage( "expected to raise exception with name with reason with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["k": "v"])) } failsWithErrorMessage("expected to raise any exception, got no exception") { expect { self.anException }.to(raiseException()) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } failsWithErrorMessage("expected to raise exception with name with reason , got no exception") { expect { self.anException }.to(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "bar", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh")) } failsWithErrorMessage("expected to not raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name with reason with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } } func testNegativeMatchesDoNotCallClosureWithoutException() { failsWithErrorMessage("expected to raise exception that satisfies block, got no exception") { expect { self.anException }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "ha") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason with userInfo <{}> that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } } func testNegativeMatchesWithClosure() { failsWithErrorMessage("expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } let innerFailureMessage = "expected to begin with , got " failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "wrong") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift ================================================ import XCTest import Nimble class SatisfyAnyOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testSatisfyAnyOf", testSatisfyAnyOf), ("testOperatorOr", testOperatorOr), ] } func testSatisfyAnyOf() { expect(2).to(satisfyAnyOf(equal(2), equal(3))) #if _runtime(_ObjC) expect(2).toNot(satisfyAnyOf(equal(3), equal("turtles"))) #endif expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3))) expect("turtle").toNot(satisfyAnyOf(contain("a"), endWith("magic"))) expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) expect(false).to(satisfyAnyOf(beTrue(), beFalse())) expect(true).to(satisfyAnyOf(beTruthy(), beFalsy())) failsWithErrorMessage( "expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2") { expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5))) } failsWithErrorMessage( "expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]") { expect([5,6,7]).to(satisfyAnyOf(allPass("be less than 4", {$0 < 4}), equal([1,2,3,4]))) } failsWithErrorMessage( "expected to match one of: {be true}, got false") { expect(false).to(satisfyAnyOf(beTrue())) } failsWithErrorMessage( "expected to not match one of: {be less than <10.5>}, or {be greater than <100.75>}, or {be close to <50.1> (within 0.0001)}, got 50.10001") { expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) } } func testOperatorOr() { expect(2).to(equal(2) || equal(3)) #if _runtime(_ObjC) expect(2).toNot(equal(3) || equal("turtles")) #endif expect("turtle").toNot(contain("a") || endWith("magic")) expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75)) expect(false).to(beTrue() || beFalse()) expect(true).to(beTruthy() || beFalsy()) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift ================================================ import XCTest import Nimble enum Error : ErrorType { case Laugh case Cry } enum EquatableError : ErrorType { case Parameterized(x: Int) } extension EquatableError : Equatable { } func ==(lhs: EquatableError, rhs: EquatableError) -> Bool { switch (lhs, rhs) { case (.Parameterized(let l), .Parameterized(let r)): return l == r } } enum CustomDebugStringConvertibleError : ErrorType { case A case B } extension CustomDebugStringConvertibleError : CustomDebugStringConvertible { var debugDescription : String { return "code=\(_code)" } } class ThrowErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testPositiveNegatedMatches", testPositiveNegatedMatches), ("testNegativeNegatedMatches", testNegativeNegatedMatches), ("testNegativeMatchesDoNotCallClosureWithoutError", testNegativeMatchesDoNotCallClosureWithoutError), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } func testPositiveMatches() { expect { throw Error.Laugh }.to(throwError()) expect { throw Error.Laugh }.to(throwError(Error.Laugh)) expect { throw Error.Laugh }.to(throwError(errorType: Error.self)) expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1))) } func testPositiveMatchesWithClosures() { // Generic typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in guard case EquatableError.Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Explicit typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over errorType argument expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).to(beginWith("Nim")) }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).toNot(beginWith("as")) }) } func testNegativeMatches() { // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Different case failsWithErrorMessage("expected to throw error , got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry)) } // Different case with closure failsWithErrorMessage("expected to throw error that satisfies block, got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return }) } // Different case, implementing CustomDebugStringConvertible failsWithErrorMessage("expected to throw error , got ") { expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B)) } } func testPositiveNegatedMatches() { // No error at all expect { return }.toNot(throwError()) // Different case expect { throw Error.Laugh }.toNot(throwError(Error.Cry)) } func testNegativeNegatedMatches() { // No error at all failsWithErrorMessage("expected to not throw any error, got ") { expect { throw Error.Laugh }.toNot(throwError()) } // Different error failsWithErrorMessage("expected to not throw error , got ") { expect { throw Error.Laugh }.toNot(throwError(Error.Laugh)) } } func testNegativeMatchesDoNotCallClosureWithoutError() { failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError { error in fail() }) } failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError(Error.Laugh) { error in fail() }) } } func testNegativeMatchesWithClosure() { #if SWIFT_PACKAGE let moduleName = "Nimbletest" #else let moduleName = "NimbleTests" #endif let innerFailureMessage = "expected to equal , got <\(moduleName).Error>" let closure = { (error: Error) in print("** In closure! With domain \(error._domain)") expect(error._domain).to(equal("foo")) } failsWithErrorMessage([innerFailureMessage, "expected to throw error from type that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(closure: closure)) } failsWithErrorMessage([innerFailureMessage, "expected to throw error that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/SynchronousTests.swift ================================================ import Foundation import XCTest import Nimble class SynchronousTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testFailAlwaysFails", testFailAlwaysFails), ("testUnexpectedErrorsThrownFails", testUnexpectedErrorsThrownFails), ("testToMatchesIfMatcherReturnsTrue", testToMatchesIfMatcherReturnsTrue), ("testToProvidesActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToMatchAgainstLazyProperties", testToMatchAgainstLazyProperties), ("testToNotMatchesIfMatcherReturnsTrue", testToNotMatchesIfMatcherReturnsTrue), ("testToNotProvidesActualValueExpression", testToNotProvidesActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpression", testToNotProvidesAMemoizedActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToNotNegativeMatches", testToNotNegativeMatches), ("testNotToMatchesLikeToNot", testNotToMatchesLikeToNot), ] } let errorToThrow = NSError(domain: NSCocoaErrorDomain, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testFailAlwaysFails() { failsWithErrorMessage("My error message") { fail("My error message") } failsWithErrorMessage("fail() always fails") { fail() } } func testUnexpectedErrorsThrownFails() { #if _runtime(_ObjC) // This test triggers a weird segfault on Linux currently failsWithErrorMessage("expected to equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.to(equal(1)) } failsWithErrorMessage("expected to not equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toNot(equal(1)) } #endif } func testToMatchesIfMatcherReturnsTrue() { expect(1).to(MatcherFunc { expr, failure in true }) expect{1}.to(MatcherFunc { expr, failure in true }) } func testToProvidesActualValueExpression() { var value: Int? expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true }) expect(value).to(equal(1)) } func testToProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToMatchAgainstLazyProperties() { expect(ObjectWithLazyProperty().value).to(equal("hello")) expect(ObjectWithLazyProperty().value).toNot(equal("world")) expect(ObjectWithLazyProperty().anotherValue).to(equal("world")) expect(ObjectWithLazyProperty().anotherValue).toNot(equal("hello")) } // repeated tests from to() for toNot() func testToNotMatchesIfMatcherReturnsTrue() { expect(1).toNot(MatcherFunc { expr, failure in false }) expect{1}.toNot(MatcherFunc { expr, failure in false }) } func testToNotProvidesActualValueExpression() { var value: Int? expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false }) expect(value).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotNegativeMatches() { failsWithErrorMessage("expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }) } } func testNotToMatchesLikeToNot() { expect(1).notTo(MatcherFunc { expr, failure in false }) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/UserDescriptionTest.swift ================================================ import XCTest import Nimble class UserDescriptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToMatcher_CustomFailureMessage", testToMatcher_CustomFailureMessage), ("testNotToMatcher_CustomFailureMessage", testNotToMatcher_CustomFailureMessage), ("testToNotMatcher_CustomFailureMessage", testToNotMatcher_CustomFailureMessage), ("testToEventuallyMatch_CustomFailureMessage", testToEventuallyMatch_CustomFailureMessage), ("testToEventuallyNotMatch_CustomFailureMessage", testToEventuallyNotMatch_CustomFailureMessage), ("testToNotEventuallyMatch_CustomFailureMessage", testToNotEventuallyMatch_CustomFailureMessage), ] } func testToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to match, got <1>") { expect(1).to(MatcherFunc { expr, failure in false }, description: "These aren't equal!") } } func testNotToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).notTo(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToNotMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These aren't eventually equal!\n" + "expected to eventually equal <1>, got <0>") { expect { 0 }.toEventually(equal(1), description: "These aren't eventually equal!") } #endif } func testToEventuallyNotMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } func testToNotEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h ================================================ @import Nimble; #import "NimbleTests-Swift.h" // Use this when you want to verify the failure message for when an expectation fails #define expectFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; #define expectFailureMessages(MSGS, BLOCK) \ [NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__]; // Use this when you want to verify the failure message with the nil message postfixed // to it: " (use beNil() to match nils)" #define expectNilFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCAllPassTest : XCTestCase @end @implementation ObjCAllPassTest - (void)testPositiveMatches { expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5))); } - (void)testNegativeMatches { expectFailureMessage(@"expected to all be less than <3>, but failed first at element" " <3> in <[1, 2, 3, 4]>", ^{ expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).to(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).toNot(allPass(beLessThan(@5))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCAsyncTest : XCTestCase @end @implementation ObjCAsyncTest - (void)testAsync { __block id obj = @1; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = nil; }); expect(obj).toEventually(beNil()); } - (void)testAsyncWithCustomTimeout { __block id obj = nil; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = @1; }); expect(obj).withTimeout(5).toEventuallyNot(beNil()); } - (void)testAsyncCallback { waitUntil(^(void (^done)(void)){ done(); }); expectFailureMessage(@"Waited more than 1.0 second", ^{ waitUntil(^(void (^done)(void)){ /* ... */ }); }); expectFailureMessage(@"Waited more than 0.01 seconds", ^{ waitUntilTimeout(0.01, ^(void (^done)(void)){ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [NSThread sleepForTimeInterval:0.1]; done(); }); }); }); expectFailureMessage(@"expected to equal , got ", ^{ waitUntil(^(void (^done)(void)){ [NSThread sleepForTimeInterval:0.1]; expect(@"hello").to(equal(@"goodbye")); done(); }); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeAnInstanceOfTest : XCTestCase @end @implementation ObjCBeAnInstanceOfTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beAnInstanceOf([NSNull class])); expect(@1).toNot(beAnInstanceOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be an instance of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAnInstanceOf([NSNull class])); }); expectFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect([NSNull null]).toNot(beAnInstanceOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be an instance of NSNull, got ", ^{ expect(nil).to(beAnInstanceOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect(nil).toNot(beAnInstanceOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeCloseToTest : XCTestCase @end @implementation ObjCBeCloseToTest - (void)testPositiveMatches { expect(@1.2).to(beCloseTo(@1.2001)); expect(@1.2).to(beCloseTo(@2).within(10)); expect(@2).toNot(beCloseTo(@1)); expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be close to <0> (within 0.001), got <1>", ^{ expect(@1).to(beCloseTo(@0)); }); expectFailureMessage(@"expected to not be close to <0> (within 0.001), got <0.0001>", ^{ expect(@(0.0001)).toNot(beCloseTo(@0)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be close to <0> (within 0.001), got ", ^{ expect(nil).to(beCloseTo(@0)); }); expectNilFailureMessage(@"expected to not be close to <0> (within 0.001), got ", ^{ expect(nil).toNot(beCloseTo(@0)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeEmptyTest : XCTestCase @end @implementation ObjCBeEmptyTest - (void)testPositiveMatches { expect(@[]).to(beEmpty()); expect(@"").to(beEmpty()); expect(@{}).to(beEmpty()); expect([NSSet set]).to(beEmpty()); expect([NSIndexSet indexSet]).to(beEmpty()); expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty()); expect(@[@1, @2]).toNot(beEmpty()); expect(@"a").toNot(beEmpty()); expect(@{@"key": @"value"}).toNot(beEmpty()); expect([NSSet setWithObject:@1]).toNot(beEmpty()); expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; expect(table).toNot(beEmpty()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be empty, got ", ^{ expect(@"foo").to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect(@[@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{key = value;}>", ^{ expect(@{@"key": @"value"}).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).to(beEmpty()); }); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; expectFailureMessage(([NSString stringWithFormat:@"expected to be empty, got <%@>", tableString]), ^{ expect(table).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <>", ^{ expect(@"").toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <()>", ^{ expect(@[]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{}>", ^{ expect(@{}).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got ", ^{ expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty()); }); } - (void)testItDoesNotMatchNil { expectNilFailureMessage(@"expected to be empty, got ", ^{ expect(nil).to(beEmpty()); }); expectNilFailureMessage(@"expected to not be empty, got ", ^{ expect(nil).toNot(beEmpty()); }); } - (void)testItReportsTypesItMatchesAgainst { expectFailureMessage(@"expected to be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).toNot(beEmpty()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalseTest : XCTestCase @end @implementation ObjCBeFalseTest - (void)testPositiveMatches { expect(@NO).to(beFalse()); expect(@YES).toNot(beFalse()); } - (void)testNegativeMatches { expectNilFailureMessage(@"expected to be false, got ", ^{ expect(nil).to(beFalse()); }); expectNilFailureMessage(@"expected to not be false, got ", ^{ expect(nil).toNot(beFalse()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalsyTest : XCTestCase @end @implementation ObjCBeFalsyTest - (void)testPositiveMatches { expect(@NO).to(beFalsy()); expect(@YES).toNot(beFalsy()); expect(nil).to(beFalsy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to not be falsy, got ", ^{ expect(nil).toNot(beFalsy()); }); expectFailureMessage(@"expected to be falsy, got <1>", ^{ expect(@1).to(beFalsy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanOrEqualToTest : XCTestCase @end @implementation ObjCBeGreaterThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beGreaterThanOrEqualTo(@2)); expect(@2).toNot(beGreaterThanOrEqualTo(@3)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than or equal to <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThanOrEqualTo(@0)); }); expectFailureMessage(@"expected to not be greater than or equal to <1>, got <2>", ^{ expect(@2).toNot(beGreaterThanOrEqualTo(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than or equal to <-1>, got ", ^{ expect(nil).to(beGreaterThanOrEqualTo(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than or equal to <1>, got ", ^{ expect(nil).toNot(beGreaterThanOrEqualTo(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanTest : XCTestCase @end @implementation ObjCBeGreaterThanTest - (void)testPositiveMatches { expect(@2).to(beGreaterThan(@1)); expect(@2).toNot(beGreaterThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThan(@(0))); }); expectFailureMessage(@"expected to not be greater than <1>, got <0>", ^{ expect(@0).toNot(beGreaterThan(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than <-1>, got ", ^{ expect(nil).to(beGreaterThan(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than <1>, got ", ^{ expect(nil).toNot(beGreaterThan(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeIdenticalToTest : XCTestCase @end @implementation ObjCBeIdenticalToTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beIdenticalTo([NSNull null])); expect(@2).toNot(beIdenticalTo(@3)); } - (void)testNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(beIdenticalTo(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(beIdenticalTo(obj)); }); } - (void)testNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(beIdenticalTo(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(beIdenticalTo(obj)); }); } - (void)testAliasPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(be([NSNull null])); expect(@2).toNot(be(@3)); } - (void)testAliasNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(be(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(be(obj)); }); } - (void)testAliasNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(be(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(be(obj)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeKindOfTest : XCTestCase @end @implementation ObjCBeKindOfTest - (void)testPositiveMatches { NSMutableArray *array = [NSMutableArray array]; expect(array).to(beAKindOf([NSArray class])); expect(@1).toNot(beAKindOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be a kind of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAKindOf([NSNull class])); }); expectFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect([NSNull null]).toNot(beAKindOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be a kind of NSNull, got ", ^{ expect(nil).to(beAKindOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect(nil).toNot(beAKindOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanOrEqualToTest : XCTestCase @end @implementation ObjCBeLessThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beLessThanOrEqualTo(@2)); expect(@2).toNot(beLessThanOrEqualTo(@1)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than or equal to <1>, got <2>", ^{ expect(@2).to(beLessThanOrEqualTo(@1)); }); expectFailureMessage(@"expected to not be less than or equal to <1>, got <1>", ^{ expect(@1).toNot(beLessThanOrEqualTo(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than or equal to <1>, got ", ^{ expect(nil).to(beLessThanOrEqualTo(@1)); }); expectNilFailureMessage(@"expected to not be less than or equal to <-1>, got ", ^{ expect(nil).toNot(beLessThanOrEqualTo(@(-1))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanTest : XCTestCase @end @implementation ObjCBeLessThanTest - (void)testPositiveMatches { expect(@2).to(beLessThan(@3)); expect(@2).toNot(beLessThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than <0>, got <-1>", ^{ expect(@(-1)).to(beLessThan(@0)); }); expectFailureMessage(@"expected to not be less than <1>, got <0>", ^{ expect(@0).toNot(beLessThan(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than <-1>, got ", ^{ expect(nil).to(beLessThan(@(-1))); }); expectNilFailureMessage(@"expected to not be less than <1>, got ", ^{ expect(nil).toNot(beLessThan(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeNilTest : XCTestCase @end @implementation ObjCBeNilTest - (void)testPositiveMatches { expect(nil).to(beNil()); expect(@NO).toNot(beNil()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be nil, got <1>", ^{ expect(@1).to(beNil()); }); expectFailureMessage(@"expected to not be nil, got ", ^{ expect(nil).toNot(beNil()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTrueTest : XCTestCase @end @implementation ObjCBeTrueTest - (void)testPositiveMatches { expect(@YES).to(beTrue()); expect(@NO).toNot(beTrue()); expect(nil).toNot(beTrue()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be true, got <0>", ^{ expect(@NO).to(beTrue()); }); expectFailureMessage(@"expected to be true, got ", ^{ expect(nil).to(beTrue()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTruthyTest : XCTestCase @end @implementation ObjCBeTruthyTest - (void)testPositiveMatches { expect(@YES).to(beTruthy()); expect(@NO).toNot(beTruthy()); expect(nil).toNot(beTruthy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be truthy, got ", ^{ expect(nil).to(beTruthy()); }); expectFailureMessage(@"expected to not be truthy, got <1>", ^{ expect(@1).toNot(beTruthy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeginWithTest : XCTestCase @end @implementation ObjCBeginWithTest - (void)testPositiveMatches { expect(@"hello world!").to(beginWith(@"hello")); expect(@"hello world!").toNot(beginWith(@"world")); NSArray *array = @[@1, @2]; expect(array).to(beginWith(@1)); expect(array).toNot(beginWith(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to begin with , got ", ^{ expect(@"foo").to(beginWith(@"bar")); }); expectFailureMessage(@"expected to not begin with , got ", ^{ expect(@"foo").toNot(beginWith(@"foo")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to begin with <1>, got ", ^{ expect(nil).to(beginWith(@1)); }); expectNilFailureMessage(@"expected to not begin with <1>, got ", ^{ expect(nil).toNot(beginWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCContainTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCContainTest : XCTestCase @end @implementation ObjCContainTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(array).to(contain(@1)); expect(array).toNot(contain(@"HI")); expect(@"String").to(contain(@"Str")); expect(@"Other").toNot(contain(@"Str")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to contain <3>, got <(1, 2)>", ^{ expect((@[@1, @2])).to(contain(@3)); }); expectFailureMessage(@"expected to not contain <2>, got <(1, 2)>", ^{ expect((@[@1, @2])).toNot(contain(@2)); }); expectFailureMessage(@"expected to contain , got ", ^{ expect(@"la").to(contain(@"hi")); }); expectFailureMessage(@"expected to not contain , got ", ^{ expect(@"hihihi").toNot(contain(@"hi")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to contain <3>, got ", ^{ expect(nil).to(contain(@3)); }); expectNilFailureMessage(@"expected to not contain <3>, got ", ^{ expect(nil).toNot(contain(@3)); }); expectNilFailureMessage(@"expected to contain , got ", ^{ expect(nil).to(contain(@"hi")); }); expectNilFailureMessage(@"expected to not contain , got ", ^{ expect(nil).toNot(contain(@"hi")); }); } - (void)testVariadicArguments { NSArray *array = @[@1, @2]; expect(array).to(contain(@1, @2)); expect(array).toNot(contain(@"HI", @"whale")); expect(@"String").to(contain(@"Str", @"ng")); expect(@"Other").toNot(contain(@"Str", @"Oth")); expectFailureMessage(@"expected to contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).to(contain(@"a", @"bar")); }); expectFailureMessage(@"expected to not contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).toNot(contain(@"bar", @"b")); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEndWithTest : XCTestCase @end @implementation ObjCEndWithTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(@"hello world!").to(endWith(@"world!")); expect(@"hello world!").toNot(endWith(@"hello")); expect(array).to(endWith(@2)); expect(array).toNot(endWith(@1)); expect(@1).toNot(contain(@"foo")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to end with , got ", ^{ expect(@"hello world!").to(endWith(@"?")); }); expectFailureMessage(@"expected to not end with , got ", ^{ expect(@"hello world!").toNot(endWith(@"!")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to end with <1>, got ", ^{ expect(nil).to(endWith(@1)); }); expectNilFailureMessage(@"expected to not end with <1>, got ", ^{ expect(nil).toNot(endWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEqualTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEqualTest : XCTestCase @end @implementation ObjCEqualTest - (void)testPositiveMatches { expect(@1).to(equal(@1)); expect(@1).toNot(equal(@2)); expect(@1).notTo(equal(@2)); expect(@"hello").to(equal(@"hello")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to equal <2>, got <1>", ^{ expect(@1).to(equal(@2)); }); expectFailureMessage(@"expected to not equal <1>, got <1>", ^{ expect(@1).toNot(equal(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to equal , got ", ^{ expect(nil).to(equal(nil)); }); expectNilFailureMessage(@"expected to not equal , got ", ^{ expect(nil).toNot(equal(nil)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCHaveCount.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCHaveCountTest : XCTestCase @end @implementation ObjCHaveCountTest - (void)testHaveCountForNSArray { expect(@[@1, @2, @3]).to(haveCount(@3)); expect(@[@1, @2, @3]).notTo(haveCount(@1)); expect(@[]).to(haveCount(@0)); expect(@[@1]).notTo(haveCount(@0)); expectFailureMessage(@"expected to have NSArray with count 1, got 3\nActual Value: (1, 2, 3)", ^{ expect(@[@1, @2, @3]).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSArray with count 3, got 3\nActual Value: (1, 2, 3)", ^{ expect(@[@1, @2, @3]).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSDictionary { expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@3)); expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSDictionary with count 1, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSDictionary with count 3, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSHashtable { NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; [table addObject:@2]; [table addObject:@3]; expect(table).to(haveCount(@3)); expect(table).notTo(haveCount(@1)); NSString *msg = [NSString stringWithFormat: @"expected to have NSHashTable with count 1, got 3\nActual Value: %@", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).to(haveCount(@1)); }); msg = [NSString stringWithFormat: @"expected to not have NSHashTable with count 3, got 3\nActual Value: %@", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSSet { NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSSet with count 1, got 3\nActual Value: {(3,1,2)}", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSSet with count 3, got 3\nActual Value: {(3,1,2)}", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSIndexSet { NSIndexSet *const set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSIndexSet with count 1, got 3\nActual Value: (1, 2, 3)", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSIndexSet with count 3, got 3\nActual Value: (1, 2, 3)", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForUnsupportedTypes { expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString", ^{ expect(@"string").to(haveCount(@6)); }); expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber", ^{ expect(@1).to(haveCount(@6)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCMatchTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCMatchTest : XCTestCase @end @implementation ObjCMatchTest - (void)testPositiveMatches { expect(@"11:14").to(match(@"\\d{2}:\\d{2}")); expect(@"hello").toNot(match(@"\\d{2}:\\d{2}")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(@"hello").to(match(@"\\d{2}:\\d{2}")); }); expectFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got <11:22>", ^{ expect(@"11:22").toNot(match(@"\\d{2}:\\d{2}")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).to(match(@"\\d{2}:\\d{2}")); }); expectNilFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).toNot(match(@"\\d{2}:\\d{2}")); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCRaiseExceptionTest : XCTestCase @end @implementation ObjCRaiseExceptionTest - (void)testPositiveMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ @throw exception; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"})); expectAction(^{ }).toNot(raiseException()); } - (void)testPositiveMatchesWithBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); } - (void)testNegativeMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise any exception, got no exception", ^{ expectAction(^{ }).to(raiseException()); }); expectFailureMessage(@"expected to raise exception with name , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(@"foo")); }); expectFailureMessage(@"expected to raise exception with name with reason , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"cakes")); }); expectFailureMessage(@"expected to raise exception with name with reason with userInfo <{k = v;}>, got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"k": @"v"})); }); expectFailureMessage(@"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }", ^{ expectAction(^{ [exception raise]; }).toNot(raiseException()); }); } - (void)testNegativeMatchesWithPassingBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise exception that satisfies block, got no exception", ^{ expect(exception).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"LOL")); })); }); NSString *outerFailureMessage = @"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(@"foo"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"bar"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); } - (void)testNegativeMatchesWithNegativeBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; NSString *outerFailureMessage; NSString const *innerFailureMessage = @"expected to equal , got "; outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCSatisfyAnyOfTest : XCTestCase @end @implementation ObjCSatisfyAnyOfTest - (void)testPositiveMatches { expect(@2).to(satisfyAnyOf(equal(@2), equal(@3))); expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16))); expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4)))); expect(@NO).to(satisfyAnyOf(beTrue(), beFalse())); expect(@YES).to(satisfyAnyOf(beTrue(), beFalse())); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2", ^{ expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5))); }); expectFailureMessage(@"expected to match one of: {all be less than <4>, but failed first at element" " <5> in <[5, 6, 7]>}, or {equal <(1, 2, 3, 4)>}, got (5,6,7)", ^{ expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4]))); }); expectFailureMessage(@"satisfyAnyOf must be called with at least one matcher", ^{ expect(@"turtles").to(satisfyAnyOf()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCSyncTest : XCTestCase @end @implementation ObjCSyncTest - (void)testFailureExpectation { expectFailureMessage(@"fail() always fails", ^{ fail(); }); expectFailureMessage(@"This always fails", ^{ failWithMessage(@"This always fails"); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCUserDescriptionTest : XCTestCase @end @implementation ObjCUserDescriptionTest - (void)testToWithDescription { expectFailureMessage(@"These are equal!\n" "expected to equal <2>, got <1>", ^{ expect(@1).toWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).toNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testNotToWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).notToWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToEventuallyWithDescription { expectFailureMessage(@"These are equal!\n" "expected to eventually equal <2>, got <1>", ^{ expect(@1).toEventuallyWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToEventuallyNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toEventuallyNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToNotEventuallyWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toNotEventuallyWithDescription(equal(@1), @"These aren't equal!"); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjcStringersTest.m ================================================ @import XCTest; @import Nimble; @interface ObjcStringersTest : XCTestCase @end @implementation ObjcStringersTest - (void)testItCanStringifyArrays { NSArray *array = @[@1, @2, @3]; NSString *result = NMBStringify(array); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItCanStringifyIndexSets { NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; NSString *result = NMBStringify(indexSet); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItRoundsLongDecimals { NSNumber *num = @291.123782163; NSString *result = NMBStringify(num); expect(result).to(equal(@"291.1238")); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/circle.yml ================================================ machine: xcode: version: "7.3" dependencies: pre: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" test: override: - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx - eval "$(swiftenv init -)"; ./test swiftpm: environment: SWIFTENV_ROOT: $HOME/.swiftenv PATH: $SWIFTENV_ROOT/bin:$PATH ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/script/release ================================================ #!/usr/bin/env sh REMOTE_BRANCH=master POD_NAME=Nimble PODSPEC=Nimble.podspec POD=${COCOAPODS:-pod} function help { echo "Usage: release VERSION RELEASE_NOTES [-f]" echo echo "VERSION should be the version to release, should not include the 'v' prefix" echo "RELEASE_NOTES should be a file that lists all the release notes for this version" echo " if file does not exist, creates a git-style commit with a diff as a comment" echo echo "FLAGS" echo " -f Forces override of tag" echo echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" echo echo "HINT: use 'git diff ...HEAD' to build the release notes" echo exit 2 } function die { echo "[ERROR] $@" echo exit 1 } if [ $# -lt 2 ]; then help fi VERSION=$1 RELEASE_NOTES=$2 FORCE_TAG=$3 VERSION_TAG="v$VERSION" echo "-> Verifying Local Directory for Release" if [ -z "`which $POD`" ]; then die "Cocoapods is required to produce a release. Aborting." fi echo " > Cocoapods is installed" echo " > Is this a reasonable tag?" echo $VERSION_TAG | grep -q "^vv" if [ $? -eq 0 ]; then die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." fi echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" if [ $? -ne 0 ]; then die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." fi echo " > Is this version ($VERSION) unique?" git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 if [ $? -eq 0 ]; then if [ -z "$FORCE_TAG" ]; then die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" else echo " > NO, but force was specified." fi else echo " > Yes, tag is unique" fi if [ ! -f "$RELEASE_NOTES" ]; then echo " > Failed to find $RELEASE_NOTES. Prompting editor" RELEASE_NOTES=.release-changes LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` echo " > Latest tag ${LATEST_TAG}" echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES echo "================" >> $RELEASE_NOTES echo >> $RELEASE_NOTES echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES $EDITOR $RELEASE_NOTES diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 STATUS=$? rm ${RELEASE_NOTES}.backup if [ $STATUS -eq 0 ]; then rm $RELEASE_NOTES die "No changes in release notes file. Aborting." fi fi echo " > Release notes: $RELEASE_NOTES" if [ ! -f "$PODSPEC" ]; then die "Cannot find podspec: $PODSPEC. Aborting." fi echo " > Podspec exists" git config --get user.signingkey > /dev/null || { echo "[ERROR] No PGP found to sign tag. Aborting." echo echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" echo " intermediate between you and the end-users to modify the git repository." echo echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" echo " from the official maintainers." echo echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." echo echo "Related resources:" echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" echo exit 2 } echo " > Found PGP key for git" # Verify cocoapods trunk ownership pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." echo " > Verified ownership to $POD_NAME pod" echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." function restore_podspec { if [ -f "${PODSPEC}.backup" ]; then mv -f ${PODSPEC}{.backup,} fi } echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" git fetch origin || die "Failed to fetch origin" git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" echo "-> Setting podspec version" cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" SET_PODSPEC_VERSION=$? if [ $SET_PODSPEC_VERSION -eq 0 ]; then echo " > Podspec already set to $VERSION. Skipping." else sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { restore_podspec die "Failed to update version in podspec" } git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi if [ -z "$FORCE_TAG" ]; then echo "-> Tagging version" git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin" git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" else echo "-> Tagging version (force)" git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin (force)" git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" fi if [ $SET_PODSPEC_VERSION -ne 0 ]; then git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" echo " > Pushed version to origin" fi echo echo "---------------- Released as $VERSION_TAG ----------------" echo echo echo "Pushing to pod trunk..." $POD trunk push "$PODSPEC" echo echo "================ Finalizing the Release ================" echo echo " - Opening GitHub to mark this as a release..." echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for GitHub styling." echo " - Announce!" open "https://github.com/Quick/Nimble/releases/new?tag=$VERSION_TAG" rm ${PODSPEC}.backup ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/test ================================================ #!/bin/bash GREEN="\033[0;32m" CLEAR="\033[0m" if which xcodebuild > /dev/null; then echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..." BUILD_DIR=`pwd`/build LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} RUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} RUNTIME_TVOS_SDK_VERSION=${NIMBLE_RUNTIME_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} BUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION} fi set -e function color_if_overridden { local actual=$1 local env_var=$2 if [ -z "$env_var" ]; then printf "$actual" else printf "$GREEN$actual$CLEAR" fi } function print_env { echo "=== Environment ===" echo " iOS:" echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION" echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`" echo " Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`" echo echo " tvOS:" echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION" echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" echo " Running with tvOS SDK: `color_if_overridden $RUNTIME_TVOS_SDK_VERSION $NIMBLE_RUNTIME_TVOS_SDK_VERSION`" echo echo " Mac OS X:" echo " Latest OS X SDK: $LATEST_OSX_SDK_VERSION" echo " Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`" echo echo "======= END =======" echo } function run { echo -e "$GREEN==>$CLEAR $@" "$@" } function test_ios { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION" build test run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION" build test } function test_tvos { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV 1080p,OS=$RUNTIME_TVOS_SDK_VERSION" build test } function test_osx { run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-OSX" -configuration "Debug" -sdk "macosx$BUILD_OSX_SDK_VERSION" build test } function test_podspec { echo "Gathering CocoaPods installation information..." run bundle exec pod --version echo "Linting podspec..." run bundle exec pod lib lint Nimble.podspec } function test_swiftpm { run swift build --clean && swift build && swift test } function test() { test_ios test_tvos test_osx if which swift-test; then test_swiftpm else echo "Not testing with the Swift Package Manager because swift-test is not installed" fi } function clean { run rm -rf ~/Library/Developer/Xcode/DerivedData\; true } function help { echo "Usage: $0 COMMANDS" echo echo "COMMANDS:" echo " clean - Cleans the derived data directory of Xcode. Assumes default location" echo " ios - Runs the tests as an iOS device" echo " tvos - Runs the tests as an tvOS device" echo " osx - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)" echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" echo " all - Runs the all tests of ios, tvos and osx" echo " swiftpm - Runs the tests built by the Swift Package Manager" echo " help - Displays this help" echo exit 1 } function main { print_env for arg in $@ do case "$arg" in clean) clean ;; ios) test_ios ;; tvos) test_tvos ;; osx) test_osx ;; podspec) test_podspec ;; test) test ;; all) test ;; swiftpm) test_swiftpm ;; help) help ;; esac done if [ $# -eq 0 ]; then clean test fi } main $@ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.gitignore ================================================ # Xcode # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore ## Build generated build/ DerivedData ## Various settings *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata ## Other *.xccheckout *.moved-aside *.xcuserstate *.xcscmblueprint ## Obj-C/Swift specific *.hmap *.ipa # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. Packages/ .build/ # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # # Pods/ # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md fastlane/report.xml fastlane/screenshots # Mac OS X .DS_Store # Quick Quick.framework.zip ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.gitmodules ================================================ [submodule "Externals/Nimble"] path = Externals/Nimble url = https://github.com/Quick/Nimble.git ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.ruby-version ================================================ system ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-02-25-a ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.travis.yml ================================================ osx_image: xcode7.3 language: generic matrix: include: - os: osx env: - PLATFORM=osx - os: osx env: - PLATFORM=ios - os: osx env: - PLATFORM=tvos - os: osx osx_image: xcode8 env: - PLATFORM=osx - os: osx osx_image: xcode8 env: - PLATFORM=ios - os: osx osx_image: xcode8 env: - PLATFORM=tvos - os: osx sudo: required env: - PODSPEC=1 - os: osx env: - XCTOOL=1 - PLATFORM=osx - os: osx env: - XCTOOL=1 - PLATFORM=ios - os: osx env: - XCTOOL=1 - PLATFORM=tvos - os: linux env: - PLATFORM=linux sudo: required dist: trusty install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./script/travis-install-osx; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./script/travis-install-linux; fi - if [[ "$PODSPEC" ]]; then sudo gem install bundler; bundle install; fi script: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./script/travis-script-osx; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./script/travis-script-linux; fi ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/CONTRIBUTING.md ================================================ **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [Welcome to Quick!](#welcome-to-quick!) - [Reporting Bugs](#reporting-bugs) - [Building the Project](#building-the-project) - [Pull Requests](#pull-requests) - [Style Conventions](#style-conventions) - [Core Members](#core-members) - [Code of Conduct](#code-of-conduct) - [Creating a Release](#creating-a-release) # Welcome to Quick! We're building a testing framework for a new generation of Swift and Objective-C developers. Quick should be easy to use and easy to maintain. Let's keep things simple and well-tested. ## Reporting Bugs Nothing is off-limits. If you're having a problem, we want to hear about it. - See a crash? File an issue. - Code isn't compiling, but you don't know why? Sounds like you should submit a new issue, bud. - Went to the kitchen, only to forget why you went in the first place? Better submit an issue. Be sure to include in your issue: - Your Xcode version (eg - Xcode 7.0.1 7A1001) - Your version of Quick / Nimble (eg - v0.7.0 or git sha `7d0b8c21357839a8c5228863b77faecf709254a9`) - What are the steps to reproduce this issue? - What platform are you using? (eg - OS X, iOS, watchOS, tvOS) - If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration - Are you using carthage or cocoapods? ## Building the Project - After cloning the repository, run `git submodule update --init` to pull the Nimble submodule. - Use `Quick.xcworkspace` to work on Quick. The workspace includes Nimble, which is used in Quick's tests. ## Pull Requests - Nothing is trivial. Submit pull requests for anything: typos, whitespace, you name it. - Not all pull requests will be merged, but all will be acknowledged. If no one has provided feedback on your request, ping one of the owners by name. - Make sure your pull request includes any necessary updates to the README or other documentation. - Be sure the unit tests for both the OS X and iOS targets of both Quick and Nimble pass before submitting your pull request. You can run all the iOS and OS X unit tests using `rake`. - The `master` branch will always support the stable Xcode version. Other branches will point to their corresponding versions they support. - If you're making a configuration change, make sure to edit both the xcode project and the podspec file. ### Style Conventions - Indent using 4 spaces. - Keep lines 100 characters or shorter. Break long statements into shorter ones over multiple lines. - In Objective-C, use `#pragma mark -` to mark public, internal, protocol, and superclass methods. See `QuickSpec.m` for an example. ## Core Members If a few of your pull requests have been merged, and you'd like a controlling stake in the project, file an issue asking for write access to the repository. Your conduct as a core member is your own responsibility, but here are some "ground rules": - Feel free to push whatever you want to master, and (if you have ownership permissions) to create any repositories you'd like. Ideally, however, all changes should be submitted as GitHub pull requests. No one should merge their own pull request, unless no other core members respond for at least a few days. Pull requests should be issued from personal forks. The Quick repo should be reserved for long-running feature branches. If you'd like to create a new repository, it'd be nice if you created a GitHub issue and gathered some feedback first. - It'd be awesome if you could review, provide feedback on, and close issues or pull requests submitted to the project. Please provide kind, constructive feedback. Please don't be sarcastic or snarky. ## Creating a Release The process is relatively straight forward, but here's is a useful checklist for tagging: - Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` - Run the release script: `./script/release A.B.C release-notes-file` - The script will prompt you to create a new [GitHub release](https://github.com/Quick/Quick/releases). - Use the same release notes you created for the tag, but tweak up formatting for GitHub. - Announce! ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/ArrangeActAssert.md ================================================ # Effective Tests Using XCTest: Arrange, Act, and Assert Whether you're using XCTest, Quick, or another testing framework, you can write effective unit tests by following a simple pattern: 1. Arrange 2. Act 3. Assert ## Using Arrange, Act, and Assert For example, let's look at a simple class called `Banana`: ```swift // Banana/Banana.swift /** A delicious banana. Tastes better if you peel it first. */ public class Banana { private var isPeeled = false /** Peels the banana. */ public func peel() { isPeeled = true } /** You shouldn't eat a banana unless it's been peeled. */ public var isEdible: Bool { return isPeeled } } ``` Let's verify the `Banana.peel()` method does what it's supposed to: ```swift // BananaTests/BananaTests.swift class BananaTests: XCTestCase { func testPeel() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } } ``` ## Using Clear Test Names Our `testPeel()` makes sure that, if the `Banana.peel()` method ever stops working right, we'll know. This usually happens when our application code changes, which either means: 1. We accidentally broke our application code, so we have to fix the application code 2. We changed how our application code works--maybe because we're adding a new feature--so we have to change the test code If our tests start breaking, how do we know which one of these cases applies? It might surprise you that **the name of the test** is our best indication. Good test names: 1. Are clear about what is being tested. 2. Are clear about when the test should pass or fail. Is our `testPeel()` method clearly named? Let's make it clearer: ```diff // BananaTests.swift -func testPeel() { +func testPeel_makesTheBananaEdible() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } ``` The new name: 1. Is clear about what is being tested: `testPeel` indicates it's the `Banana.peel()` method. 2. Is clear about when the test should pass: `makesTheBananaEdible` indicates the banana is edible once the method has been called. ## Testing Conditions Let's say we want to offer people bananas, using a function called `offer()`: ```swift // Banana/Offer.swift /** Given a banana, returns a string that can be used to offer someone the banana. */ public func offer(banana: Banana) -> String { if banana.isEdible { return "Hey, want a banana?" } else { return "Hey, want me to peel this banana for you?" } } ``` Our application code does one of two things: 1. Either it offers a banana that's already been peeled... 2. ...or it offers an unpeeled banana. Let's write tests for these two cases: ```swift // BananaTests/OfferTests.swift class OfferTests: XCTestCase { func testOffer_whenTheBananaIsPeeled_offersTheBanana() { // Arrange: Create a banana and peel it. let banana = Banana() banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { // Arrange: Create a banana. let banana = Banana() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` Our test names clearly indicate the **conditions** under which our tests should pass: in the case that `whenTheBananaIsPeeled`, `offer()` should `offersTheBanana`. And if the banana isn't peeled? Well, we have a test for that, too! Notice that we have one test per `if` statement in our application code. This is a great pattern when writing tests: it makes sure every set of conditions is tested. If one of those conditions no longer works, or needs to be changed, we'll know exactly which test needs to be looked at. ## Shorter "Arrange" Steps with `XCTestCase.setUp()` Both of our `OfferTests` tests contain the same "Arrange" code: they both create a banana. We should move that code into a single place. Why? 1. As-is, if we change the `Banana` initializer, we'll have to change every test that creates a banana. 2. Our test methods will be shorter--which is a good thing if (and **only if**) that makes the tests easier to read. Let's move the `Banana` initialization into the `XCTestCase.setUp()` method, which is called once before every test method. ```diff // OfferTests.swift class OfferTests: XCTestCase { + var banana: Banana! + + override func setUp() { + super.setUp() + banana = Banana() + } + func testOffer_whenTheBananaIsPeeled_offersTheBanana() { - // Arrange: Create a banana and peel it. - let banana = Banana() + // Arrange: Peel the banana. banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { - // Arrange: Create a banana. - let banana = Banana() - // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` ## Sharing "Arrange" Code Across Multiple Tests If you find yourself using the same "arrange" steps across multiple tests, you may want to define a helper function within your test target: ```swift // BananaTests/BananaHelpers.swift internal func createNewPeeledBanana() -> Banana { let banana = Banana() banana.peel() return banana } ``` > Use a function to define your helpers: functions can't be subclassed, nor can they retain any state. Subclassing and mutable state can make your tests harder to read. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/BehavioralTesting.md ================================================ # Don't Test Code, Instead Verify Behavior Tests should only fail if the application **behaves differently**. They should test *what* the application code does, not *how* it does those things. - Tests that verify *what* an application does are **behavioral tests**. - Tests that break if the application code changes, even if the behavior remains the same, are **brittle tests**. Let's say we have a banana database, called `GorillaDB`. `GorillaDB` is a key-value store for bananas. We can save bananas: ```swift let database = GorillaDB() let banana = Banana() database.save(banana: banana, key: "my-banana") ``` And we can restore bananas from disk later: ```swift let banana = database.load(key: "my-banana") ``` ## Brittle Tests How can we test this behavior? One way would be to check the size of the database after we save a banana: ```swift // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") // Assert: The size of the database should have increased by one. XCTAssertEqual(database.size, originalSize + 1) } ``` Imagine, however, that the source code of `GorillaDB` changes. In order to make reading bananas from the database faster, it maintains a cache of the most frequently used bananas. `GorillaDB.size` grows as the size of the cache grows, and our test fails: ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/Screenshot_database_size_fail.png) ## Behavioral Tests The key to writing behavioral tests is determining exactly what you're expecting your application code to do. In the context of our `testSave_savesTheBananaToTheDatabase` test: what is the behavior we expect when we "save" a banana to the database? "Saving" implies, to me, that we can load it later. So instead of testing that the size of the database increases, we should test that we can load a banana. ```diff // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() - let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") - // Assert: The size of the database should have increased by one. - XCTAssertEqual(database.size, originalSize + 1) + // Assert: The bananas saved to and loaded from the database should be the same. + XCTAssertEqual(database.load(key: "test-banana"), banana) } ``` The key to writing behavioral tests is asking: - What exactly should this application code do? - Is my test verifying *only* that behavior? Or could it fail due to other aspects of how the code works? ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/ConfiguringQuick.md ================================================ # Configuring How Quick Behaves You can customize how Quick behaves by subclassing `QuickConfiguration` and overriding the `QuickConfiguration.Type.configure()` class method: ```swift // Swift import Quick class ProjectDataTestConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { // ...set options on the configuration object here. } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(ProjectDataTestConfiguration) + (void)configure:(Configuration *configuration) { // ...set options on the configuration object here. } QuickConfigurationEnd ``` Projects may include several configurations. Quick does not make any guarantee about the order in which those configurations are executed. ## Adding Global `beforeEach` and `afterEach` Closures Using `QuickConfiguration.beforeEach` and `QuickConfiguration.afterEach`, you can specify closures to be run before or after *every* example in a test suite: ```swift // Swift import Quick import Sea class FinConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { Dorsal.sharedFin().height = 0 } } } ``` ```objc // Objective-C @import Quick; #import "Dorsal.h" QuickConfigurationBegin(FinConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEach:^{ [Dorsal sharedFin].height = 0; }]; } QuickConfigurationEnd ``` In addition, Quick allows you to access metadata regarding the current example being run: ```swift // Swift import Quick class SeaConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { exampleMetadata in // ...use the example metadata object to access the current example name, and more. } } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(SeaConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { // ...use the example metadata object to access the current example name, and more. }]; } QuickConfigurationEnd ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/InstallingFileTemplates.md ================================================ # Installing Quick File Templates The Quick repository includes file templates for both Swift and Objective-C specs. ## Alcatraz Quick templates can be installed via [Alcatraz](https://github.com/supermarin/Alcatraz), a package manager for Xcode. Just search for the templates from the Package Manager window. ![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png) ## Manually via the Rakefile To manually install the templates, just clone the repository and run the `templates:install` rake task: ```sh $ git clone git@github.com:Quick/Quick.git $ rake templates:install ``` Uninstalling is easy, too: ```sh $ rake templates:uninstall ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/InstallingQuick.md ================================================ # Installing Quick > **If you're using Xcode 7.1,** use the latest version of Quick--`v0.9.0` at the time of writing. > New releases are developed on the `swift-2.0` branch. Quick provides the syntax to define examples and example groups. Nimble provides the `expect(...).to` assertion syntax. You may use either one, or both, in your tests. There are three recommended ways of linking Quick to your tests: 1. [Git Submodules](#git-submodules) 2. [CocoaPods](#cocoapods) 3. [Carthage](#carthage) 4. [Swift Package Manager (experimental)](#swift-package-manager) Choose one and follow the instructions below. Once you've completed them, you should be able to `import Quick` from within files in your test target. ## Git Submodules To link Quick and Nimble using Git submodules: 1. Add submodule for Quick. 2. If you don't already have a `.xcworkspace` for your project, create one. ([Here's how](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html)) 3. Add `Quick.xcodeproj` to your project's `.xcworkspace`. 4. Add `Nimble.xcodeproj` to your project's `.xcworkspace`. It exists in `path/to/Quick/Externals/Nimble`. By adding Nimble from Quick's dependencies (as opposed to adding directly as a submodule), you'll ensure that you're using the correct version of Nimble for whatever version of Quick you're using. 5. Link `Quick.framework` and `Nimble.framework` in your test target's "Link Binary with Libraries" build phase. First, if you don't already have one, create a directory for your Git submodules. Let's assume you have a directory named `Vendor`. **Step One:** Download Quick and Nimble as Git submodules: ```sh git submodule add git@github.com:Quick/Quick.git Vendor/Quick git submodule add git@github.com:Quick/Nimble.git Vendor/Nimble git submodule update --init --recursive ``` **Step Two:** Add the `Quick.xcodeproj` and `Nimble.xcodeproj` files downloaded above to your project's `.xcworkspace`. For example, this is `Guanaco.xcworkspace`, the workspace for a project that is tested using Quick and Nimble: ![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png) **Step Three:** Link the `Quick.framework` during your test target's `Link Binary with Libraries` build phase. You should see two `Quick.frameworks`; one is for OS X, and the other is for iOS. ![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png) Do the same for the `Nimble.framework`, and you're done! **Updating the Submodules:** If you ever want to update the Quick or Nimble submodules to latest version, enter the Quick directory and pull from the master repository: ```sh cd /path/to/your/project/Vendor/Quick git checkout master git pull --rebase origin master ``` Your Git repository will track changes to submodules. You'll want to commit the fact that you've updated the Quick submodule: ```sh cd /path/to/your/project git commit -m "Updated Quick submodule" ``` **Cloning a Repository that Includes a Quick Submodule:** After other people clone your repository, they'll have to pull down the submodules as well. They can do so by running the `git submodule update` command: ```sh git submodule update --init --recursive ``` You can read more about Git submodules [here](http://git-scm.com/book/en/Git-Tools-Submodules). ## CocoaPods First, update CocoaPods to Version 0.36.0 or newer, which is necessary to install CocoaPods using Swift. Then, add Quick and Nimble to your Podfile. Additionally, the ```use_frameworks!``` line is necessary for using Swift in CocoaPods: ```rb # Podfile use_frameworks! def testing_pods pod 'Quick' pod 'Nimble' end target 'MyTests' do testing_pods end target 'MyUITests' do testing_pods end ``` Finally, download and link Quick and Nimble to your tests: ```sh pod install ``` ### Using Swift 1.2? The latest release of Quick (0.4.0) is for Swift 2 (Xcode 7), but the latest Nimble (1.0.0) is for Swift 1.2 (Xcode 6). If you want Xcode 6 do: ```sh target 'MyTests' do use_frameworks! pod 'Quick', '~>0.3.0' pod 'Nimble', '~>1.0.0' end ``` ## [Carthage](https://github.com/Carthage/Carthage) As test targets do not have the "Embedded Binaries" section, the frameworks must be added to the target's "Link Binary With Libraries" as well as a "Copy Files" build phase to copy them to the target's Frameworks destination. > As Carthage builds dynamic frameworks, you will need a valid code signing identity set up. 1. Add Quick to your [`Cartfile.private`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate): ``` github "Quick/Quick" github "Quick/Nimble" ``` 2. Run `carthage update`. 3. From your `Carthage/Build/[platform]/` directory, add both Quick and Nimble to your test target's "Link Binary With Libraries" build phase: ![](http://i.imgur.com/pBkDDk5.png) 4. For your test target, create a new build phase of type "Copy Files": ![](http://i.imgur.com/jZATIjQ.png) 5. Set the "Destination" to "Frameworks", then add both frameworks: ![](http://i.imgur.com/rpnyWGH.png) This is not "the one and only way" to use Carthage to manage dependencies. For further reference check out the [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md). ## [Swift Package Manager](https://github.com/apple/swift-package-manager) With the advent of the [swift.org](https://swift.org) open-source project, Swift now has an official, though nascent, package manager tool. Notably, this provides the possibility of using Quick on non-Apple platforms for the first time. Initial steps have been taken to allow using Quick to test projects using the Swift Package Manager, although frequent breakage is expected at this point since the tool is still under heavy development. Until further documentation has been written, the following repository may be useful as an example of how Quick can be declared as a dependency in a `Package.swift` file for SwiftPM: https://github.com/Quick/QuickOnLinuxExample ### (Not Recommended) Running Quick Specs on a Physical iOS Device In order to run specs written in Quick on device, you need to add `Quick.framework` and `Nimble.framework` as `Embedded Binaries` to the `Host Application` of the test target. After adding a framework as an embedded binary, Xcode will automatically link the host app against the framework. ![](http://indiedev.kapsi.fi/images/embed-in-host.png) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/MoreResources.md ================================================ # More Resources ## Examples of Quick Specs Quick is used by many companies, open-source projects, and individuals, including [GitHub](https://github.com/github) and [ReactiveCocoa](https://github.com/ReactiveCocoa). For examples, check out: - https://github.com/ReactiveCocoa/ReactiveCocoa - https://github.com/github/Archimedes - https://github.com/libgit2/objective-git - https://github.com/jspahrsummers/RXSwift - https://github.com/artsy/eidolon - https://github.com/AshFurrow/Moya - https://github.com/nerdyc/Squeal - https://github.com/pepibumur/SugarRecord ## More on Unit Testing for OS X and iOS Apps - **[Quality Coding](http://qualitycoding.org/)**: A blog on iOS development that focuses on unit testing. - **[OCMock Tutorials](http://ocmock.org/support/)**: Use OCMock when you need "fake objects" in your tests. - **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**: Use this library to test code that sends requests to, and receives responses from, the Internet. - **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**: See [the Nimble documentation](https://github.com/Quick/Nimble) for instructions on how to write custom matchers in Nimble. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/NimbleAssertions.md ================================================ # Clearer Tests Using Nimble Assertions When code doesn't work the way it's supposed to, unit tests should make it **clear** exactly what's wrong. Take the following function which, given a bunch of monkeys, only returns the silly monkeys in the bunch: ```swift public func silliest(monkeys: [Monkey]) -> [Monkey] { return monkeys.filter { $0.silliness == .VerySilly } } ``` Now let's say we have a unit test for this function: ```swift func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) XCTAssertTrue(contains(sillyMonkeys, kiki)) } ``` The test fails with the following failure message: ``` XCTAssertTrue failed ``` ![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png) The failure message leaves a lot to be desired. It leaves us wondering, "OK, so something that should have been true was false--but what?" That confusion slows us down, since we now have to spend time deciphering test code. ## Better Failure Messages, Part 1: Manually Providing `XCTAssert` Failure Messages `XCTAssert` assertions allow us to specify a failure message of our own, which certainly helps: ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki)) + XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") } ``` But we have to write our own failure message. ## Better Failure Messages, Part 2: Nimble Failure Messages Nimble makes your test assertions, and their failure messages, easier to read: ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") + expect(sillyMonkeys).to(contain(kiki)) } ``` We don't have to write our own failure message--the one provided by Nimble is already very readable: ``` expected to contain , got <[Monkey(name: Jane, silliness: VerySilly)]> ``` ![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png) The failure message makes it clear what's wrong: we were expecting `kiki` to be included in the result of `silliest()`, but the result only contains `jane`. Now that we know exactly what's wrong, it's easy to fix the issue: ```diff public func silliest(monkeys: [Monkey]) -> [Monkey] { - return monkeys.filter { $0.silliness == .VerySilly } + return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly } } ``` Nimble provides many different kind of assertions, each with great failure messages. And unlike `XCTAssert`, you don't have to type your own failure message every time. For the full list of Nimble assertions, check out the [Nimble README](https://github.com/Quick/Nimble). Below is just a sample, to whet your appetite: ```swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/QuickExamplesAndGroups.md ================================================ # Organized Tests with Quick Examples and Example Groups Quick uses a special syntax to define **examples** and **example groups**. In *[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)*, we learned that a good test method name is crucial--when a test starts failing, it's the best way to determine whether we have to fix the application code or update the test. Quick examples and example groups serve two purposes: 1. They encourage you to write descriptive test names. 2. They greatly simplify the test code in the "arrange" step of your tests. ## Examples Using `it` Examples, defined with the `it` function, use assertions to demonstrate how code should behave. These are like test methods in XCTest. `it` takes two parameters: the name of the example, and a closure. The examples below specify how the `Sea.Dolphin` class should behave. A new dolphin should be smart and friendly: ```swift // Swift import Quick import Nimble import Sea class DolphinSpec: QuickSpec { override func spec() { it("is friendly") { expect(Dolphin().isFriendly).to(beTruthy()) } it("is smart") { expect(Dolphin().isSmart).to(beTruthy()) } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) it(@"is friendly", ^{ expect(@([[Dolphin new] isFriendly])).to(beTruthy()); }); it(@"is smart", ^{ expect(@([[Dolphin new] isSmart])).to(beTruthy()); }); QuickSpecEnd ``` Use descriptions to make it clear what your examples are testing. Descriptions can be of any length and use any character, including characters from languages besides English, or even emoji! :v: :sunglasses: ## Example Groups Using `describe` and `context` Example groups are logical groupings of examples. Example groups can share setup and teardown code. ### Describing Classes and Methods Using `describe` To specify the behavior of the `Dolphin` class's `click` method--in other words, to test the method works--several `it` examples can be grouped together using the `describe` function. Grouping similar examples together makes the spec easier to read: ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { describe("its click") { it("is loud") { let click = Dolphin().click() expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { let click = Dolphin().click() expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ describe(@"its click", ^{ it(@"is loud", ^{ Click *click = [[Dolphin new] click]; expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ Click *click = [[Dolphin new] click]; expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` When these two examples are run in Xcode, they'll display the description from the `describe` and `it` functions: 1. `DolphinSpec.a_dolphin_its_click_is_loud` 2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency` Again, it's clear what each of these examples is testing. ### Sharing Setup/Teardown Code Using `beforeEach` and `afterEach` Example groups don't just make the examples clearer, they're also useful for sharing setup and teardown code among examples in a group. In the example below, the `beforeEach` function is used to create a brand new instance of a dolphin and its click before each example in the group. This ensures that both are in a "fresh" state for every example: ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { var click: Click! beforeEach { click = dolphin.click() } it("is loud") { expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ __block Click *click = nil; beforeEach(^{ click = [dolphin click]; }); it(@"is loud", ^{ expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` Sharing setup like this might not seem like a big deal with the dolphin example, but for more complicated objects, it saves a lot of typing! To execute code *after* each example, use `afterEach`. ### Specifying Conditional Behavior Using `context` Dolphins use clicks for echolocation. When they approach something particularly interesting to them, they release a series of clicks in order to get a better idea of what it is. The tests need to show that the `click` method behaves differently in different circumstances. Normally, the dolphin just clicks once. But when the dolphin is close to something interesting, it clicks several times. This can be expressed using `context` functions: one `context` for the normal case, and one `context` for when the dolphin is close to something interesting: ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { context("when the dolphin is not near anything interesting") { it("is only emitted once") { expect(dolphin!.click().count).to(equal(1)) } } context("when the dolphin is near something interesting") { beforeEach { let ship = SunkenShip() Jamaica.dolphinCove.add(ship) Jamaica.dolphinCove.add(dolphin) } it("is emitted three times") { expect(dolphin.click().count).to(equal(3)) } } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ context(@"when the dolphin is not near anything interesting", ^{ it(@"is only emitted once", ^{ expect(@([[dolphin click] count])).to(equal(@1)); }); }); context(@"when the dolphin is near something interesting", ^{ beforeEach(^{ [[Jamaica dolphinCove] add:[SunkenShip new]]; [[Jamaica dolphinCove] add:dolphin]; }); it(@"is emitted three times", ^{ expect(@([[dolphin click] count])).to(equal(@3)); }); }); }); }); QuickSpecEnd ``` Strictly speaking, the `context` keyword is a synonym for `describe`, but thoughtful use will make your spec easier to understand. ### Test Readability: Quick and XCTest In [Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md), we looked at how one test per condition was a great way to organize test code. In XCTest, that leads to long test method names: ```swift func testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() { // ... } ``` Using Quick, the conditions are much easier to read, and we can perform setup for each example group: ```swift describe("a dolphin") { describe("its click") { context("when the dolphin is near something interesting") { it("is emitted three times") { // ... } } } } ``` ## Temporarily Disabling Examples or Groups You can temporarily disable examples or example groups that don't pass yet. The names of the examples will be printed out along with the test results, but they won't be run. You can disable an example or group by prepending `x`: ```swift // Swift xdescribe("its click") { // ...none of the code in this closure will be run. } xcontext("when the dolphin is not near anything interesting") { // ...none of the code in this closure will be run. } xit("is only emitted once") { // ...none of the code in this closure will be run. } ``` ```objc // Objective-C xdescribe(@"its click", ^{ // ...none of the code in this closure will be run. }); xcontext(@"when the dolphin is not near anything interesting", ^{ // ...none of the code in this closure will be run. }); xit(@"is only emitted once", ^{ // ...none of the code in this closure will be run. }); ``` ## Temporarily Running a Subset of Focused Examples Sometimes it helps to focus on only one or a few examples. Running one or two examples is faster than the entire suite, after all. You can run only one or two by using the `fit` function. You can also focus a group of examples using `fdescribe` or `fcontext`: ```swift fit("is loud") { // ...only this focused example will be run. } it("has a high frequency") { // ...this example is not focused, and will not be run. } fcontext("when the dolphin is near something interesting") { // ...examples in this group are also focused, so they'll be run. } ``` ```objc fit(@"is loud", { // ...only this focused example will be run. }); it(@"has a high frequency", ^{ // ...this example is not focused, and will not be run. }); fcontext(@"when the dolphin is near something interesting", ^{ // ...examples in this group are also focused, so they'll be run. }); ``` ## Global Setup/Teardown Using `beforeSuite` and `afterSuite` Some test setup needs to be performed before *any* examples are run. For these cases, use `beforeSuite` and `afterSuite`. In the example below, a database of all the creatures in the ocean is created before any examples are run. That database is torn down once all the examples have finished: ```swift // Swift import Quick class DolphinSpec: QuickSpec { override func spec() { beforeSuite { OceanDatabase.createDatabase(name: "test.db") OceanDatabase.connectToDatabase(name: "test.db") } afterSuite { OceanDatabase.teardownDatabase(name: "test.db") } describe("a dolphin") { // ... } } } ``` ```objc // Objective-C @import Quick; QuickSpecBegin(DolphinSpec) beforeSuite(^{ [OceanDatabase createDatabase:@"test.db"]; [OceanDatabase connectToDatabase:@"test.db"]; }); afterSuite(^{ [OceanDatabase teardownDatabase:@"test.db"]; }); describe(@"a dolphin", ^{ // ... }); QuickSpecEnd ``` You can specify as many `beforeSuite` and `afterSuite` as you like. All `beforeSuite` closures will be executed before any tests run, and all `afterSuite` closures will be executed after all the tests are finished. There is no guarantee as to what order these closures will be executed in. ## Accessing Metadata for the Current Example There may be some cases in which you'd like the know the name of the example that is currently being run, or how many have been run so far. Quick provides access to this metadata in `beforeEach` and `afterEach` closures. ```swift beforeEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) is about to be run.") } afterEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) has run.") } ``` ```objc beforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l is about to be run.", (long)exampleMetadata.exampleIndex); }); afterEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l has run.", (long)exampleMetadata.exampleIndex); }); ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/QuickInObjectiveC.md ================================================ # Using Quick in Objective-C Quick works equally well in both Swift and Objective-C. There are two notes to keep in mind when using Quick in Objective-C, however, which are described below. ## The Optional Shorthand Syntax Importing Quick in an Objective-C file defines macros named `it` and `itShouldBehaveLike`, as well as functions like `context()` and `describe()`. If the project you are testing also defines symbols with these names, you may encounter confusing build failures. In that case, you can avoid namespace collision by turning off Quick's optional "shorthand" syntax: ```objc #define QUICK_DISABLE_SHORT_SYNTAX 1 @import Quick; QuickSpecBegin(DolphinSpec) // ... QuickSpecEnd ``` You must define the `QUICK_DISABLE_SHORT_SYNTAX` macro *before* importing the Quick header. Alternatively, you may define the macro in your test target's build configuration: ![](http://d.twobitlabs.com/VFEamhvixX.png) ## Your Test Target Must Include At Least One Swift File The Swift stdlib will not be linked into your test target, and thus Quick will fail to execute properly, if your test target does not contain *at least one* Swift file. Without at least one Swift file, your tests will exit prematurely with the following error: ``` *** Test session exited(82) without checking in. Executable cannot be loaded for some other reason, such as a problem with a library it depends on or a code signature/entitlements mismatch. ``` To fix the problem, add a blank file called `SwiftSpec.swift` to your test target: ```swift // SwiftSpec.swift import Quick ``` > For more details on this issue, see https://github.com/Quick/Quick/issues/164. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/README.md ================================================ # Documentation Quick helps you verify how your Swift and Objective-C programs behave. Doing so effectively isn't just a matter of knowing how to use Quick, however. The guides in this directory can help you write effective tests--not just using Quick, but even XCTest or other testing frameworks. Each guide covers a particular topic. If you're completely new to unit testing, consider reading them in the order they're introduced below: - **[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)**: Read this if you're having trouble using your application code from within your test files. - **[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)**: Read this to learn how to write `XCTestCase` tests that will help you write code faster and more effectively. - **[Don't Test Code, Instead Verify Behavior](BehavioralTesting.md)**: Read this to learn what kinds of tests speed you up, and which ones will only end up slowing you down. - **[Clearer Tests Using Nimble Assertions](NimbleAssertions.md)**: Read this to learn how to use Nimble to generate better failure messages. Better failure messages help you move faster, by spending less time figuring out why a test failed. - **[Organized Tests with Quick Examples and Example Groups](QuickExamplesAndGroups.md)**: Read this to learn how Quick can help you write even more effective tests, using *examples* and *example groups*. - **[Testing OS X and iOS Applications](TestingApps.md)**: Read this to learn more about testing code that uses the AppKit and UIKit frameworks. - **[Reducing Test Boilerplate with Shared Assertions](SharedExamples.md)**: Read this to learn how to share sets of assertions among your tests. - **[Configuring How Quick Behaves](ConfiguringQuick.md)**: Read this to learn how you can change how Quick behaves when running your test suite. - **[Using Quick in Objective-C](QuickInObjectiveC.md)**: Read this if you experience trouble using Quick in Objective-C. - **[Installing Quick](InstallingQuick.md)**: Read this for instructions on how to add Quick to your project, using Git submodules, CocoaPods, Carthage, or the Swift Package Manager. - **[Installing Quick File Templates](InstallingFileTemplates.md)**: Read this to learn how to install file templates that make writing Quick specs faster. - **[More Resources](MoreResources.md)** A list of additional resources on OS X and iOS testing. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/SettingUpYourXcodeProject.md ================================================ # Setting Up Tests in Your Xcode Project With the exception of the Command Line Tool project type, when you create a new project in Xcode 7, a unit test target is included by default. [See specific instructions for a Command Line Tool Project](#setting-up-a-test-target-for-a-command-line-tool-project). To write unit tests, you'll need to be able to use your main target's code from within your test target. ## Testing Swift Code Using Swift In order to test code written in Swift, you'll need to do two things: 1. Set "defines module" in your `.xcodeproj` to `YES`. * To do this in Xcode: Choose your project, then "Build Settings" header, then "Defines Modules" line, then select "Yes". 2. `@testable import YourAppModuleName` in your unit tests. This will expose Any `public` and `internal` (the default) symbols to your tests. `private` symbols are still unavailable. ```swift // MyAppTests.swift import XCTest @testable import MyModule class MyClassTests: XCTestCase { // ... } ``` > Some developers advocate adding Swift source files to your test target. However, this leads to [subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91), and is not recommended. ## Testing Objective-C Code Using Swift 1. Add a bridging header to your test target. 2. In the bridging header, import the file containing the code you'd like to test. ```objc // MyAppTests-BridgingHeader.h #import "MyClass.h" ``` You can now use the code from `MyClass.h` in your Swift test files. ## Testing Swift Code Using Objective-C 1. Bridge Swift classes and functions you'd like to test to Objective-C by using the `@objc` attribute. 2. Import your module's Swift headers in your unit tests. ```objc @import XCTest; #import "MyModule-Swift.h" @interface MyClassTests: XCTestCase // ... @end ``` ## Testing Objective-C Code Using Objective-C Import the file defining the code you'd like to test from within your test target: ```objc // MyAppTests.m @import XCTest; #import "MyClass.h" @interface MyClassTests: XCTestCase // ... @end ``` ### Setting Up a Test Target for a Command Line Tool Project 1. Add a target to your project in the project pane. 2. Select "OS X Unit Testing Bundle". 3. Edit the scheme of your main target. 4. Select the "Test" node, click the "+" under the "Info" heading, and select your testing bundle. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/SharedExamples.md ================================================ # Reducing Test Boilerplate with Shared Assertions In some cases, the same set of specifications apply to multiple objects. For example, consider a protocol called `Edible`. When a dolphin eats something `Edible`, the dolphin becomes happy. `Mackerel` and `Cod` are both edible. Quick allows you to easily test that a dolphin is happy to eat either one. The example below defines a set of "shared examples" for "something edible", and specifies that both mackerel and cod behave like "something edible": ```swift // Swift import Quick import Nimble class EdibleSharedExamplesConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("something edible") { (sharedExampleContext: SharedExampleContext) in it("makes dolphins happy") { let dolphin = Dolphin(happy: false) let edible = sharedExampleContext()["edible"] dolphin.eat(edible) expect(dolphin.isHappy).to(beTruthy()) } } } } class MackerelSpec: QuickSpec { override func spec() { var mackerel: Mackerel! beforeEach { mackerel = Mackerel() } itBehavesLike("something edible") { ["edible": mackerel] } } } class CodSpec: QuickSpec { override func spec() { var cod: Cod! beforeEach { cod = Cod() } itBehavesLike("something edible") { ["edible": cod] } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickConfigurationBegin(EdibleSharedExamplesConfiguration) + (void)configure:(Configuration *configuration) { sharedExamples(@"something edible", ^(QCKDSLSharedExampleContext exampleContext) { it(@"makes dolphins happy") { Dolphin *dolphin = [[Dolphin alloc] init]; dolphin.happy = NO; id edible = exampleContext()[@"edible"]; [dolphin eat:edible]; expect(dolphin.isHappy).to(beTruthy()) } }); } QuickConfigurationEnd QuickSpecBegin(MackerelSpec) __block Mackerel *mackerel = nil; beforeEach(^{ mackerel = [[Mackerel alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": mackerel }; }); QuickSpecEnd QuickSpecBegin(CodSpec) __block Mackerel *cod = nil; beforeEach(^{ cod = [[Cod alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": cod }; }); QuickSpecEnd ``` Shared examples can include any number of `it`, `context`, and `describe` blocks. They save a *lot* of typing when running the same tests against several different kinds of objects. In some cases, you won't need any additional context. In Swift, you can simply use `sharedExamples` closures that take no parameters. This might be useful when testing some sort of global state: ```swift // Swift import Quick sharedExamples("everything under the sea") { // ... } itBehavesLike("everything under the sea") ``` > In Objective-C, you'll have to pass a block that takes a `QCKDSLSharedExampleContext`, even if you don't plan on using that argument. Sorry, but that's the way the cookie crumbles! :cookie: :bomb: You can also "focus" shared examples using the `fitBehavesLike` function. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/en-us/TestingApps.md ================================================ # Testing OS X and iOS Applications *[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)* covers everything you need to know to test any Objective-C or Swift function or class. In this section, we'll go over a few additional hints for testing classes like `UIViewController` subclasses. > You can see a short lightning talk covering most of these topics [here](https://vimeo.com/115671189#t=37m50s) (the talk begins at 37'50"). ## Triggering `UIViewController` Lifecycle Events Normally, UIKit triggers lifecycle events for your view controller as it's presented within the app. When testing a `UIViewController`, however, you'll need to trigger these yourself. You can do so in one of three ways: 1. Accessing `UIViewController.view`, which triggers things like `UIViewController.viewDidLoad()`. 2. Use `UIViewController.beginAppearanceTransition()` to trigger most lifecycle events. 3. Directly calling methods like `UIViewController.viewDidLoad()` or `UIViewController.viewWillAppear()`. ```swift // Swift import Quick import Nimble import BananaApp class BananaViewControllerSpec: QuickSpec { override func spec() { var viewController: BananaViewController! beforeEach { viewController = BananaViewController() } describe(".viewDidLoad()") { beforeEach { // Method #1: Access the view to trigger BananaViewController.viewDidLoad(). let _ = viewController.view } it("sets the banana count label to zero") { // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal("0")) } } describe("the view") { beforeEach { // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. viewController.beginAppearanceTransition(true, animated: false) viewController.endAppearanceTransition() } // ... } describe(".viewWillDisappear()") { beforeEach { // Method #3: Directly call the lifecycle event. viewController.viewWillDisappear(false) } // ... } } } ``` ```objc // Objective-C @import Quick; @import Nimble; #import "BananaViewController.h" QuickSpecBegin(BananaViewControllerSpec) __block BananaViewController *viewController = nil; beforeEach(^{ viewController = [[BananaViewController alloc] init]; }); describe(@"-viewDidLoad", ^{ beforeEach(^{ // Method #1: Access the view to trigger -[BananaViewController viewDidLoad]. [viewController view]; }); it(@"sets the banana count label to zero", ^{ // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal(@"0")) }); }); describe(@"the view", ^{ beforeEach(^{ // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. [viewController beginAppearanceTransition:YES animated:NO]; [viewController endAppearanceTransition]; }); // ... }); describe(@"-viewWillDisappear", ^{ beforeEach(^{ // Method #3: Directly call the lifecycle event. [viewController viewWillDisappear:NO]; }); // ... }); QuickSpecEnd ``` ## Initializing View Controllers Defined in Storyboards To initialize view controllers defined in a storyboard, you'll need to assign a **Storyboard ID** to the view controller: ![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png) Once you've done so, you can instantiate the view controller from within your tests: ```swift // Swift var viewController: BananaViewController! beforeEach { // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. let storyboard = UIStoryboard(name: "Main", bundle: nil) // 2. Use the storyboard to instantiate the view controller. viewController = storyboard.instantiateViewControllerWithIdentifier( "BananaViewControllerID") as! BananaViewController } ``` ```objc // Objective-C __block BananaViewController *viewController = nil; beforeEach(^{ // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // 2. Use the storyboard to instantiate the view controller. viewController = [storyboard instantiateViewControllerWithIdentifier:@"BananaViewControllerID"]; }); ``` ## Triggering UIControl Events Like Button Taps Buttons and other UIKit classes inherit from `UIControl`, which defines methods that allow us to send control events, like button taps, programmatically. To test behavior that occurs when a button is tapped, you can write: ```swift // Swift describe("the 'more bananas' button") { it("increments the banana count label when tapped") { viewController.moreButton.sendActionsForControlEvents( UIControlEvents.TouchUpInside) expect(viewController.bananaCountLabel.text).to(equal("1")) } } ``` ```objc // Objective-C describe(@"the 'more bananas' button", ^{ it(@"increments the banana count label when tapped", ^{ [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside]; expect(viewController.bananaCountLabel.text).to(equal(@"1")); }); }); ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/ArrangeActAssert.md ================================================ # Effective Tests Using XCTest: Arrange, Act, and Assert XCTest や Quick に限らず、テストフレームワークを使用する際、このパターンに従うことで効率的なユニットテストを書くことができます。 1. Arrange(環境構築) 2. Act(実行) 3. Assert(動作確認) ## パターンに従ってテストを書く 例として Banana クラスを用意します。 ```swift // Banana/Banana.swift /** A delicious banana. Tastes better if you peel it first. */ public class Banana { private var isPeeled = false /** Peels the banana. */ public func peel() { isPeeled = true } /** You shouldn't eat a banana unless it's been peeled. */ public var isEdible: Bool { return isPeeled } } ``` ここでは `Banana.peel()` のテストをしてみましょう。このメソッドの期待する振る舞いはこのようになります。 ```swift // BananaTests/BananaTests.swift class BananaTests: XCTestCase { func testPeel() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } } ``` ## 簡潔なテスト名を用いる この `testPeel()` テストのおかげで `Banana.peel()` が正しく動作しない場合、すぐ気付くことができます。 我々のアプリケーションコードを変更することで正しく動作しないケース(テストが失敗するケース)はしばしば起こります。 テストが失敗する場合は下記どちらかのケースになります。 1. 間違えてアプリケーションコードを壊してしまっているため、直す必要がある 2. アプリケーションコードは期待したとおりに動いているが、もともと期待した機能が変わっているためテストコードを直す必要がある もしテストが失敗した場合、どちらのケースに当てはまる判断する必要が出てきます。そのためテスト名が分かりやすいことが重要になります。 良いテスト名とは、 1. 何をテストしているか明確であること 2. どのような時にテストがパスするか・失敗するか明確であること 例に挙げた `testPeel()` は良いテスト名でしょうか?分かりやすくしてみましょう。 ```diff // BananaTests.swift -func testPeel() { +func testPeel_makesTheBananaEdible() { // Arrange: Create the banana we'll be peeling. let banana = Banana() // Act: Peel the banana. banana.peel() // Assert: Verify that the banana is now edible. XCTAssertTrue(banana.isEdible) } ``` 新しいテスト名は、 1. 何をテストしているか明確である: `testPeel` は `Banana.peel()` メソッドをテストしてることを示す。 2. どのような時にテストがパスするか明確である: `makesTheBananaEdible` はバナナが食べられるか(edible)どうかをテストしていることを示す。 ## テスト時の条件 人々がバナナを欲しい時、`offer()` というメソッドを使います。 ```swift // Banana/Offer.swift /** Given a banana, returns a string that can be used to offer someone the banana. */ public func offer(banana: Banana) -> String { if banana.isEdible { return "Hey, want a banana?" } else { return "Hey, want me to peel this banana for you?" } } ``` 私達のアプリケーションコードは2つのうちどちらかを実行します: 1. 食べられる(すでに皮がむかれている)バナナを注文するか 2. まだ食べられない(すでに皮がむかれている)バナナを注文するか 両方のケースをテストしてみましょう。 ```swift // BananaTests/OfferTests.swift class OfferTests: XCTestCase { func testOffer_whenTheBananaIsPeeled_offersTheBanana() { // Arrange: Create a banana and peel it. let banana = Banana() banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { // Arrange: Create a banana. let banana = Banana() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` 私達のテスト名は'どのような条件でテストをパスするか'を明確に表しています。 `whenTheBananaIsPeeled`, `offer()` のケースでは `offersTheBanana` となるべきです。またバナナの皮がむかれていない場合は? ここでは両方共テストしています。 ここで大事なことはアプリケーションコード内の各if文に対してそれぞれ1つのテストを持っていることです。 これはテストを書く際の重要なアプローチです。このアプローチでは全ての条件(if文)に関してテストされていることを保証します。 テストのうちどれか1つがでも失敗するようになったらコードの見直しをする必要があります。テスト名が分かりやすいとすぐにチェックすべき箇所が分かります。 ## `XCTestCase.setUp()`を用いて簡潔に環境構築をする `OfferTests` の2つのテストのどちらにも同じ"環境構築"のコードが入っています。 どちらのテストでも banana を作っています。このコードは一箇所にまとめるべきです。なぜでしょう? 1. そのままにしておく場合、もし `Banana` の生成方法が変わったら, 私たちは全てのテストを修正しないといけなくなります。 2. テストコードが短くなり、テストの可読性が向上します。 Banana の生成方法を `XCTestCase.setUp()` の中に移しましょう。`XCTestCase.setUp()` は各テストの実行前に一度呼び出されます。 ```diff // OfferTests.swift class OfferTests: XCTestCase { + var banana: Banana! + + override func setUp() { + super.setUp() + banana = Banana() + } + func testOffer_whenTheBananaIsPeeled_offersTheBanana() { - // Arrange: Create a banana and peel it. - let banana = Banana() + // Arrange: Peel the banana. banana.peel() // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want a banana?") } func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { - // Arrange: Create a banana. - let banana = Banana() - // Act: Create the string used to offer the banana. let message = offer(banana) // Assert: Verify it's the right string. XCTAssertEqual(message, "Hey, want me to peel this banana for you?") } } ``` ## 複数のテストにまたがって環境構築を共有する もし複数のテストにまたがって同じ環境構築のコードを使っている部分があれば、 test target 内に'ヘルパー関数'を定義しましょう。 ```swift // BananaTests/BananaHelpers.swift internal func createNewPeeledBanana() -> Banana { let banana = Banana() banana.peel() return banana } ``` > 共通操作を定義するのに関数を使いましょう。関数は継承できず、状態を保持することができません。継承や状態を持たせる場合、テストの可読性が落ちてしまいます。 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/BehavioralTesting.md ================================================ # コードをテストせず、動作を確認する テストはアプリケーションが**期待と異なる動作** をした時のみ失敗するようにすべきです。 アプリケーションコードが *何を* したかをテストすべきで、*どのように* したかをテストすべきではありません。 - アプリケーションが *何を* したかを確認するテストは **動作テスト(behavioral tests)** といいます。 - アプリケーションの動作が変わっていなくても、コードを変更すると失敗するようになるテストは **脆弱なテスト(brittle tests)** といいます。 ここで `GorillaDB` というバナナのデータベースを用意します。 `GorillaDB`は Key-Value 型のデータベースでバナナを保存することができます。 ```swift let database = GorillaDB() let banana = Banana() database.save(banana: banana, key: "my-banana") ``` そしてバナナをディスクから取り出すことができます。 ```swift let banana = database.load(key: "my-banana") ``` ## 脆弱なテスト(Brittle Tests) どのようにして動作をテストするのでしょう?一つの方法としてここではバナナを保存した後にバナナのデータベースのサイズをチェックします。 ```swift // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") // Assert: The size of the database should have increased by one. XCTAssertEqual(database.size, originalSize + 1) } ``` ここで `GorillaDB` のソースコードを変更したとします。データベースからの読み出しを速くするためにもっとも頻繁に使用するバナナをキャッシュに保持するようにします。 `GorillaDB.size` はキャッシュのサイズに合わせて大きくなります。この場合ディスクに保存しなくなるため上記のテストは失敗します。 ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/Screenshot_database_size_fail.png) ## 動作テスト(Behavioral Tests) 動作のテストの重要なポイントは アプリケーションコードに期待する動作を明確にすることです。 `testSave_savesTheBananaToTheDatabase` というテストで期待する動作は バナナをデータベースに "保存する" ことでしょうか? "保存する"というのは 後から読み出すことができる、という意味です。そのためデータベースのサイズが大きくなることをテストするのではなく、 バナナを読みだすことができるかをテストすべきです。 ```diff // GorillaDBTests.swift func testSave_savesTheBananaToTheDatabase() { // Arrange: Create a database and get its original size. let database = GorillaDB() - let originalSize = database.size // Act: Save a banana to the database. let banana = Banana() database.save(banana: banana, key: "test-banana") - // Assert: The size of the database should have increased by one. - XCTAssertEqual(database.size, originalSize + 1) + // Assert: The bananas saved to and loaded from the database should be the same. + XCTAssertEqual(database.load(key: "test-banana"), banana) } ``` 動作テストを書く際の重要なポイント: - アプリケーションコードが何をすべきか明確にしているか? - テストが *動作のみ* をテストしているか?コードの動作が他の要因で意図しない動きにならないか。 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/ConfiguringQuick.md ================================================ # Quickの挙動をカスタマイズしましょう QuickConfiguration を継承したクラスを作成し、`QuickConfiguration.Type.configure()` をオーバーライドすることで Quick の挙動をカスラマイズすることができます。 ```swift // Swift import Quick class ProjectDataTestConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { // ...set options on the configuration object here. } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(ProjectDataTestConfiguration) + (void)configure:(Configuration *configuration) { // ...set options on the configuration object here. } QuickConfigurationEnd ``` 一つのプロジェクトで複数の configuration を持つこともできますが どの順に configuration が実行されるか保証されません。 ## テスト全体で使う `beforeEach` と `afterEach` を追加する `QuickConfiguration.beforeEach` と `QuickConfiguration.afterEach` を使うと テストスイート内の各テストの実行前・実行後に走らせる処理を記述することができます。 ```swift // Swift import Quick import Sea class FinConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { Dorsal.sharedFin().height = 0 } } } ``` ```objc // Objective-C @import Quick; #import "Dorsal.h" QuickConfigurationBegin(FinConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEach:^{ [Dorsal sharedFin].height = 0; }]; } QuickConfigurationEnd ``` さらに現在実行中のテストに関するメタデータを取得することもできます。 ```swift // Swift import Quick class SeaConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { exampleMetadata in // ...use the example metadata object to access the current example name, and more. } } } ``` ```objc // Objective-C @import Quick; QuickConfigurationBegin(SeaConfiguration) + (void)configure:(Configuration *)configuration { [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { // ...use the example metadata object to access the current example name, and more. }]; } QuickConfigurationEnd ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/InstallingFileTemplates.md ================================================ # Quickファイル・テンプレートのインストール方法: Quick のリポジトリには Swift, Objective-C の両方で使用できるテンプレートが含まれています。 ## Alcatraz Quick のテンプレートは Xcode のパッケージマネージャーの [Alcatraz](https://github.com/supermarin/Alcatraz) 経由でインストールできます。 パッケージマネージャーから検索してみてください。 ![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png) ## Rakefile から手動でインストールする 手動でインストールすることもできます。 リポジトリを clone して rake task の `templates:install` を実行してください。 ```sh $ git clone git@github.com:Quick/Quick.git $ rake templates:install ``` アンインストールも簡単です、下記コマンドを実行してください。 ```sh $ rake templates:uninstall ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/InstallingQuick.md ================================================ # Quickのインストール方法 > **もし Xcode 7.1 を使用していたら** 現時点で最新バージョンの Quick--`v0.9.0` を使用してください > 最新のリリースは `swift-2.0` branch で開発されています。 Quick は examples(テスト) and example groups(テストグループ)の文法を提供します。 Nimble は `expect(...).to` の文法を提供します。 テストでは両方を使ってもいいですし、どちらか片方を使う、ということもできます。 Quick をテストに組み込むには3つの方法があります。 1. [Git Submodules](#git-submodules) 2. [CocoaPods](#cocoapods) 3. [Carthage](#carthage) 下記のインストール手順の中からどれか選択してインストールを進めてください。 インストール完了後、テストターゲット内のファイルで Quick を使用(`import Quick`)できるようになります。 ## Git Submodules Git submodules を使って Quick と Nimble をリンクします。手順の流れとしては下記の通りです。 1. Quick を submodule として追加. 2. プロジェクトで`.xcworkspace`を使っていなければ作成してください。 ([こちらを参照](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html)) 3. `Quick.xcodeproj` をプロジェクトの`.xcworkspace`に追加してください。 4. `Nimble.xcodeproj` をプロジェクトの`.xcworkspace`に追加してください。 `Nimble.xcodeproj` は `path/to/Quick/Externals/Nimble` にあります。 Quick が依存している Niimble を追加することで Quick のバージョンと Nimble のバージョンを合わせられます。 5. `Quick.framework` と `Nimble.framework` を BuildPhase の "Link Binary with Libraries" でリンクします。 もしまだ git submodules 用のディレクトリを作っていなかったら、まず始めにディレクトリを作成します。 `Vendor` という名前のディレクトリを用意しましょう。 **Step One:** Quick と Nimble を Git submodules としてダウンロードする ```sh git submodule add git@github.com:Quick/Quick.git Vendor/Quick git submodule add git@github.com:Quick/Nimble.git Vendor/Nimble git submodule update --init --recursive ``` **Step Two:** `Quick.xcodeproj` と `Nimble.xcodeproj` をプロジェクトの `.xcworkspace` に追加してください。 例として `Guanaco.xcworkspace` という workspace に Quick と Nimble を追加します。 ![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png) **Step Three:** build phase の `Link Binary with Libraries` に `Quick.framework` を追加してください。 2種類の `Quick.frameworks` が表示されますが 1 つは OS X 用で、もう 1 つが iOS 用です。 ![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png) `Nimble.framework` も同様に追加してください。これで完了です! **Submodules をアップデートする:** Quick と Nimble を最新バージョンにアップデートしたい場合は Quick ディレクトリに入って master リポジトリから pull してください。 ```sh cd /path/to/your/project/Vendor/Quick git checkout master git pull --rebase origin master ``` あなたのプロジェクトの Git リポジトリは submodule の変更もトラッキングしているので Quick submodules の更新を commit しておきます。 ```sh cd /path/to/your/project git commit -m "Updated Quick submodule" ``` **Quick Submodule を含んだ リポジトリを git clone する:** 他の開発者があなたのリポジトリを clone したあと、submodules を同様に pull してくる必要があります。`git submodule update` コマンドを実行することで pull できます。 ```sh git submodule update --init --recursive ``` git submodules に詳細な情報は[こちら](http://git-scm.com/book/en/Git-Tools-Submodules). ## CocoaPods CocoaPods でインストールする場合、バージョンは 0.36.0 以降である必要(CocoaPods が Swift をサポートしているバージョン)があります。 Podfile に Quick と Nimble を追加して下さい。 Swift では ```use_frameworks!``` も必要です。 ```rb # Podfile use_frameworks! def testing_pods pod 'Quick', '~> 0.9.0' pod 'Nimble', '3.0.0' end target 'MyTests' do testing_pods end target 'MyUITests' do testing_pods end ``` その後 pod install でダウンロード、リンクします。 ```sh pod install ``` ### Swift 1.2 で使う Quick の最新版(0.4.0)は Swift 2 (Xcode 7) 用ですが、Nimble の最新版(1.0.0) は Swift 1.2 (Xcode 6) 用です。 もし Xcode6 で使いたい場合は下記のようにバージョン指定してください。 ```sh target 'MyTests' do use_frameworks! pod 'Quick', '~>0.3.0' pod 'Nimble', '~>1.0.0' end ``` ## [Carthage](https://github.com/Carthage/Carthage) テストターゲットは "Embedded Binaries" section がないので framework はターゲットの "Link Binary With Libraries" に追加する必要があります。 build phase の "Copy Files" も同様にターゲットの framework destination を指定して下さい。 > Carthage は dynamic frameworks をビルドするので code signing identity に有効なものを設定しておく必要があります。 1. Quick を [`Cartfile.private`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate) に追加してください。 ``` github "Quick/Quick" github "Quick/Nimble" ``` 2. `carthage update` を実行してください。 3. `Carthage/Build/[platform]/` ディレクトリから Quick と Nimble をテストターゲットの "Link Binary With Libraries" に追加してください。 ![](http://i.imgur.com/pBkDDk5.png) 4. テストターゲットの build phase で "New Copy Files Phase" を選択してください。 ![](http://i.imgur.com/jZATIjQ.png) 5. "Destination" を "Frameworks" に設定して、2つの framework を追加してください。 ![](http://i.imgur.com/rpnyWGH.png) Carthage の dependency の管理方法はこの方法だけではありません。 詳細な情報はこちらを参照してください [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md) 。 ### (非推奨) 実機で Quick のテストを走らせる Quick で書かれたテストを実機で走らせるためには `Quick.framework` と `Nimble.framework` を `Embedded Binaries` としてテストターゲットの `ホストアプリケーション` に追加されます。 Embedded binary として framework を追加すると Xcode が自動的にホストアプリケーションにリンクしてしまいます。 ![](http://indiedev.kapsi.fi/images/embed-in-host.png) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/MoreResources.md ================================================ # その他の参考資料 ## Quick のテストのサンプル Quick は[GitHub](https://github.com/github)や[ReactiveCocoa](https://github.com/ReactiveCocoa)を含む多くの企業、OSS プロジェクト、個人で利用されています。 下記リポジトリを参考にしてみてください。 - https://github.com/ReactiveCocoa/ReactiveCocoa - https://github.com/github/Archimedes - https://github.com/libgit2/objective-git - https://github.com/jspahrsummers/RXSwift - https://github.com/artsy/eidolon - https://github.com/Moya/Moya - https://github.com/nerdyc/Squeal - https://github.com/pepibumur/SugarRecord ## OS X と iOS Apps のテストに関する参考資料 - **[Quality Coding](http://qualitycoding.org/)**: ユニットテストにフォーカスした iOS 開発に関するブログ。 - **[OCMock Tutorials](http://ocmock.org/support/)**: テストでモックが必要な時に使用する OCMock のチュートリアル。 - **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**: 通信を行うコードをテストする時はこのライブラリを使用して下さい。 - **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**: Nimble の matcher の書き方に関するドキュメントはこちら([the Nimble documentation](https://github.com/Quick/Nimble)) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/NimbleAssertions.md ================================================ # Nimble Assertions を使ってテストをより簡潔に テストが期待した通りに動作しない時、ユニットテストは **何が問題か** を明確にすべきです。 次の関数はサルの集団から馬鹿なサルだけを取得します。 ```swift public func silliest(monkeys: [Monkey]) -> [Monkey] { return monkeys.filter { $0.silliness == .VerySilly } } ``` ここでこの関数に対するテストを書いてみましょう。 ```swift func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) XCTAssertTrue(contains(sillyMonkeys, kiki)) } ``` このテストは下記のメッセージとともに失敗します。 ``` XCTAssertTrue failed ``` ![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png) 失敗した時は多くの情報を残すことが望ましいです。このメッセージのままではよく分かりません。 true や false だけではそれがなにか分かりません。このままではテストコードから原因を見つけるまでに時間がかかってしまいます。 ## 良い失敗メッセージを残す: Part 1: XCTAssert に手動でメッセージを渡す `XCTAssert` は失敗時にメッセージを指定することができます。 ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki)) + XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") } ``` しかし`XCTAssert`では自分でメッセージを指定しないといけません。 ## 良い失敗メッセージを残す: Part 2: Nimble Failure Messages を使う Nimble は Assert, 失敗時のメッセージを読みやすくしてくれます。 ```diff func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) let carl = Monkey(name: "Carl", silliness: .NotSilly) let jane = Monkey(name: "Jane", silliness: .VerySilly) let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") + expect(sillyMonkeys).to(contain(kiki)) } ``` Nimble では自分でメッセージを指定しなくても Nimble がとても読みやすいメッセージを返してくれます。 ``` expected to contain , got <[Monkey(name: Jane, silliness: VerySilly)]> ``` ![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png) 失敗メッセージは何が問題かを明確にします:ここでは `kiki` が `silliest()` の戻り値に含まれることを期待していますが このテストでは 'jane' しか含まれていません。Nimble からのメッセージで何が問題かが分かりやすく伝えられるので、簡単に直すことができます。 ```diff public func silliest(monkeys: [Monkey]) -> [Monkey] { - return monkeys.filter { $0.silliness == .VerySilly } + return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly } } ``` Nimble は具体的な失敗メッセージを返してくれる多くの種類の Assertion を提供します。 `XCTAssert` と違って毎回自分でメッセージを指定することはありません。 Nimble の全ての assertion はこちらで確認できます: [Nimble README](https://github.com/Quick/Nimble) 。 下記に幾つかの例を示します。 ```swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/QuickExamplesAndGroups.md ================================================ # QuickのExamplesとExample Groupsで、たくさんのテストでも整理整頓 Quick では **examples** と **example groups** という特別な文法があります。 *[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)* では, 良いテスト名をつけることがとても重要だということを学びました。 テストが失敗した時、テスト名はアプリケーションコードを直すべきかテストを修正すべきかを判断する際の重要な材料になります。 Quick の examples(テスト) と example groups(テストグループ) は二つの役に立ちます。 1. 記述的なテスト名を書くためことをサポートします 2. テスト中の "環境構築" 部分におけるコードを簡略化します ## Examples の `it` Examples は 'it' という「コードがどのように動作すべきかを宣言する」関数を持ちます。 これは XCTest の test methods のようなものです。 'it' 関数は2つのパラメータ、example の名前と closure です。 下記のテストでは `Sea.Dolphin` クラスがどのように動作すべきかを記述しています。 この example では「新しく生成された Dolphin は smart で friendly であるべき」と書いています。 ```swift // Swift import Quick import Nimble import Sea class DolphinSpec: QuickSpec { override func spec() { it("is friendly") { expect(Dolphin().isFriendly).to(beTruthy()) } it("is smart") { expect(Dolphin().isSmart).to(beTruthy()) } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) it(@"is friendly", ^{ expect(@([[Dolphin new] isFriendly])).to(beTruthy()); }); it(@"is smart", ^{ expect(@([[Dolphin new] isSmart])).to(beTruthy()); }); QuickSpecEnd ``` Examples が何をテストしているかを明確にするために Description を使います。 Description は文字数制限がなくどの文字でも(絵文字さえも!)使うことができます。 :v: :sunglasses: ## Example Groups の `describe` と `context` Example groups では Example のグルーピングができ、 setup と teardown のコードを共有できます。 ### `describe` を使ってクラスと関数について記述する `Dolphin` クラスの `click` 関数の動作を記述する際に、 言い換えると関数が動作していることをテストする際に、 複数の 'it' example を `describe` を用いてグルーピングすることができます。 似ている examples をまとめることで可読性が向上します。 ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { describe("its click") { it("is loud") { let click = Dolphin().click() expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { let click = Dolphin().click() expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ describe(@"its click", ^{ it(@"is loud", ^{ Click *click = [[Dolphin new] click]; expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ Click *click = [[Dolphin new] click]; expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` Xcode でこれらの examples を実行すると`describe` と `it` の記述内容も表示されます。上記のテストの場合、下記のような出力になります。 1. `DolphinSpec.a_dolphin_its_click_is_loud` 2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency` それぞれの Example が何をテストしているかが明確ですね。 ### `beforeEach` と `afterEach` を使って Setup/Teardown のコードを共有する Example groups はテストの内容をただ分かりやすくするだけでなく同一グループ内のsetup/teardownコードを共有することができます。 下記の例では`its click`の Example group のテストを実行する前に `beforeEach`を使って新しい Dolphin のインスタンスを生成しています。 各 Example において "新しい" 状態でテストが行えます。 ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { var click: Click! beforeEach { click = dolphin.click() } it("is loud") { expect(click.isLoud).to(beTruthy()) } it("has a high frequency") { expect(click.hasHighFrequency).to(beTruthy()) } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ __block Click *click = nil; beforeEach(^{ click = [dolphin click]; }); it(@"is loud", ^{ expect(@(click.isLoud)).to(beTruthy()); }); it(@"has a high frequency", ^{ expect(@(click.hasHighFrequency)).to(beTruthy()); }); }); }); QuickSpecEnd ``` この例では setup を共有することはあまりメリットがないように見えるかもしれませんが 複数の複雑なオブジェクトを生成する時などコード量を節約することができます。 それぞれの Example を実行した後に実行したいコードについては`afterEach`を使います。 ### 'context' を使ってある条件での動作を記述する 例の Dolphins(イルカ達) はエコーロケーションのために カチッと音を立てます('click ' 関数を呼び出します)。 イルカ達は特に興味のあるものに近づく時、それが何かを調べるために連続してエコーロケーション('click' 関数を呼び出します)を行います。 このシナリオにおいてテストが 異なる状況において click 関数の動作は異なる ということを表す必要があります。 基本的にイルカは一度音を鳴らすだけですが、イルカ達が興味があるものが近くにあると連続して音を鳴らします。 この状況について 'context' 関数を使って表します。ある 'context' では通常のケースで、もう一方の'context'ではイルカが興味あるものに近づいているケースです。 ```swift // Swift import Quick import Nimble class DolphinSpec: QuickSpec { override func spec() { describe("a dolphin") { var dolphin: Dolphin! beforeEach { dolphin = Dolphin() } describe("its click") { context("when the dolphin is not near anything interesting") { it("is only emitted once") { expect(dolphin!.click().count).to(equal(1)) } } context("when the dolphin is near something interesting") { beforeEach { let ship = SunkenShip() Jamaica.dolphinCove.add(ship) Jamaica.dolphinCove.add(dolphin) } it("is emitted three times") { expect(dolphin.click().count).to(equal(3)) } } } } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickSpecBegin(DolphinSpec) describe(@"a dolphin", ^{ __block Dolphin *dolphin = nil; beforeEach(^{ dolphin = [Dolphin new]; }); describe(@"its click", ^{ context(@"when the dolphin is not near anything interesting", ^{ it(@"is only emitted once", ^{ expect(@([[dolphin click] count])).to(equal(@1)); }); }); context(@"when the dolphin is near something interesting", ^{ beforeEach(^{ [[Jamaica dolphinCove] add:[SunkenShip new]]; [[Jamaica dolphinCove] add:dolphin]; }); it(@"is emitted three times", ^{ expect(@([[dolphin click] count])).to(equal(@3)); }); }); }); }); QuickSpecEnd ``` 厳密には `context` キーワードは `describe`と同じですがテストを理解しやすくなるので使い分けるとよいです。 ### テストの可読性: Quick と XCTest *[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)*で各条件についてそれぞれテストを用意するのがテストを書く際の重要な方法と述べましたが このアプローチで XCTest でテストを書くとテスト名が長くなってしまいます。 ```swift func testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() { // ... } ``` Quick を使うと条件について読みやすく、しかもそれぞれの Example group について環境構築が効率的に行えます。 ```swift describe("a dolphin") { describe("its click") { context("when the dolphin is near something interesting") { it("is emitted three times") { // ... } } } } ``` ## 一時的に Examples や Example Groups を無効にする 通っていない Example を一時的に無効にすることもできます。 Example や Example Groups の先頭に 'x' をつけると無効になります。 Examples の名前がテスト結果の中に出力されますがテストは実行されなくなります。 ```swift // Swift xdescribe("its click") { // ...none of the code in this closure will be run. } xcontext("when the dolphin is not near anything interesting") { // ...none of the code in this closure will be run. } xit("is only emitted once") { // ...none of the code in this closure will be run. } ``` ```objc // Objective-C xdescribe(@"its click", ^{ // ...none of the code in this closure will be run. }); xcontext(@"when the dolphin is not near anything interesting", ^{ // ...none of the code in this closure will be run. }); xit(@"is only emitted once", ^{ // ...none of the code in this closure will be run. }); ``` ## 指定した Examples だけ一時的に実行する 一部の Example だけ実行できると便利なこともあります。 そのような時は実行したい Example を 'fit' 関数を用いて指定します。 特定の Example group だけ実行したい時は`fdescribe` か `fcontext` を記述します。 ※もともと書いてあるテストコードの先頭に 'f' を追記するだけです。 ```swift fit("is loud") { // ...only this focused example will be run. } it("has a high frequency") { // ...this example is not focused, and will not be run. } fcontext("when the dolphin is near something interesting") { // ...examples in this group are also focused, so they'll be run. } ``` ```objc fit(@"is loud", { // ...only this focused example will be run. }); it(@"has a high frequency", ^{ // ...this example is not focused, and will not be run. }); fcontext(@"when the dolphin is near something interesting", ^{ // ...examples in this group are also focused, so they'll be run. }); ``` ## `beforeSuite` と `afterSuite` を使ってテスト全体に対する Setup/Teardown を行う テストの環境構築の中にはどの Example よりも先に、または最後に実行したいものがある場合もあります。 このような時は `beforeSuite` か `afterSuite` を使います。 下記の例では 全ての Example が実行される前に一度だけ海の全ての生物のデータベースが生成され、全ての Exmample が実行された後にデータベースを削除しています。 ```swift // Swift import Quick class DolphinSpec: QuickSpec { override func spec() { beforeSuite { OceanDatabase.createDatabase(name: "test.db") OceanDatabase.connectToDatabase(name: "test.db") } afterSuite { OceanDatabase.teardownDatabase(name: "test.db") } describe("a dolphin") { // ... } } } ``` ```objc // Objective-C @import Quick; QuickSpecBegin(DolphinSpec) beforeSuite(^{ [OceanDatabase createDatabase:@"test.db"]; [OceanDatabase connectToDatabase:@"test.db"]; }); afterSuite(^{ [OceanDatabase teardownDatabase:@"test.db"]; }); describe(@"a dolphin", ^{ // ... }); QuickSpecEnd ``` `beforeSuite` and `afterSuite` は必要な数だけ定義することができます。 全ての `beforeSuite` の closure は全てのテストが実行される前に実行され、 全ての `afterSuite` の closure は全てのテストが実行された後に実行されます。 複数の `beforeSuite`(`afterSuite`) の closure を記述した場合、これらの実行順序は記述した順序で実行されるかは保証されません。 ## 実行中の Example でメタデータにアクセスする 実行中の Example の中で、Example名を知りたいケース、これまでに何件の Example を実行したかを知りたいケースがあるかもしれません。 Quick ではこれらの情報に `beforeEach` と `afterEach` の closure の中からアクセスすることができます。 ```swift beforeEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) is about to be run.") } afterEach { exampleMetadata in println("Example number \(exampleMetadata.exampleIndex) has run.") } ``` ```objc beforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l is about to be run.", (long)exampleMetadata.exampleIndex); }); afterEachWithMetadata(^(ExampleMetadata *exampleMetadata){ NSLog(@"Example number %l has run.", (long)exampleMetadata.exampleIndex); }); ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/QuickInObjectiveC.md ================================================ # Objective-C で Quick を使う Quick は Swift でも Objective-C でも問題なく動作します。 ですが、Objective-C で Quick を使う場合、2点気を付けておきべきことがあります。 ## 簡略記法 Objective-C で Quick を import すると 'it' と `itShouldBehaveLike` というマクロが定義されます。 また、`context()` and `describe()`といった関数も同様に定義されます。 もしプロジェクトですでに同じ名前のシンボルを定義していた場合、重複のためビルドエラーになります。 その場合は下記のように`QUICK_DISABLE_SHORT_SYNTAX`を定義してこの機能を無効にしてください。 ```objc #define QUICK_DISABLE_SHORT_SYNTAX 1 @import Quick; QuickSpecBegin(DolphinSpec) // ... QuickSpecEnd ``` `QUICK_DISABLE_SHORT_SYNTAX`マクロは Quick ヘッダを import する前に定義する必要があります。 ## Swift のファイルを テストターゲットに含める テストターゲットの中に Swift のファイルが含まれていないと Swift stlib が リンクされないため Quick が正しく実行されません。 Swift のファイルが含まれていないと下記のようなエラーが発生します。 ``` *** Test session exited(82) without checking in. Executable cannot be loaded for some other reason, such as a problem with a library it depends on or a code signature/entitlements mismatch. ``` To fix the problem, add a blank file called `SwiftSpec.swift` to your test target: 修正するためには `SwiftSpec.swift` という名前の空のファイルをテストターゲットに追加してください。 ```swift // SwiftSpec.swift import Quick ``` > この問題に関する詳細情報はこちら https://github.com/Quick/Quick/issues/164. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/README.md ================================================ # テストの書き方、Quickの使い方 Quickでテストを書くと、SwiftとObjective-Cで書かれたプログラムがどう動作しているか楽に確認できます。 ところが、有用なテストはQuickを使わなくても書けます。 役に立つテストが書けるようになるには、Quickのようなフレームワークの使い方を覚える必要はありません。 このディレクトリにあるファイルは、QuickかXCTestかを問わず、 「役に立つ」テストとは何か、そしてどうやってそういったテストが書けるか、 それを拙文ながら説明しようとしています。 目次: (テストについて事前知識がまったくない方は、順に読んでいくことをオススメします。) - **[Xcodeでテストを用意しましょう](SettingUpYourXcodeProject.md)**: アプリのコードがテスト・ファイルから参照できない場合や、 その他スムーズにテストが動かない場合はこのファイルを読み返すといいかもしれません。 - **[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)**: 役に立つテストを書くための基本中の基本。これさえ覚えれば、 XCTestを使ってあなたも正確に動作するコードをすばやく書けるようになります。 - **[コードをテストするのではなく、動作の確認をしましょう](BehavioralTesting.md)**: 同じ「テスト」でも、開発を進めやすくするテストと、邪魔ばかりするテストとがあります。 見分ける方法は、このファイルを読めば分かります。 - **[Nimbleのassertでテストをより読みやすくしましょう](NimbleAssertions.md)**: Nimbleを使って、テストが失敗したときわかりやすいエラーメッセージを出すようにしましょう。 わかりやすいメッセージで、テストがなぜ失敗したのかが一瞬でわかって開発の速度があがります。 - **[QuickのExamplesとExample Groupsで、たくさんのテストでも整理整頓](QuickExamplesAndGroups.md)**: Quickを使う大きなメリットのひとつはexamplesとexample groupsです。 これでより簡潔にたくさんのテストが書けるようになります。 - **[OS XとiOSアプリのテスト](TestingApps.md)**: AppKitとUIKitを使ったコードをどうやってテストできるか説明します。 - **[assertの共有でボイラープレートコードをなくしましょう](SharedExamples.md)**: どうやってassertを共有できるか、なぜそうするのが望ましいのか説明します。 - **[Quickの挙動をカスタマイズしましょう](ConfiguringQuick.md)**: Quickがテストを実行するときの挙動をどうやって変えられるか説明します。 - **[Objective-CでQuickを使う方法・注意点](QuickInObjectiveC.md)**: QuickをObjective-Cで使ったときに思わぬ不具合・トラブルがあった場合、 これを読んでください。 - **[Quickのインストール方法](InstallingQuick.md)**: あなたのプロジェクトにQuickを導入する方法を説明します。Git submodules、 CocoaPods、Carthage、全部サポートしています! - **[Quickファイル・テンプレートのインストール方法](InstallingFileTemplates.md)**: Quickテストをすばやく作成するためのファイル・テンプレートをインストールする方法を説明します。 - **[その他の参考資料](MoreResources.md)** OS X・iOSのテストに関しての資料集を用意しています。 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/SettingUpYourXcodeProject.md ================================================ # テストの準備をする Xcode7 では Command Line Tool プロジェクトを除き、デフォルトで Unit test target が生成されます。 [参照:コマンドラインツールプロジェクトでテストの準備をする](#コマンドラインツールプロジェクトでテストの準備をする). テストを書くためには Unit test targetから Main target のコードが使用できる必要があります。 ## Swift のコードを Swift でテストする Swift で書かれたコードをテストするためには下記2つの作業を行います。 1. プロジェクトファイル `.xcodeproj` の "defines module" を `YES` に設定します。 * Xcode で対象のプロジェクトを開き、"Build Settings" の "Defines Modules" の 項目を "Yes" にします。 2. 各テストファイルで `@testable import YourAppModuleName` を追記します。 追記することで public, internal のシンボルにアクセスできるようになります。`private` シンボルはアクセスできないままです。 ```swift // MyAppTests.swift import XCTest @testable import MyModule class MyClassTests: XCTestCase { // ... } ``` > Swift のファイルを Test target に含める、という方法もありますが、不具合を引き起こす([subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91)) ことがあるためお勧めしません。 ## Objective-C のコードを Swift でテストする 1. Bridging header を test target に追加します。 2. Bridging header 内で テストしたいコードを import します。 ```objc // MyAppTests-BridgingHeader.h #import "MyClass.h" ``` これで `MyClass.h' のコードを Swift のテストコードから使用できるようになります。 ## Swift のコードを Objective-C でテストする 1. テストしたい Swift のクラスと関数に`@objc`属性を付加します。 2. テストコードで Module の Swift header を import します。 ```objc @import XCTest; #import "MyModule-Swift.h" @interface MyClassTests: XCTestCase // ... @end ``` ## Objective-C のコードを Objective-C でテストする テストコード内でテスト対象を import します。 ```objc // MyAppTests.m @import XCTest; #import "MyClass.h" @interface MyClassTests: XCTestCase // ... @end ``` ### コマンドラインツールプロジェクトでテストの準備をする 1. プロジェクトのペインからターゲットを追加(+ボタンを押下) 2. "OS X Unit Testing Bundle" または "iOS Unit Testing Bundle" を選択 3. Main target で "Edit the scheme" を選択 4. "Test" を選択, "Info" タブで "+" をクリックして追加した testing bundle を選択 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/SharedExamples.md ================================================ # assertの共有でボイラープレートコードをなくしましょう 複数のオブジェクトに対象して同じ内容のテストを行いたい場合があります。 例えば `Edible` という protocol があるとします。 イルカ(dolphin)が何か食べられる(`Edible`)なものを食べるとイルカが幸せになります。 サバ(Mackerel)とタラ(Cod)は食べられる(Edibleな)ものです。 Quick は「イルカがどちらかを食べて幸せになる」ということを簡単にテストすることできます。 下記で示すテストは "(何かを食べる)something edible" という共有できるテスト(Shared examples)を定義しています。 また、この共有できるテストでサバ(Mackerel)とタラ(Cod)を食べることについてのテストを記述しています。 ```swift // Swift import Quick import Nimble class EdibleSharedExamplesConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("something edible") { (sharedExampleContext: SharedExampleContext) in it("makes dolphins happy") { let dolphin = Dolphin(happy: false) let edible = sharedExampleContext()["edible"] dolphin.eat(edible) expect(dolphin.isHappy).to(beTruthy()) } } } } class MackerelSpec: QuickSpec { override func spec() { var mackerel: Mackerel! beforeEach { mackerel = Mackerel() } itBehavesLike("something edible") { ["edible": mackerel] } } } class CodSpec: QuickSpec { override func spec() { var cod: Cod! beforeEach { cod = Cod() } itBehavesLike("something edible") { ["edible": cod] } } } ``` ```objc // Objective-C @import Quick; @import Nimble; QuickConfigurationBegin(EdibleSharedExamplesConfiguration) + (void)configure:(Configuration *configuration) { sharedExamples(@"something edible", ^(QCKDSLSharedExampleContext exampleContext) { it(@"makes dolphins happy") { Dolphin *dolphin = [[Dolphin alloc] init]; dolphin.happy = NO; id edible = exampleContext()[@"edible"]; [dolphin eat:edible]; expect(dolphin.isHappy).to(beTruthy()) } }); } QuickConfigurationEnd QuickSpecBegin(MackerelSpec) __block Mackerel *mackerel = nil; beforeEach(^{ mackerel = [[Mackerel alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": mackerel }; }); QuickSpecEnd QuickSpecBegin(CodSpec) __block Mackerel *cod = nil; beforeEach(^{ cod = [[Cod alloc] init]; }); itBehavesLike(@"someting edible", ^{ return @{ @"edible": cod }; }); QuickSpecEnd ``` Shared examples は `it`, `context` や `describe` のブロックをいくつでも含めることができます。 これは異なる種類の対象についてテストをする際のコードを節約することができます。 あるケースでは context を追加する必要もありません。 Swift では `sharedExamples` closure を使って共有できるテストを定義することができます。 このテクニックはある時点での状態をテストしたい時などに役に立つかもしれません。 In some cases, you won't need any additional context. In Swift, you can simply use `sharedExamples` closures that take no parameters. This might be useful when testing some sort of global state: ```swift // Swift import Quick sharedExamples("everything under the sea") { // ... } itBehavesLike("everything under the sea") ``` > Objective-Cでは, `QCKDSLSharedExampleContext` を引数に取る block を渡すことができます。※QCKDSLSharedExampleContext を使う予定がなくても引数に取る block を用意してください。めんどくさくても。世の中そんなもんです。 :cookie: :bomb: 'itBehavesLike' の先頭に 'f' を加えて(`fitBehavesLike`) として共有できるテストのみ実行することもできます。 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ja/TestingApps.md ================================================ # Testing OS X and iOS Applications *[Xcodeでテストを用意しましょう](SettingUpYourXcodeProject.md)*では Objective-C や Swift の関数やクラスを テストするために必要なことを述べました。ここでは `UIViewController` のサブクラスなどをテストする際のポイントを述べます。 > 関連する LT がありますのでこちらも参考にしてください。 [here](https://vimeo.com/115671189#t=37m50s) (37'50" から始まる部分です)。 ## `UIViewController` のライフサイクルイベントを発火させる 通常は UIKit が view controller のライフサイクルイベントを発火しますが、 テストをする時は自分たちでライフサイクルイベントを発火させる必要があります。 呼び出すには3つの方法があります。 1. `UIViewController.view`にアクセスする、すると `UIViewController.viewDidLoad()` のイベントが発火します。 2. `UIViewController.beginAppearanceTransition()` を呼び出すとほとんどのライフサイクルイベントが発火します。。 3. `UIViewController.viewDidLoad()` や `UIViewController.viewWillAppear()` などのライフサイクルに関わる関数を直接呼び出す。 ```swift // Swift import Quick import Nimble import BananaApp class BananaViewControllerSpec: QuickSpec { override func spec() { var viewController: BananaViewController! beforeEach { viewController = BananaViewController() } describe(".viewDidLoad()") { beforeEach { // Method #1: Access the view to trigger BananaViewController.viewDidLoad(). let _ = viewController.view } it("sets the banana count label to zero") { // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal("0")) } } describe("the view") { beforeEach { // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. viewController.beginAppearanceTransition(true, animated: false) viewController.endAppearanceTransition() } // ... } describe(".viewWillDisappear()") { beforeEach { // Method #3: Directly call the lifecycle event. viewController.viewWillDisappear(false) } // ... } } } ``` ```objc // Objective-C @import Quick; @import Nimble; #import "BananaViewController.h" QuickSpecBegin(BananaViewControllerSpec) __block BananaViewController *viewController = nil; beforeEach(^{ viewController = [[BananaViewController alloc] init]; }); describe(@"-viewDidLoad", ^{ beforeEach(^{ // Method #1: Access the view to trigger -[BananaViewController viewDidLoad]. [viewController view]; }); it(@"sets the banana count label to zero", ^{ // Since the label is only initialized when the view is loaded, this // would fail if we didn't access the view in the `beforeEach` above. expect(viewController.bananaCountLabel.text).to(equal(@"0")) }); }); describe(@"the view", ^{ beforeEach(^{ // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. [viewController beginAppearanceTransition:YES animated:NO]; [viewController endAppearanceTransition]; }); // ... }); describe(@"-viewWillDisappear", ^{ beforeEach(^{ // Method #3: Directly call the lifecycle event. [viewController viewWillDisappear:NO]; }); // ... }); QuickSpecEnd ``` ## Storyboard 内に定義した View Controller を初期化する Storyboard 内に定義した View Controller を初期化する際は **Storyboard ID** を定義しておく必要があります。 ![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png) **Storyboard ID** を定義しておくとテストコードから ViewController を初期化することができます。 ```swift // Swift var viewController: BananaViewController! beforeEach { // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. let storyboard = UIStoryboard(name: "Main", bundle: nil) // 2. Use the storyboard to instantiate the view controller. viewController = storyboard.instantiateViewControllerWithIdentifier( "BananaViewControllerID") as! BananaViewController } ``` ```objc // Objective-C __block BananaViewController *viewController = nil; beforeEach(^{ // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". // You'll need to use a different string here if the name of your storyboard is different. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // 2. Use the storyboard to instantiate the view controller. viewController = [storyboard instantiateViewControllerWithIdentifier:@"BananaViewControllerID"]; }); ``` ## ボタンをタップされた、などの UIControl Events を発火させる ボタンや他の UIControl を継承したクラスは UIControl イベントを発火させる関数を持っています。 ボタンをタップされた時の動作をテストするにはこのように書くことができます: ```swift // Swift describe("the 'more bananas' button") { it("increments the banana count label when tapped") { viewController.moreButton.sendActionsForControlEvents( UIControlEvents.TouchUpInside) expect(viewController.bananaCountLabel.text).to(equal("1")) } } ``` ```objc // Objective-C describe(@"the 'more bananas' button", ^{ it(@"increments the banana count label when tapped", ^{ [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside]; expect(viewController.bananaCountLabel.text).to(equal(@"1")); }); }); ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/zh-cn/SettingUpYourXcodeProject.md ================================================ # 在项目中添加测试 除了命令行项目以外, 当你在Xcode 7中创建新项目时, 单元测试Target默认是包含的. [为命令行项目设置测试Target](#setting-up-a-test-target-for-a-command-line-tool-project). 要编写单元测试, 你需要能够在测试Target中使用主target代码. ## 用Swift测试Swift项目代码 为了测试用Swift写的代码, 你需要做以下两件事: 1. 将`.xcodeproj`中的 "defines module" 设置为 `YES`. * Xcode中具体操作方法: 选中你的项目, 选择 "Build Settings" 选项列表, 选中 "Defines Modules" 行, 修改其值为 "Yes". 2. 在单元测试中添加 `@testable import YourAppModuleName`. 这会把所有 `public` 和 `internal` (默认访问修饰符) 修饰符暴露给测试代码. 但`private` 修饰符仍旧保持私有. ```swift // MyAppTests.swift import XCTest @testable import MyModule class MyClassTests: XCTestCase { // ... } ``` > 一些开发者提倡添加Swift源文件至测试target. 然而这会导致以下问题 [subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91), 所以并不推荐. ## 使用Swift测试Objective-C项目代码 1. 给你的测试target添加bridging header文件. 2. 在bridging header文件中, 引入待测试的代码文件. ```objc // MyAppTests-BridgingHeader.h #import "MyClass.h" ``` 现在就可以在Swift测试文件中使用 `MyClass.h` 中的代码了 ## 使用Objective-C测试Swift项目代码 1. 使用 `@objc` 桥接需要使用Objective-C测试的Swift类和方法. 2. 在单元测试中引入模块的Swift头文件. ```objc @import XCTest; #import "MyModule-Swift.h" @interface MyClassTests: XCTestCase // ... @end ``` ## 使用Objective-C测试Objective-C项目代码 在测试target中引入待测试的代码文件: ```objc // MyAppTests.m @import XCTest; #import "MyClass.h" @interface MyClassTests: XCTestCase // ... @end ``` ### 为命令行项目设置测试Target 1. 在项目窗格中添加一个项目target. 2. 选择 "OS X Unit Testing Bundle". 3. 编辑主target的 scheme. 4. 选中 "Test" 条目, 单击 "Info" 下的 "+", 选择需要测试的 bundle. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/.gitignore ================================================ .DS_Store xcuserdata/ build/ .idea DerivedData/ Nimble.framework.zip # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ .build/ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/.ruby-version ================================================ system ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-02-25-a ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/.travis.yml ================================================ osx_image: xcode7.3 language: generic matrix: include: - os: osx sudo: required env: TYPE=podspec - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=9.0 TYPE=tvos - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx - os: osx env: TYPE=swiftpm - os: osx env: NIMBLE_RUNTIME_IOS_SDK_VERSION=10.0 TYPE=ios osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=10.0 TYPE=tvos osx_image: xcode8 - os: osx env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.12 TYPE=osx osx_image: xcode8 - os: linux dist: trusty sudo: required env: TYPE=swiftpm install: - if [[ "$TYPE" == "swiftpm" ]]; then eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)"; fi - if [[ "$TYPE" == "podspec" ]]; then sudo gem install bundler; bundle install; fi script: - ./test $TYPE ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/CONTRIBUTING.md ================================================ - [Welcome to Nimble!](#welcome-to-nimble!) - [Reporting Bugs](#reporting-bugs) - [Building the Project](#building-the-project) - [Pull Requests](#pull-requests) - [Style Conventions](#style-conventions) - [Core Members](#core-members) - [Code of Conduct](#code-of-conduct) # Welcome to Nimble! We're building a testing framework for a new generation of Swift and Objective-C developers. Nimble should be easy to use and easy to maintain. Let's keep things simple and well-tested. **tl;dr:** If you've added a file to the project, make sure it's included in both the OS X and iOS targets. ## Reporting Bugs Nothing is off-limits. If you're having a problem, we want to hear about it. - See a crash? File an issue. - Code isn't compiling, but you don't know why? Sounds like you should submit a new issue, bud. - Went to the kitchen, only to forget why you went in the first place? Better submit an issue. Be sure to include in your issue: - Your Xcode version (eg - Xcode 7.0.1 7A1001) - Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`) - What are the steps to reproduce this issue? - What platform are you using? (eg - OS X, iOS, watchOS, tvOS) - If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration - Are you using carthage or cocoapods? ## Building the Project - Use `Nimble.xcodeproj` to work on Nimble. ## Pull Requests - Nothing is trivial. Submit pull requests for anything: typos, whitespace, you name it. - Not all pull requests will be merged, but all will be acknowledged. If no one has provided feedback on your request, ping one of the owners by name. - Make sure your pull request includes any necessary updates to the README or other documentation. - Be sure the unit tests for both the OS X and iOS targets of Nimble before submitting your pull request. You can run all the OS X & iOS unit tests using `./test`. - If you've added a file to the project, make sure it's included in both the OS X and iOS targets. - The `master` branch will always support the stable Xcode version. Other branches will point to their corresponding versions they support. - If you're making a configuration change, make sure to edit both the xcode project and the podspec file. ### Style Conventions - Indent using 4 spaces. - Keep lines 100 characters or shorter. Break long statements into shorter ones over multiple lines. - In Objective-C, use `#pragma mark -` to mark public, internal, protocol, and superclass methods. ## Core Members If a few of your pull requests have been merged, and you'd like a controlling stake in the project, file an issue asking for write access to the repository. ### Code of Conduct Your conduct as a core member is your own responsibility, but here are some "ground rules": - Feel free to push whatever you want to master, and (if you have ownership permissions) to create any repositories you'd like. Ideally, however, all changes should be submitted as GitHub pull requests. No one should merge their own pull request, unless no other core members respond for at least a few days. If you'd like to create a new repository, it'd be nice if you created a GitHub issue and gathered some feedback first. - It'd be awesome if you could review, provide feedback on, and close issues or pull requests submitted to the project. Please provide kind, constructive feedback. Please don't be sarcastic or snarky. ### Creating a Release The process is relatively straight forward, but here's is a useful checklist for tagging: - Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` - Run the release script: `./script/release A.B.C release-notes-file` - The script will prompt you to create a new [GitHub release](https://github.com/Quick/Nimble/releases). - Use the same release notes you created for the tag, but tweak up formatting for GitHub. - Update [Quick](https://github.com/Quick/Quick) - Update Quick's submodule reference to the newly released Nimble version - Update Nimble version in `README.md` and Documentation in [Quick](https://github.com/Quick/Quick) if it's not a patch version update. - Announce! ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile ================================================ # A sample Gemfile source "https://rubygems.org" gem 'cocoapods' ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/LICENSE.md ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2014 Quick Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.podspec ================================================ Pod::Spec.new do |s| s.name = "Nimble" s.version = "4.1.0" s.summary = "A Matcher Framework for Swift and Objective-C" s.description = <<-DESC Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar. DESC s.homepage = "https://github.com/Quick/Nimble" s.license = { :type => "Apache 2.0", :file => "LICENSE.md" } s.author = "Quick Contributors" s.ios.deployment_target = "7.0" s.osx.deployment_target = "10.9" s.tvos.deployment_target = "9.0" s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } s.source_files = "Sources/Nimble/**/*.{swift,h,m}" s.private_header_files = "Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h" s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" s.weak_framework = "XCTest" s.requires_arc = true s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"' } end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; }; 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; }; 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; }; 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; 1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531; remoteInfo = "Nimble-tvOS"; }; 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = "Nimble-iOS"; }; 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F1A74281940169200FFFC47; remoteInfo = Nimble; }; 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1F1A74201940169200FFFC47 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-OSX"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = ""; }; 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = ""; }; 1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = ""; }; 1F1871BC1CA89EDB00A34BF2 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = ""; }; 1F1871BD1CA89EDB00A34BF2 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = ""; }; 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = ""; }; 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = ""; }; 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBStringify.h; sourceTree = ""; }; 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBStringify.m; sourceTree = ""; }; 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBExpectation.swift; sourceTree = ""; }; 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBObjCMatcher.swift; sourceTree = ""; }; 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExceptionCapture.swift; sourceTree = ""; }; 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = ""; }; 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = ""; }; 1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = ""; }; 1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = ""; }; 1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.markdown; }; 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = ""; }; 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = ""; }; 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = ""; }; 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = ""; }; 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = ""; }; 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = ""; }; 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = ""; }; 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = ""; }; 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = ""; }; 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = ""; }; 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = ""; }; 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = ""; }; 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = ""; }; 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = ""; }; 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = ""; }; 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = ""; }; 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = ""; }; 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = ""; }; 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = ""; }; 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = ""; }; 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = ""; }; 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = ""; }; 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = ""; }; 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoidTest.swift; sourceTree = ""; }; 1F91DD301C74BF61002C309F /* BeVoid.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoid.swift; sourceTree = ""; }; 1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = ""; }; 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = ""; }; 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = ""; }; 1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = ""; }; 1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = ""; }; 1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = ""; }; 1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = ""; }; 1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = ""; }; 1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = ""; }; 1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = ""; }; 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = ""; }; 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = ""; }; 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = ""; }; 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = ""; }; 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = ""; }; 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = ""; }; 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = ""; }; 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotificationTest.swift; sourceTree = ""; }; 1FCF91521C61C8A400B15DCB /* PostNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotification.swift; sourceTree = ""; }; 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = ""; }; 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = ""; }; 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = ""; }; 1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; 1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = ""; }; 1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = ""; }; 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = ""; }; 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = ""; }; 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = ""; }; 1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = ""; }; 1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = ""; }; 1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = ""; }; 1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = ""; }; 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = ""; }; 1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; 1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; 1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = ""; }; 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = ""; }; 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = ""; }; 29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = ""; }; 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; 472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = ""; }; 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = ""; }; 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = ""; }; 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = ""; }; 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = ""; }; 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjcStringersTest.m; sourceTree = ""; }; 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = ""; }; 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = ""; }; AE4BA9AC1C88DDB500B73906 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; AE7ADE441C80BF8000B94CD3 /* MatchError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchError.swift; sourceTree = ""; }; AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchErrorTest.swift; sourceTree = ""; }; DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; DDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = ""; }; DDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = ""; }; DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = ""; }; F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+Register.m"; sourceTree = ""; }; F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CurrentTestCaseTracker.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 1F1A74251940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74311940169200FFFC47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1511BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA9195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB4195C0D6300ED456B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1F14FB61194180A7009F2A08 /* Helpers */ = { isa = PBXGroup; children = ( 1F14FB63194180C5009F2A08 /* utils.swift */, 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */, 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */, ); path = Helpers; sourceTree = ""; }; 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */ = { isa = PBXGroup; children = ( F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */, 1F1871BC1CA89EDB00A34BF2 /* DSL.h */, 1F1871BD1CA89EDB00A34BF2 /* DSL.m */, 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */, 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */, 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */, 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */, 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */, 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */, F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */, ); path = ObjectiveC; sourceTree = ""; }; 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */ = { isa = PBXGroup; children = ( 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */, ); path = NonObjectiveC; sourceTree = ""; }; 1F1A741F1940169200FFFC47 = { isa = PBXGroup; children = ( 1F2752D119445B8400052A26 /* README.md */, 1F1A742B1940169200FFFC47 /* Nimble */, 1F1A74381940169200FFFC47 /* NimbleTests */, 1F1A742A1940169200FFFC47 /* Products */, ); sourceTree = ""; }; 1F1A742A1940169200FFFC47 /* Products */ = { isa = PBXGroup; children = ( 1F1A74291940169200FFFC47 /* Nimble.framework */, 1F1A74341940169200FFFC47 /* NimbleTests.xctest */, 1F925EAD195C0D6300ED456B /* Nimble.framework */, 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, ); name = Products; sourceTree = ""; }; 1F1A742B1940169200FFFC47 /* Nimble */ = { isa = PBXGroup; children = ( 1FD8CD041968AB07008ED995 /* Adapters */, 1FD8CD081968AB07008ED995 /* DSL.swift */, DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */, 1FD8CD091968AB07008ED995 /* Expectation.swift */, 1FD8CD0A1968AB07008ED995 /* Expression.swift */, 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */, 1F1A742D1940169200FFFC47 /* Info.plist */, 1FD8CD0C1968AB07008ED995 /* Matchers */, 1F1A742E1940169200FFFC47 /* Nimble.h */, 1FD8CD241968AB07008ED995 /* Utils */, ); name = Nimble; path = Sources/Nimble; sourceTree = ""; }; 1F1A74381940169200FFFC47 /* NimbleTests */ = { isa = PBXGroup; children = ( 1F925EE5195C121200ED456B /* AsynchronousTest.swift */, 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */, 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */, 1FFD729A1963FC8200CD29A2 /* objc */, 1F14FB61194180A7009F2A08 /* Helpers */, 1F925EE3195C11B000ED456B /* Matchers */, 1F1A74391940169200FFFC47 /* Supporting Files */, ); name = NimbleTests; path = Tests/Nimble; sourceTree = ""; }; 1F1A74391940169200FFFC47 /* Supporting Files */ = { isa = PBXGroup; children = ( 1F1A743A1940169200FFFC47 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 1F925EE3195C11B000ED456B /* Matchers */ = { isa = PBXGroup; children = ( DD72EC631A93874A002F7651 /* AllPassTest.swift */, 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */, 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */, 1F925EF5195C147800ED456B /* BeCloseToTest.swift */, 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */, 1F925EFB195C186800ED456B /* BeginWithTest.swift */, 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */, 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */, DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */, 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */, 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */, 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */, 1F925EEE195C136500ED456B /* BeLogicalTest.swift */, 1F925EF8195C175000ED456B /* BeNilTest.swift */, 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */, 1F925F01195C189500ED456B /* ContainTest.swift */, 1F925EFE195C187600ED456B /* EndWithTest.swift */, 1F925F04195C18B700ED456B /* EqualTest.swift */, 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */, DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */, 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */, 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */, 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */, 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */, AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD041968AB07008ED995 /* Adapters */ = { isa = PBXGroup; children = ( 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */, 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */, 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */, 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */, 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */, 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */, 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */, ); path = Adapters; sourceTree = ""; }; 1FD8CD0C1968AB07008ED995 /* Matchers */ = { isa = PBXGroup; children = ( DDB1BC781A92235600F743C3 /* AllPass.swift */, 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */, 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */, 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */, 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */, 1FD8CD101968AB07008ED995 /* BeEmpty.swift */, 1FD8CD111968AB07008ED995 /* BeginWith.swift */, 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */, 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */, 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */, 1FD8CD151968AB07008ED995 /* BeLessThan.swift */, 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */, 1FD8CD171968AB07008ED995 /* BeLogical.swift */, 1FD8CD181968AB07008ED995 /* BeNil.swift */, 1F91DD301C74BF61002C309F /* BeVoid.swift */, 1FD8CD1A1968AB07008ED995 /* Contain.swift */, 1FD8CD1B1968AB07008ED995 /* EndWith.swift */, 1FD8CD1C1968AB07008ED995 /* Equal.swift */, 472FD1341B9E085700C7B8DA /* HaveCount.swift */, DDB4D5EC19FE43C200E9D9FE /* Match.swift */, 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */, 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */, AE7ADE441C80BF8000B94CD3 /* MatchError.swift */, 1FCF91521C61C8A400B15DCB /* PostNotification.swift */, 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */, 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */, 29EA59651B551EE6002D767E /* ThrowError.swift */, ); path = Matchers; sourceTree = ""; }; 1FD8CD241968AB07008ED995 /* Utils */ = { isa = PBXGroup; children = ( 1FD8CD251968AB07008ED995 /* Functional.swift */, 1FD8CD261968AB07008ED995 /* Async.swift */, 1FD8CD271968AB07008ED995 /* SourceLocation.swift */, 1FD8CD281968AB07008ED995 /* Stringers.swift */, AE4BA9AC1C88DDB500B73906 /* Errors.swift */, ); path = Utils; sourceTree = ""; }; 1FFD729A1963FC8200CD29A2 /* objc */ = { isa = PBXGroup; children = ( 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */, 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */, 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */, 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */, 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */, 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */, 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */, 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */, 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */, 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */, 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */, 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */, 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */, 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */, 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */, 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */, 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */, 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */, 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */, 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */, 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */, 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */, 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */, 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */, 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */, DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */, 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */, 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */, ); path = objc; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 1F1A74261940169200FFFC47 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */, 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */, 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */, 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1521BDCA0CE00C3A531 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */, 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */, 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */, 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAA195C0D6300ED456B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */, 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */, 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */, 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 1F1A74281940169200FFFC47 /* Nimble-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */; buildPhases = ( 1F1A74241940169200FFFC47 /* Sources */, 1F1A74251940169200FFFC47 /* Frameworks */, 1F1A74261940169200FFFC47 /* Headers */, 1F1A74271940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-iOS"; productName = "Nimble-iOS"; productReference = 1F1A74291940169200FFFC47 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */; buildPhases = ( 1F1A74301940169200FFFC47 /* Sources */, 1F1A74311940169200FFFC47 /* Frameworks */, 1F1A74321940169200FFFC47 /* Resources */, ); buildRules = ( ); dependencies = ( 1F1A74371940169200FFFC47 /* PBXTargetDependency */, 1F925EA5195C0C8500ED456B /* PBXTargetDependency */, 1F925EA7195C0C8500ED456B /* PBXTargetDependency */, 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */, ); name = "Nimble-iOSTests"; productName = "Nimble-iOSTests"; productReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */; buildPhases = ( 1F5DF1501BDCA0CE00C3A531 /* Sources */, 1F5DF1511BDCA0CE00C3A531 /* Frameworks */, 1F5DF1521BDCA0CE00C3A531 /* Headers */, 1F5DF1531BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-tvOS"; productName = "Nimble-tvOS"; productReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */; buildPhases = ( 1F5DF15A1BDCA0CE00C3A531 /* Sources */, 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */, 1F5DF15C1BDCA0CE00C3A531 /* Resources */, ); buildRules = ( ); dependencies = ( 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */, ); name = "Nimble-tvOSTests"; productName = "Nimble-tvOSTests"; productReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F925EAC195C0D6300ED456B /* Nimble-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */; buildPhases = ( 1F925EA8195C0D6300ED456B /* Sources */, 1F925EA9195C0D6300ED456B /* Frameworks */, 1F925EAA195C0D6300ED456B /* Headers */, 1F925EAB195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Nimble-OSX"; productName = "Nimble-OSX"; productReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */; buildPhases = ( 1F925EB3195C0D6300ED456B /* Sources */, 1F925EB4195C0D6300ED456B /* Frameworks */, 1F925EB5195C0D6300ED456B /* Resources */, ); buildRules = ( ); dependencies = ( 1F925EBA195C0D6300ED456B /* PBXTargetDependency */, 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */, 1F9B7C001968AD760094EB8F /* PBXTargetDependency */, 1F9B7C021968AD820094EB8F /* PBXTargetDependency */, ); name = "Nimble-OSXTests"; productName = "Nimble-OSXTests"; productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 1F1A74201940169200FFFC47 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0710; ORGANIZATIONNAME = "Jeff Hui"; TargetAttributes = { 1F1A74281940169200FFFC47 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 1F1A74331940169200FFFC47 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 1F1A74281940169200FFFC47; }; 1F5DF1541BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F5DF15D1BDCA0CE00C3A531 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F925EAC195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 1F925EB6195C0D6300ED456B = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 1F925EAC195C0D6300ED456B; }; }; }; buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 1F1A741F1940169200FFFC47; productRefGroup = 1F1A742A1940169200FFFC47 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 1F1A74281940169200FFFC47 /* Nimble-iOS */, 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, 1F925EAC195C0D6300ED456B /* Nimble-OSX */, 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */, 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 1F1A74271940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74321940169200FFFC47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1531BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15C1BDCA0CE00C3A531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EAB195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB5195C0D6300ED456B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 1F1A74241940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */, 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */, AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */, DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */, 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */, 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */, 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */, 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */, AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */, 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */, 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F1A74301940169200FFFC47 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */, 1F14FB64194180C5009F2A08 /* utils.swift in Sources */, DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F02195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF1501BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */, 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */, 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */, 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */, 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */, 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */, 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */, 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */, 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */, 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */, AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */, 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */, 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */, 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */, 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */, 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */, 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */, 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */, 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */, 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */, 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */, 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */, 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */, 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */, AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */, 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */, 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */, 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */, 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */, 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */, 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */, 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */, 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */, 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */, 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */, 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */, 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */, 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */, 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */, 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F5DF15A1BDCA0CE00C3A531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */, CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */, 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */, 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */, CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */, CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */, CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */, 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */, 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */, 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */, 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */, 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */, CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */, 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */, AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */, 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */, 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */, CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */, CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */, CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */, 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */, 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */, 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */, 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */, CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */, 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */, 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */, 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */, 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */, 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */, CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */, 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */, CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */, 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */, CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */, 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */, CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */, CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */, 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */, 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */, 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */, CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */, 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */, CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */, 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */, CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */, 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */, CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */, CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */, CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */, CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */, CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EA8195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */, 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */, 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */, 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */, 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */, AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */, 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */, DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */, 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */, 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */, 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */, 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */, DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */, 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */, 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */, 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */, 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */, F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */, 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */, AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */, 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */, 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */, 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */, 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */, 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */, 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */, 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */, 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */, 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */, 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */, 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */, 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */, 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */, 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F925EB3195C0D6300ED456B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */, 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */, 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */, DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */, 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, 1F925F03195C189500ED456B /* ContainTest.swift in Sources */, 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */, 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */, 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */, 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */, 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */, 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */, 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */, 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */, 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */, 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */, 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */, 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */, 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */, 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */, 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 1F1A74371940169200FFFC47 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */; }; 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */; targetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */; }; 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */; }; 1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; targetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */; }; 1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */; }; 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */; }; 1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1F1A743D1940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; 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_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_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 1F1A743E1940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_MODULES_AUTOLINK = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = 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 = 7.0; METAL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 1F1A74401940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74411940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SKIP_INSTALL = YES; }; name = Release; }; 1F1A74431940169200FFFC47 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F1A74441940169200FFFC47 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; }; name = Release; }; 1F5DF1661BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1671BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { 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 = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F5DF1681BDCA0CE00C3A531 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F5DF1691BDCA0CE00C3A531 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; 1F925EC1195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; 1F925EC2195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(DEVELOPER_FRAMEWORKS_DIR)", ); FRAMEWORK_VERSION = A; GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = Sources/Nimble/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-weak_framework", XCTest, "-weak-lswiftXCTest", ); PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Nimble; PRODUCT_NAME = Nimble; SDKROOT = macosx; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; 1F925EC4195C0D6300ED456B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 1F925EC5195C0D6300ED456B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Nimble/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = NimbleTests; SDKROOT = macosx; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A743D1940169200FFFC47 /* Debug */, 1F1A743E1940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74401940169200FFFC47 /* Debug */, 1F1A74411940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F1A74431940169200FFFC47 /* Debug */, 1F1A74441940169200FFFC47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1661BDCA0CE00C3A531 /* Debug */, 1F5DF1671BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F5DF1681BDCA0CE00C3A531 /* Debug */, 1F5DF1691BDCA0CE00C3A531 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC1195C0D6300ED456B /* Debug */, 1F925EC2195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F925EC4195C0D6300ED456B /* Debug */, 1F925EC5195C0D6300ED456B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 1F1A74201940169200FFFC47 /* Project object */; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Package.swift ================================================ import PackageDescription let package = Package( name: "Nimble" ) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/README.md ================================================ # Nimble Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by [Cedar](https://github.com/pivotal/cedar). ```swift // Swift expect(1 + 1).to(equal(2)) expect(1.2).to(beCloseTo(1.1, within: 0.1)) expect(3) > 2 expect("seahorse").to(contain("sea")) expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` # How to Use Nimble **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest) - [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto) - [Custom Failure Messages](#custom-failure-messages) - [Type Checking](#type-checking) - [Operator Overloads](#operator-overloads) - [Lazily Computed Values](#lazily-computed-values) - [C Primitives](#c-primitives) - [Asynchronous Expectations](#asynchronous-expectations) - [Objective-C Support](#objective-c-support) - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) - [Built-in Matcher Functions](#built-in-matcher-functions) - [Equivalence](#equivalence) - [Identity](#identity) - [Comparisons](#comparisons) - [Types/Classes](#typesclasses) - [Truthiness](#truthiness) - [Swift Error Handling](#swift-error-handling) - [Exceptions](#exceptions) - [Collection Membership](#collection-membership) - [Strings](#strings) - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition) - [Verify collection count](#verify-collection-count) - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) - [Writing Your Own Matchers](#writing-your-own-matchers) - [Lazy Evaluation](#lazy-evaluation) - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - [Customizing Failure Messages](#customizing-failure-messages) - [Supporting Objective-C](#supporting-objective-c) - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers) - [Installing Nimble](#installing-nimble) - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) - [Using Nimble without XCTest](#using-nimble-without-xctest) # Some Background: Expressing Outcomes Using Assertions in XCTest Apple's Xcode includes the XCTest framework, which provides assertion macros to test whether code behaves properly. For example, to assert that `1 + 1 = 2`, XCTest has you write: ```swift // Swift XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two") ``` Or, in Objective-C: ```objc // Objective-C XCTAssertEqual(1 + 1, 2, @"expected one plus one to equal two"); ``` XCTest assertions have a couple of drawbacks: 1. **Not enough macros.** There's no easy way to assert that a string contains a particular substring, or that a number is less than or equal to another. 2. **It's hard to write asynchronous tests.** XCTest forces you to write a lot of boilerplate code. Nimble addresses these concerns. # Nimble: Expectations Using `expect(...).to` Nimble allows you to express expectations using a natural, easily understood language: ```swift // Swift import Nimble expect(seagull.squawk).to(equal("Squee!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).to(equal(@"Squee!")); ``` > The `expect` function autocompletes to include `file:` and `line:`, but these parameters are optional. Use the default values to have Xcode highlight the correct line when an expectation is not met. To perform the opposite expectation--to assert something is *not* equal--use `toNot` or `notTo`: ```swift // Swift import Nimble expect(seagull.squawk).toNot(equal("Oh, hello there!")) expect(seagull.squawk).notTo(equal("Oh, hello there!")) ``` ```objc // Objective-C @import Nimble; expect(seagull.squawk).toNot(equal(@"Oh, hello there!")); expect(seagull.squawk).notTo(equal(@"Oh, hello there!")); ``` ## Custom Failure Messages Would you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text: ```swift // Swift expect(1 + 1).to(equal(3)) // failed - expected to equal <3>, got <2> expect(1 + 1).to(equal(3), description: "Make sure libKindergartenMath is loaded") // failed - Make sure libKindergartenMath is loaded // expected to equal <3>, got <2> ``` Or the *WithDescription version in Objective-C: ```objc // Objective-C @import Nimble; expect(@(1+1)).to(equal(@3)); // failed - expected to equal <3.0000>, got <2.0000> expect(@(1+1)).toWithDescription(equal(@3), @"Make sure libKindergartenMath is loaded"); // failed - Make sure libKindergartenMath is loaded // expected to equal <3.0000>, got <2.0000> ``` ## Type Checking Nimble makes sure you don't compare two types that don't match: ```swift // Swift // Does not compile: expect(1 + 1).to(equal("Squee!")) ``` > Nimble uses generics--only available in Swift--to ensure type correctness. That means type checking is not available when using Nimble in Objective-C. :sob: ## Operator Overloads Tired of so much typing? With Nimble, you can use overloaded operators like `==` for equivalence, or `>` for comparisons: ```swift // Swift // Passes if squawk does not equal "Hi!": expect(seagull.squawk) != "Hi!" // Passes if 10 is greater than 2: expect(10) > 2 ``` > Operator overloads are only available in Swift, so you won't be able to use this syntax in Objective-C. :broken_heart: ## Lazily Computed Values The `expect` function doesn't evaluate the value it's given until it's time to match. So Nimble can test whether an expression raises an exception once evaluated: ```swift // Swift // Note: Swift currently doesn't have exceptions. // Only Objective-C code can raise exceptions // that Nimble will catch. // (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) let exception = NSException( name: NSInternalInconsistencyException, reason: "Not enough fish in the sea.", userInfo: ["something": "is fishy"]) expect { exception.raise() }.to(raiseException()) // Also, you can customize raiseException to be more specific expect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException)) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea")) expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea", userInfo: ["something": "is fishy"])) ``` Objective-C works the same way, but you must use the `expectAction` macro when making an expectation on an expression that has no return value: ```objc // Objective-C NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Not enough fish in the sea." userInfo:nil]; expectAction(^{ [exception raise]; }).to(raiseException()); // Use the property-block syntax to be more specific. expectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInternalInconsistencyException). reason("Not enough fish in the sea"). userInfo(@{@"something": @"is fishy"})); // You can also pass a block for custom matching of the raised exception expectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(NSInternalInconsistencyException)); })); ``` ## C Primitives Some testing frameworks make it hard to test primitive C values. In Nimble, it just works: ```swift // Swift let actual: CInt = 1 let expectedValue: CInt = 1 expect(actual).to(equal(expectedValue)) ``` In fact, Nimble uses type inference, so you can write the above without explicitly specifying both types: ```swift // Swift expect(1 as CInt).to(equal(1)) ``` > In Objective-C, Nimble only supports Objective-C objects. To make expectations on primitive C values, wrap then in an object literal: ```objc expect(@(1 + 1)).to(equal(@2)); ``` ## Asynchronous Expectations In Nimble, it's easy to make expectations on values that are updated asynchronously. Just use `toEventually` or `toEventuallyNot`: ```swift // Swift dispatch_async(dispatch_get_main_queue()) { ocean.add("dolphins") ocean.add("whales") } expect(ocean).toEventually(contain("dolphins", "whales")) ``` ```objc // Objective-C dispatch_async(dispatch_get_main_queue(), ^{ [ocean add:@"dolphins"]; [ocean add:@"whales"]; }); expect(ocean).toEventually(contain(@"dolphins", @"whales")); ``` Note: toEventually triggers its polls on the main thread. Blocking the main thread will cause Nimble to stop the run loop. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In the above example, `ocean` is constantly re-evaluated. If it ever contains dolphins and whales, the expectation passes. If `ocean` still doesn't contain them, even after being continuously re-evaluated for one whole second, the expectation fails. Sometimes it takes more than a second for a value to update. In those cases, use the `timeout` parameter: ```swift // Swift // Waits three seconds for ocean to contain "starfish": expect(ocean).toEventually(contain("starfish"), timeout: 3) ``` ```objc // Objective-C // Waits three seconds for ocean to contain "starfish": expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); ``` You can also provide a callback by using the `waitUntil` function: ```swift // Swift waitUntil { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(0.5) done() } ``` ```objc // Objective-C waitUntil(^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:0.5]; done(); }); ``` `waitUntil` also optionally takes a timeout parameter: ```swift // Swift waitUntil(timeout: 10) { done in // do some stuff that takes a while... NSThread.sleepForTimeInterval(1) done() } ``` ```objc // Objective-C waitUntilTimeout(10, ^(void (^done)(void)){ // do some stuff that takes a while... [NSThread sleepForTimeInterval:1]; done(); }); ``` Note: waitUntil triggers its timeout code on the main thread. Blocking the main thread will cause Nimble to stop the run loop to continue. This can cause test pollution for whatever incomplete code that was running on the main thread. Blocking the main thread can be caused by blocking IO, calls to sleep(), deadlocks, and synchronous IPC. In some cases (e.g. when running on slower machines) it can be useful to modify the default timeout and poll interval values. This can be done as follows: ```swift // Swift // Increase the global timeout to 5 seconds: Nimble.AsyncDefaults.Timeout = 5 // Slow the polling interval to 0.1 seconds: Nimble.AsyncDefaults.PollInterval = 0.1 ``` ## Objective-C Support Nimble has full support for Objective-C. However, there are two things to keep in mind when using Nimble in Objective-C: 1. All parameters passed to the `expect` function, as well as matcher functions like `equal`, must be Objective-C objects: ```objc // Objective-C @import Nimble; expect(@(1 + 1)).to(equal(@2)); expect(@"Hello world").to(contain(@"world")); ``` 2. To make an expectation on an expression that does not return a value, such as `-[NSException raise]`, use `expectAction` instead of `expect`: ```objc // Objective-C expectAction(^{ [exception raise]; }).to(raiseException()); ``` ## Disabling Objective-C Shorthand Nimble provides a shorthand for expressing expectations using the `expect` function. To disable this shorthand in Objective-C, define the `NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before importing Nimble: ```objc #define NIMBLE_DISABLE_SHORT_SYNTAX 1 @import Nimble; NMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@"Squee!")); ``` > Disabling the shorthand is useful if you're testing functions with names that conflict with Nimble functions, such as `expect` or `equal`. If that's not the case, there's no point in disabling the shorthand. # Built-in Matcher Functions Nimble includes a wide variety of matcher functions. ## Equivalence ```swift // Swift // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) expect(actual) == expected // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) expect(actual) != expected ``` ```objc // Objective-C // Passes if actual is equivalent to expected: expect(actual).to(equal(expected)) // Passes if actual is not equivalent to expected: expect(actual).toNot(equal(expected)) ``` Values must be `Equatable`, `Comparable`, or subclasses of `NSObject`. `equal` will always fail when used to compare one or more `nil` values. ## Identity ```swift // Swift // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)) expect(actual) === expected // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)) expect(actual) !== expected ``` Its important to remember that `beIdenticalTo` only makes sense when comparing types with reference semantics, which have a notion of identity. In Swift, that means a `class`. This matcher will not work with types with value semantics such as `struct` or `enum`. If you need to compare two value types, you can either compare individual properties or if it makes sense to do so, make your type implement `Equatable` and use Nimble's equivalence matchers instead. ```objc // Objective-C // Passes if actual has the same pointer address as expected: expect(actual).to(beIdenticalTo(expected)); // Passes if actual does not have the same pointer address as expected: expect(actual).toNot(beIdenticalTo(expected)); ``` ## Comparisons ```swift // Swift expect(actual).to(beLessThan(expected)) expect(actual) < expected expect(actual).to(beLessThanOrEqualTo(expected)) expect(actual) <= expected expect(actual).to(beGreaterThan(expected)) expect(actual) > expected expect(actual).to(beGreaterThanOrEqualTo(expected)) expect(actual) >= expected ``` ```objc // Objective-C expect(actual).to(beLessThan(expected)); expect(actual).to(beLessThanOrEqualTo(expected)); expect(actual).to(beGreaterThan(expected)); expect(actual).to(beGreaterThanOrEqualTo(expected)); ``` > Values given to the comparison matchers above must implement `Comparable`. Because of how computers represent floating point numbers, assertions that two floating point numbers be equal will sometimes fail. To express that two numbers should be close to one another within a certain margin of error, use `beCloseTo`: ```swift // Swift expect(actual).to(beCloseTo(expected, within: delta)) ``` ```objc // Objective-C expect(actual).to(beCloseTo(expected).within(delta)); ``` For example, to assert that `10.01` is close to `10`, you can write: ```swift // Swift expect(10.01).to(beCloseTo(10, within: 0.1)) ``` ```objc // Objective-C expect(@(10.01)).to(beCloseTo(@10).within(0.1)); ``` There is also an operator shortcut available in Swift: ```swift // Swift expect(actual) ≈ expected expect(actual) ≈ (expected, delta) ``` (Type Option-x to get ≈ on a U.S. keyboard) The former version uses the default delta of 0.0001. Here is yet another way to do this: ```swift // Swift expect(actual) ≈ expected ± delta expect(actual) == expected ± delta ``` (Type Option-Shift-= to get ± on a U.S. keyboard) If you are comparing arrays of floating point numbers, you'll find the following useful: ```swift // Swift expect([0.0, 2.0]) ≈ [0.0001, 2.0001] expect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1)) ``` > Values given to the `beCloseTo` matcher must be coercable into a `Double`. ## Types/Classes ```swift // Swift // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)) // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)) ``` ```objc // Objective-C // Passes if instance is an instance of aClass: expect(instance).to(beAnInstanceOf(aClass)); // Passes if instance is an instance of aClass or any of its subclasses: expect(instance).to(beAKindOf(aClass)); ``` > Instances must be Objective-C objects: subclasses of `NSObject`, or Swift objects bridged to Objective-C with the `@objc` prefix. For example, to assert that `dolphin` is a kind of `Mammal`: ```swift // Swift expect(dolphin).to(beAKindOf(Mammal)) ``` ```objc // Objective-C expect(dolphin).to(beAKindOf([Mammal class])); ``` > `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`. ## Truthiness ```swift // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()) // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()) // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()) // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()) // Passes if actual is nil: expect(actual).to(beNil()) ``` ```objc // Objective-C // Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()); // Passes if actual is only true (not nil or an object conforming to BooleanType true): expect(actual).to(beTrue()); // Passes if actual is nil, false, or an object with a boolean value of false: expect(actual).to(beFalsy()); // Passes if actual is only false (not nil or an object conforming to BooleanType false): expect(actual).to(beFalse()); // Passes if actual is nil: expect(actual).to(beNil()); ``` ## Swift Error Handling If you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown. ```swift // Swift // Passes if somethingThatThrows() throws an ErrorType: expect{ try somethingThatThrows() }.to(throwError()) // Passes if somethingThatThrows() throws an error with a given domain: expect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in expect(error._domain).to(equal(NSCocoaErrorDomain)) }) // Passes if somethingThatThrows() throws an error with a given case: expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) // Passes if somethingThatThrows() throws an error with a given type: expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) ``` If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. ```swift // Swift let actual: ErrorType = … // Passes if actual contains any error value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum)) // Passes if actual contains the Timeout value from the MyErrorEnum type: expect(actual).to(matchError(MyErrorEnum.Timeout)) // Passes if actual contains an NSError equal to the given one: expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) ``` Note: This feature is only available in Swift. ## Exceptions ```swift // Swift // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name: expect(actual).to(raiseException(named: name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException(named: name, reason: reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect { exception.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(beginWith("a r")) }) ``` ```objc // Objective-C // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) // Passes if actual raises an exception with the given name expect(actual).to(raiseException().named(name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException().named(name).reason(reason)) // Passes if actual raises an exception and it passes expectations in the block // (in this case, if name begins with 'a r') expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { expect(exception.name).to(beginWith(@"a r")); })); ``` Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise exceptions that Nimble will catch. ## Collection Membership ```swift // Swift // Passes if all of the expected values are members of actual: expect(actual).to(contain(expected...)) // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()) ``` ```objc // Objective-C // Passes if expected is a member of actual: expect(actual).to(contain(expected)); // Passes if actual is an empty collection (it contains no elements): expect(actual).to(beEmpty()); ``` > In Swift `contain` takes any number of arguments. The expectation passes if all of them are members of the collection. In Objective-C, `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27). For example, to assert that a list of sea creature names contains "dolphin" and "starfish": ```swift // Swift expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish")) ``` ```objc // Objective-C expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"dolphin")); expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"starfish")); ``` > `contain` and `beEmpty` expect collections to be instances of `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements. To test whether a set of elements is present at the beginning or end of an ordered collection, use `beginWith` and `endWith`: ```swift // Swift // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected...)) // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected...)) ``` ```objc // Objective-C // Passes if the elements in expected appear at the beginning of actual: expect(actual).to(beginWith(expected)); // Passes if the the elements in expected come at the end of actual: expect(actual).to(endWith(expected)); ``` > `beginWith` and `endWith` expect collections to be instances of `NSArray`, or ordered Swift collections composed of `Equatable` elements. Like `contain`, in Objective-C `beginWith` and `endWith` only support a single argument [for now](https://github.com/Quick/Nimble/issues/27). ## Strings ```swift // Swift // Passes if actual contains substring expected: expect(actual).to(contain(expected)) // Passes if actual begins with substring: expect(actual).to(beginWith(expected)) // Passes if actual ends with substring: expect(actual).to(endWith(expected)) // Passes if actual is an empty string, "": expect(actual).to(beEmpty()) // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ```objc // Objective-C // Passes if actual contains substring expected: expect(actual).to(contain(expected)); // Passes if actual begins with substring: expect(actual).to(beginWith(expected)); // Passes if actual ends with substring: expect(actual).to(endWith(expected)); // Passes if actual is an empty string, "": expect(actual).to(beEmpty()); // Passes if actual matches the regular expression defined in expected: expect(actual).to(match(expected)) ``` ## Checking if all elements of a collection pass a condition ```swift // Swift // with a custom function: expect([1,2,3,4]).to(allPass({$0 < 5})) // with another matcher: expect([1,2,3,4]).to(allPass(beLessThan(5))) ``` ```objc // Objective-C expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); ``` For Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type. For Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which uses another matcher is available here. ## Verify collection count ```swift // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` ```objc // passes if actual collection's count is equal to expected expect(actual).to(haveCount(expected)) // passes if actual collection's count is not equal to expected expect(actual).notTo(haveCount(expected)) ``` For Swift the actual value must be a `CollectionType` such as array, dictionary or set. For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. ## Matching a value to any of a group of matchers ```swift // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) // in Swift you also have the option to use the || operator to achieve a similar function expect(82).to(beLessThan(50) || beGreaterThan(80)) ``` ```objc // passes if actual is either less than 10 or greater than 20 expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) // can include any number of matchers -- the following will pass // **be careful** -- too many matchers can be the sign of an unfocused test expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) ``` Note: This matcher allows you to chain any number of matchers together. This provides flexibility, but if you find yourself chaining many matchers together in one test, consider whether you could instead refactor that single test into multiple, more precisely focused tests for better coverage. # Writing Your Own Matchers In Nimble, matchers are Swift functions that take an expected value and return a `MatcherFunc` closure. Take `equal`, for example: ```swift // Swift public func equal(expectedValue: T?) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(expectedValue)>" return actualExpression.evaluate() == expectedValue } } ``` The return value of a `MatcherFunc` closure is a `Bool` that indicates whether the actual value matches the expectation: `true` if it does, or `false` if it doesn't. > The actual `equal` matcher function does not match when either `actual` or `expected` are nil; the example above has been edited for brevity. Since matchers are just Swift functions, you can define them anywhere: at the top of your test file, in a file shared by all of your tests, or in an Xcode project you distribute to others. > If you write a matcher you think everyone can use, consider adding it to Nimble's built-in set of matchers by sending a pull request! Or distribute it yourself via GitHub. For examples of how to write your own matchers, just check out the [`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Sources/Nimble/Matchers) to see how Nimble's built-in set of matchers are implemented. You can also check out the tips below. ## Lazy Evaluation `actualExpression` is a lazy, memoized closure around the value provided to the `expect` function. The expression can either be a closure or a value directly passed to `expect(...)`. In order to determine whether that value matches, custom matchers should call `actualExpression.evaluate()`: ```swift // Swift public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" return actualExpression.evaluate() == nil } } ``` In the above example, `actualExpression` is not `nil`--it is a closure that returns a value. The value it returns, which is accessed via the `evaluate()` method, may be `nil`. If that value is `nil`, the `beNil` matcher function returns `true`, indicating that the expectation passed. Use `expression.isClosure` to determine if the expression will be invoking a closure to produce its value. ## Type Checking via Swift Generics Using Swift's generics, matchers can constrain the type of the actual value passed to the `expect` function by modifying the return type. For example, the following matcher, `haveDescription`, only accepts actual values that implement the `Printable` protocol. It checks their `description` against the one provided to the matcher function, and passes if they are the same: ```swift // Swift public func haveDescription(description: String) -> MatcherFunc { return MatcherFunc { actual, failureMessage in return actual.evaluate().description == description } } ``` ## Customizing Failure Messages By default, Nimble outputs the following failure message when an expectation fails: ``` expected to match, got <\(actual)> ``` You can customize this message by modifying the `failureMessage` struct from within your `MatcherFunc` closure. To change the verb "match" to something else, update the `postfixMessage` property: ```swift // Swift // Outputs: expected to be under the sea, got <\(actual)> failureMessage.postfixMessage = "be under the sea" ``` You can change how the `actual` value is displayed by updating `failureMessage.actualValue`. Or, to remove it altogether, set it to `nil`: ```swift // Swift // Outputs: expected to be under the sea failureMessage.actualValue = nil failureMessage.postfixMessage = "be under the sea" ``` ## Supporting Objective-C To use a custom matcher written in Swift from Objective-C, you'll have to extend the `NMBObjCMatcher` class, adding a new class method for your custom matcher. The example below defines the class method `+[NMBObjCMatcher beNilMatcher]`: ```swift // Swift extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualBlock, failureMessage, location in let block = ({ actualBlock() as NSObject? }) let expr = Expression(expression: block, location: location) return beNil().matches(expr, failureMessage: failureMessage) } } } ``` The above allows you to use the matcher from Objective-C: ```objc // Objective-C expect(actual).to([NMBObjCMatcher beNilMatcher]()); ``` To make the syntax easier to use, define a C function that calls the class method: ```objc // Objective-C FOUNDATION_EXPORT id beNil() { return [NMBObjCMatcher beNilMatcher]; } ``` ### Properly Handling `nil` in Objective-C Matchers When supporting Objective-C, make sure you handle `nil` appropriately. Like [Cedar](https://github.com/pivotal/cedar/issues/100), **most matchers do not match with nil**. This is to bring prevent test writers from being surprised by `nil` values where they did not expect them. Nimble provides the `beNil` matcher function for test writer that want to make expectations on `nil` objects: ```objc // Objective-C expect(nil).to(equal(nil)); // fails expect(nil).to(beNil()); // passes ``` If your matcher does not want to match with nil, you use `NonNilMatcherFunc` and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will automatically generate expected value failure messages when they're nil. ```swift public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.evaluate() let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return beginWith(expected).matches(expr, failureMessage: failureMessage) } } } ``` # Installing Nimble > Nimble can be used on its own, or in conjunction with its sister project, [Quick](https://github.com/Quick/Quick). To install both Quick and Nimble, follow [the installation instructions in the Quick README](https://github.com/Quick/Quick#how-to-install-quick). Nimble can currently be installed in one of two ways: using CocoaPods, or with git submodules. ## Installing Nimble as a Submodule To use Nimble as a submodule to test your iOS or OS X applications, follow these 4 easy steps: 1. Clone the Nimble repository 2. Add Nimble.xcodeproj to the Xcode workspace for your project 3. Link Nimble.framework to your test target 4. Start writing expectations! For more detailed instructions on each of these steps, read [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick). Ignore the steps involving adding Quick to your project in order to install just Nimble. ## Installing Nimble via CocoaPods To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift support for CocoaPods. ```ruby platform :ios, '8.0' source 'https://github.com/CocoaPods/Specs.git' # Whatever pods you need for your app go here target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do use_frameworks! pod 'Nimble', '~> 4.0.0' end ``` Finally run `pod install`. ## Using Nimble without XCTest Nimble is integrated with XCTest to allow it work well when used in Xcode test bundles, however it can also be used in a standalone app. After installing Nimble using one of the above methods, there are two additional steps required to make this work. 1. Create a custom assertion handler and assign an instance of it to the global `NimbleAssertionHandler` variable. For example: ```swift class MyAssertionHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if (!assertion) { print("Expectation failed: \(message.stringValue)") } } } ``` ```swift // Somewhere before you use any assertions NimbleAssertionHandler = MyAssertionHandler() ``` 2. Add a post-build action to fix an issue with the Swift XCTest support library being unnecessarily copied into your app * Edit your scheme in Xcode, and navigate to Build -> Post-actions * Click the "+" icon and select "New Run Script Action" * Open the "Provide build settings from" dropdown and select your target * Enter the following script contents: ``` rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" ``` You can now use Nimble assertions in your code and handle failures as you see fit. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift ================================================ import Foundation /// Protocol for the assertion handler that Nimble uses for all expectations. public protocol AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) } /// Global backing interface for assertions that Nimble creates. /// Defaults to a private test handler that passes through to XCTest. /// /// If XCTest is not available, you must assign your own assertion handler /// before using any matchers, otherwise Nimble will abort the program. /// /// @see AssertionHandler public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() }() ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift ================================================ /// AssertionDispatcher allows multiple AssertionHandlers to receive /// assertion messages. /// /// @warning Does not fully dispatch if one of the handlers raises an exception. /// This is possible with XCTest-based assertion handlers. /// public class AssertionDispatcher: AssertionHandler { let handlers: [AssertionHandler] public init(handlers: [AssertionHandler]) { self.handlers = handlers } public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { for handler in handlers { handler.assert(assertion, message: message, location: location) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift ================================================ import Foundation /// A data structure that stores information about an assertion when /// AssertionRecorder is set as the Nimble assertion handler. /// /// @see AssertionRecorder /// @see AssertionHandler public struct AssertionRecord: CustomStringConvertible { /// Whether the assertion succeeded or failed public let success: Bool /// The failure message the assertion would display on failure. public let message: FailureMessage /// The source location the expectation occurred on. public let location: SourceLocation public var description: String { return "AssertionRecord { success=\(success), message='\(message.stringValue)', location=\(location) }" } } /// An AssertionHandler that silently records assertions that Nimble makes. /// This is useful for testing failure messages for matchers. /// /// @see AssertionHandler public class AssertionRecorder : AssertionHandler { /// All the assertions that were captured by this recorder public var assertions = [AssertionRecord]() public init() {} public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { assertions.append( AssertionRecord( success: assertion, message: message, location: location)) } } /// Allows you to temporarily replace the current Nimble assertion handler with /// the one provided for the scope of the closure. /// /// Once the closure finishes, then the original Nimble assertion handler is restored. /// /// @see AssertionHandler public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { let environment = NimbleEnvironment.activeInstance let oldRecorder = environment.assertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ environment.assertionHandler = oldRecorder })) environment.assertionHandler = tempAssertionHandler capturer.tryBlock { try! closure() } } /// Captures expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about expectations /// that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherFailingExpectations public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler let recorder = AssertionRecorder() let handlers: [AssertionHandler] if silently { handlers = [recorder] } else { handlers = [recorder, previousRecorder] } let dispatcher = AssertionDispatcher(handlers: handlers) withAssertionHandler(dispatcher, closure: closure) return recorder.assertions } /// Captures failed expectations that occur in the given closure. Note that all /// expectations will still go through to the default Nimble handler. /// /// This can be useful if you want to gather information about failed /// expectations that occur within a closure. /// /// @param silently expectations are no longer send to the default Nimble /// assertion handler when this is true. Defaults to false. /// /// @see gatherExpectations /// @see raiseException source for an example use case. public func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { let assertions = gatherExpectations(silently: silently, closure: closure) return assertions.filter { assertion in !assertion.success } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift ================================================ import Foundation /// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this /// class' existance internal class NimbleEnvironment { static var activeInstance: NimbleEnvironment { get { let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] if let env = env as? NimbleEnvironment { return env } else { let newEnv = NimbleEnvironment() self.activeInstance = newEnv return newEnv } } set { NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue } } // TODO: eventually migrate the global to this environment value var assertionHandler: AssertionHandler { get { return NimbleAssertionHandler } set { NimbleAssertionHandler = newValue } } #if _runtime(_ObjC) var awaiter: Awaiter init() { awaiter = Awaiter( waitLock: AssertionWaitLock(), asyncQueue: dispatch_get_main_queue(), timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) } #endif } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift ================================================ import Foundation import XCTest /// Default handler for Nimble. This assertion handler passes failures along to /// XCTest. public class NimbleXCTestHandler : AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { recordFailure("\(message.stringValue)\n", location: location) } } } /// Alternative handler for Nimble. This assertion handler passes failures along /// to XCTest by attempting to reduce the failure message size. public class NimbleShortXCTestHandler: AssertionHandler { public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { if !assertion { let msg: String if let actual = message.actualValue { msg = "got: \(actual) \(message.postfixActual)" } else { msg = "expected \(message.to) \(message.postfixMessage)" } recordFailure("\(msg)\n", location: location) } } } /// Fallback handler in case XCTest is unavailable. This assertion handler will abort /// the program if it is invoked. class NimbleXCTestUnavailableHandler : AssertionHandler { func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") } } #if _runtime(_ObjC) /// Helper class providing access to the currently executing XCTestCase instance, if any @objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { @objc static let sharedInstance = CurrentTestCaseTracker() private(set) var currentTestCase: XCTestCase? @objc func testCaseWillStart(testCase: XCTestCase) { currentTestCase = testCase } @objc func testCaseDidFinish(testCase: XCTestCase) { currentTestCase = nil } } #endif func isXCTestAvailable() -> Bool { #if _runtime(_ObjC) // XCTest is weakly linked and so may not be present return NSClassFromString("XCTestCase") != nil #else return true #endif } private func recordFailure(message: String, location: SourceLocation) { #if _runtime(_ObjC) if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) } else { let msg = "Attempted to report a test failure to XCTest while no test case was running. " + "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() } #else XCTFail("\(message)\n", file: location.file, line: location.line) #endif } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift ================================================ import Foundation #if !_runtime(_ObjC) // swift-corelibs-foundation doesn't provide NSException at all, so provide a dummy class NSException {} #endif // NOTE: This file is not intended to be included in the Xcode project. It // is picked up by the Swift Package Manager during its build process. /// A dummy reimplementation of the `NMBExceptionCapture` class to serve /// as a stand-in for build and runtime environments that don't support /// Objective C. internal class ExceptionCapture { let finally: (() -> Void)? init(handler: ((NSException!) -> Void)?, finally: (() -> Void)?) { self.finally = finally } func tryBlock(unsafeBlock: (() -> Void)) { // We have no way of handling Objective C exceptions in Swift, // so we just go ahead and run the unsafeBlock as-is unsafeBlock() finally?() } } /// Compatibility with the actual Objective-C implementation typealias NMBExceptionCapture = ExceptionCapture ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h ================================================ #import #import SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") @interface CurrentTestCaseTracker : NSObject + (CurrentTestCaseTracker *)sharedInstance; @end @interface CurrentTestCaseTracker (Register) @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h ================================================ #import @class NMBExpectation; @class NMBObjCBeCloseToMatcher; @class NMBObjCRaiseExceptionMatcher; @protocol NMBMatcher; #define NIMBLE_EXPORT FOUNDATION_EXPORT #ifdef NIMBLE_DISABLE_SHORT_SYNTAX #define NIMBLE_SHORT(PROTO, ORIGINAL) #else #define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); } #endif NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line); NIMBLE_EXPORT id NMB_equal(id expectedValue); NIMBLE_SHORT(id equal(id expectedValue), NMB_equal(expectedValue)); NIMBLE_EXPORT id NMB_haveCount(id expectedValue); NIMBLE_SHORT(id haveCount(id expectedValue), NMB_haveCount(expectedValue)); NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue), NMB_beCloseTo(expectedValue)); NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); NIMBLE_SHORT(id beAnInstanceOf(Class expectedClass), NMB_beAnInstanceOf(expectedClass)); NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); NIMBLE_SHORT(id beAKindOf(Class expectedClass), NMB_beAKindOf(expectedClass)); NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); NIMBLE_SHORT(id beginWith(id itemElementOrSubstring), NMB_beginWith(itemElementOrSubstring)); NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThan(NSNumber *expectedValue), NMB_beGreaterThan(expectedValue)); NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beGreaterThanOrEqualTo(NSNumber *expectedValue), NMB_beGreaterThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), NMB_beIdenticalTo(expectedInstance)); NIMBLE_EXPORT id NMB_be(id expectedInstance); NIMBLE_SHORT(id be(id expectedInstance), NMB_be(expectedInstance)); NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), NMB_beLessThan(expectedValue)); NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThanOrEqualTo(NSNumber *expectedValue), NMB_beLessThanOrEqualTo(expectedValue)); NIMBLE_EXPORT id NMB_beTruthy(void); NIMBLE_SHORT(id beTruthy(void), NMB_beTruthy()); NIMBLE_EXPORT id NMB_beFalsy(void); NIMBLE_SHORT(id beFalsy(void), NMB_beFalsy()); NIMBLE_EXPORT id NMB_beTrue(void); NIMBLE_SHORT(id beTrue(void), NMB_beTrue()); NIMBLE_EXPORT id NMB_beFalse(void); NIMBLE_SHORT(id beFalse(void), NMB_beFalse()); NIMBLE_EXPORT id NMB_beNil(void); NIMBLE_SHORT(id beNil(void), NMB_beNil()); NIMBLE_EXPORT id NMB_beEmpty(void); NIMBLE_SHORT(id beEmpty(void), NMB_beEmpty()); NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; #define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define contain(...) NMB_contain(__VA_ARGS__) #endif NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); NIMBLE_SHORT(id endWith(id itemElementOrSubstring), NMB_endWith(itemElementOrSubstring)); NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), NMB_raiseException()); NIMBLE_EXPORT id NMB_match(id expectedValue); NIMBLE_SHORT(id match(id expectedValue), NMB_match(expectedValue)); NIMBLE_EXPORT id NMB_allPass(id matcher); NIMBLE_SHORT(id allPass(id matcher), NMB_allPass(matcher)); NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); #define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) #endif // In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, // define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout // and action arguments. See https://github.com/Quick/Quick/pull/185 for details. typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void))); typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void))); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line); NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); #define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__) #define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__) #define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__) #define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__) #define fail() failWithMessage(@"fail() always fails") #define waitUntilTimeout NMB_waitUntilTimeout #define waitUntil NMB_waitUntil #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m ================================================ #import #import SWIFT_CLASS("_TtC6Nimble7NMBWait") @interface NMBWait : NSObject + (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action; + (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action; @end NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) { return [[NMBExpectation alloc] initWithActualBlock:actualBlock negative:NO file:file line:line]; } NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) { return NMB_expect(^id{ actualBlock(); return nil; }, file, line); } NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) { return [NMBExpectation failWithMessage:msg file:file line:line]; } NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; } NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; } NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; } NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_be(id expectedInstance) { return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_beTruthy() { return [NMBObjCMatcher beTruthyMatcher]; } NIMBLE_EXPORT id NMB_beFalsy() { return [NMBObjCMatcher beFalsyMatcher]; } NIMBLE_EXPORT id NMB_beTrue() { return [NMBObjCMatcher beTrueMatcher]; } NIMBLE_EXPORT id NMB_beFalse() { return [NMBObjCMatcher beFalseMatcher]; } NIMBLE_EXPORT id NMB_beNil() { return [NMBObjCMatcher beNilMatcher]; } NIMBLE_EXPORT id NMB_beEmpty() { return [NMBObjCMatcher beEmptyMatcher]; } NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; if (itemOrSubstring) { [itemOrSubstringArray addObject:itemOrSubstring]; va_list args; va_start(args, itemOrSubstring); id next; while ((next = va_arg(args, id))) { [itemOrSubstringArray addObject:next]; } va_end(args); } return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; } NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; } NIMBLE_EXPORT id NMB_equal(id expectedValue) { return [NMBObjCMatcher equalMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_haveCount(id expectedValue) { return [NMBObjCMatcher haveCountMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_match(id expectedValue) { return [NMBObjCMatcher matchMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_allPass(id expectedValue) { return [NMBObjCMatcher allPassMatcher:expectedValue]; } NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; } NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { return [NMBObjCMatcher raiseExceptionMatcher]; } NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { [NMBWait untilTimeout:timeout file:file line:line action:action]; }; } NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) { return ^(void (^action)(void (^)(void))) { [NMBWait untilFile:file line:line action:action]; }; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h ================================================ #import #import @interface NMBExceptionCapture : NSObject - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally; - (void)tryBlock:(void(^)())unsafeBlock; @end typedef void(^NMBSourceCallbackBlock)(BOOL successful); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m ================================================ #import "NMBExceptionCapture.h" @interface NMBExceptionCapture () @property (nonatomic, copy) void(^handler)(NSException *exception); @property (nonatomic, copy) void(^finally)(); @end @implementation NMBExceptionCapture - (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally { self = [super init]; if (self) { self.handler = handler; self.finally = finally; } return self; } - (void)tryBlock:(void(^)())unsafeBlock { @try { unsafeBlock(); } @catch (NSException *exception) { if (self.handler) { self.handler(exception); } } @finally { if (self.finally) { self.finally(); } } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift ================================================ import Foundation #if _runtime(_ObjC) internal struct ObjCMatcherWrapper : Matcher { let matcher: NMBMatcher func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.matches( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { return matcher.doesNotMatch( ({ try! actualExpression.evaluate() }), failureMessage: failureMessage, location: actualExpression.location) } } // Equivalent to Expectation, but for Nimble's Objective-C interface public class NMBExpectation : NSObject { internal let _actualBlock: () -> NSObject! internal var _negative: Bool internal let _file: FileString internal let _line: UInt internal var _timeout: NSTimeInterval = 1.0 public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { self._actualBlock = actualBlock self._negative = negative self._file = file self._line = line } private var expectValue: Expectation { return expect(_file, line: _line){ self._actualBlock() as NSObject? } } public var withTimeout: (NSTimeInterval) -> NMBExpectation { return ({ timeout in self._timeout = timeout return self }) } public var to: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) }) } public var toWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) }) } public var toNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher) ) }) } public var toNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toNot( ObjCMatcherWrapper(matcher: matcher), description: description ) }) } public var notTo: (NMBMatcher) -> Void { return toNot } public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } public var toEventually: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventually( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toEventuallyNot: (NMBMatcher) -> Void { return ({ matcher in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: nil ) }) } public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { return ({ matcher, description in self.expectValue.toEventuallyNot( ObjCMatcherWrapper(matcher: matcher), timeout: self._timeout, description: description ) }) } public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot } public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } public class func failWithMessage(message: String, file: FileString, line: UInt) { fail(message, location: SourceLocation(file: file, line: line)) } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift ================================================ import Foundation #if _runtime(_ObjC) public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool public class NMBObjCMatcher : NSObject, NMBMatcher { let _match: MatcherBlock let _doesNotMatch: MatcherBlock let canMatchNil: Bool public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) { self.canMatchNil = canMatchNil self._match = matcher self._doesNotMatch = notMatcher } public convenience init(matcher: MatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: MatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in return !matcher(actualExpression: actualExpression, failureMessage: failureMessage) })) } public convenience init(matcher: FullMatcherBlock) { self.init(canMatchNil: true, matcher: matcher) } public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) { self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false) }), notMatcher: ({ actualExpression, failureMessage in return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true) })) } private func canMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { do { if !canMatchNil { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return false } } } catch let error { failureMessage.actualValue = "an unexpected error thrown: \(error)" return false } return true } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _match( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let expr = Expression(expression: actualBlock, location: location) let result = _doesNotMatch( actualExpression: expr, failureMessage: failureMessage) if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { return result } else { return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h ================================================ @class NSString; /** * Returns a string appropriate for displaying in test output * from the provided value. * * @param value A value that will show up in a test's output. * * @return The string that is returned can be * customized per type by conforming a type to the `TestOutputStringConvertible` * protocol. When stringifying a non-`TestOutputStringConvertible` type, this * function will return the value's debug description and then its * normal description if available and in that order. Otherwise it * will return the result of constructing a string from the value. * * @see `TestOutputStringConvertible` */ extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m ================================================ #import "NMBStringify.h" #import NSString *_Nonnull NMBStringify(id _Nullable anyObject) { return [NMBStringer stringify:anyObject]; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m ================================================ #import "CurrentTestCaseTracker.h" #import #import #pragma mark - Method Swizzling /// Swaps the implementations between two instance methods. /// /// @param class The class containing `originalSelector`. /// @param originalSelector Original method to replace. /// @param replacementSelector Replacement method. void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method replacementMethod = class_getInstanceMethod(class, replacementSelector); BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(replacementMethod), method_getTypeEncoding(replacementMethod)); if (didAddMethod) { class_replaceMethod(class, replacementSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, replacementMethod); } } #pragma mark - Private @interface XCTestObservationCenter (Private) - (void)_addLegacyTestObserver:(id)observer; @end @implementation XCTestObservationCenter (Register) /// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary /// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early /// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. /// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, /// falling back to registering after the first normal observer if this private method ever changes. + (void)load { if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { // Swizzle -_addLegacyTestObserver: swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); } else { // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); } } #pragma mark - Replacement Methods /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. - (void)NMB_original__addLegacyTestObserver:(id)observer { [self NMB_original__addLegacyTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } /// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. /// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) - (void)NMB_original_addTestObserver:(id)observer { [self NMB_original_addTestObserver:observer]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL+Wait.swift ================================================ import Foundation #if _runtime(_ObjC) private enum ErrorResult { case Exception(NSException) case Error(ErrorType) case None } /// Only classes, protocols, methods, properties, and subscript declarations can be /// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style /// asynchronous waiting logic so that it may be called from Objective-C and Swift. internal class NMBWait: NSObject { internal class func until( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in action() { done() } } } // Using a throwable closure makes this method not objc compatible. internal class func throwableUntil( timeout timeout: NSTimeInterval, file: FileString = #file, line: UInt = #line, action: (() -> Void) throws -> Void) -> Void { let awaiter = NimbleEnvironment.activeInstance.awaiter let leeway = timeout / 2.0 let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in dispatch_async(dispatch_get_main_queue()) { let capture = NMBExceptionCapture( handler: ({ exception in done(.Exception(exception)) }), finally: ({ }) ) capture.tryBlock { do { try action() { done(.None) } } catch let e { done(.Error(e)) } } } }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) switch result { case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") case .BlockedRunLoop: fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), file: file, line: line) case .TimedOut: let pluralize = (timeout == 1 ? "" : "s") fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) case let .RaisedException(exception): fail("Unexpected exception raised: \(exception)") case let .ErrorThrown(error): fail("Unexpected error thrown: \(error)") case .Completed(.Exception(let exception)): fail("Unexpected exception raised: \(exception)") case .Completed(.Error(let error)): fail("Unexpected error thrown: \(error)") case .Completed(.None): // success break } } @objc(untilFile:line:action:) internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { until(timeout: 1, file: file, line: line, action: action) } } internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." } /// Wait asynchronously until the done closure is called or the timeout has been reached. /// /// @discussion /// Call the done() closure to indicate the waiting has completed. /// /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { NMBWait.until(timeout: timeout, file: file, line: line, action: action) } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL.swift ================================================ import Foundation /// Make an expectation on a given actual value. The value given is lazily evaluated. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Make an expectation on a given actual value. The closure is lazily invoked. @warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { return Expectation( expression: Expression( expression: expression, location: SourceLocation(file: file, line: line), isClosure: true)) } /// Always fails the test with a message and a specified location. public func fail(message: String, location: SourceLocation) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(false, message: FailureMessage(stringValue: message), location: location) } /// Always fails the test with a message. public func fail(message: String, file: FileString = #file, line: UInt = #line) { fail(message, location: SourceLocation(file: file, line: line)) } /// Always fails the test. public func fail(file: FileString = #file, line: UInt = #line) { fail("fail() always fails", file: file, line: line) } /// Like Swift's precondition(), but raises NSExceptions instead of sigaborts internal func nimblePrecondition( @autoclosure expr: () -> Bool, @autoclosure _ name: () -> String, @autoclosure _ message: () -> String, file: StaticString = #file, line: UInt = #line) -> Bool { let result = expr() if !result { #if _runtime(_ObjC) let e = NSException( name: name(), reason: message(), userInfo: nil) e.raise() #else preconditionFailure("\(name()) - \(message())", file: file, line: line) #endif } return result } @noreturn internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { fatalError( "Nimble Bug Found: \(msg) at \(file):\(line).\n" + "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + "code snippet that caused this error." ) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expectation.swift ================================================ import Foundation internal func expressionMatches(expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = to do { let pass = try matcher.matches(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } internal func expressionDoesNotMatch(expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) { let msg = FailureMessage() msg.userDescription = description msg.to = toNot do { let pass = try matcher.doesNotMatch(expression, failureMessage: msg) if msg.actualValue == "" { msg.actualValue = "<\(stringify(try expression.evaluate()))>" } return (pass, msg) } catch let error { msg.actualValue = "an unexpected error thrown: <\(error)>" return (false, msg) } } public struct Expectation { public let expression: Expression public func verify(pass: Bool, _ message: FailureMessage) { let handler = NimbleEnvironment.activeInstance.assertionHandler handler.assert(pass, message: message, location: expression.location) } /// Tests the actual value using a matcher to match. public func to(matcher: U, description: String? = nil) { let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. public func toNot(matcher: U, description: String? = nil) { let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) verify(pass, msg) } /// Tests the actual value using a matcher to not match. /// /// Alias to toNot(). public func notTo(matcher: U, description: String? = nil) { toNot(matcher, description: description) } // see: // - AsyncMatcherWrapper for extension // - NMBExpectation for Objective-C interface } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expression.swift ================================================ import Foundation // Memoizes the given closure, only calling the passed // closure once; even if repeat calls to the returned closure internal func memoizedClosure(closure: () throws -> T) -> (Bool) throws -> T { var cache: T? return ({ withoutCaching in if (withoutCaching || cache == nil) { cache = try closure() } return cache! }) } /// Expression represents the closure of the value inside expect(...). /// Expressions are memoized by default. This makes them safe to call /// evaluate() multiple times without causing a re-evaluation of the underlying /// closure. /// /// @warning Since the closure can be any code, Objective-C code may choose /// to raise an exception. Currently, Expression does not memoize /// exception raising. /// /// This provides a common consumable API for matchers to utilize to allow /// Nimble to change internals to how the captured closure is managed. public struct Expression { internal let _expression: (Bool) throws -> T? internal let _withoutCaching: Bool public let location: SourceLocation public let isClosure: Bool /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. The expression is memoized. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) { self._expression = memoizedClosure(expression) self.location = location self._withoutCaching = false self.isClosure = isClosure } /// Creates a new expression struct. Normally, expect(...) will manage this /// creation process. /// /// @param expression The closure that produces a given value. /// @param location The source location that this closure originates from. /// @param withoutCaching Indicates if the struct should memoize the given /// closure's result. Subsequent evaluate() calls will /// not call the given closure if this is true. /// @param isClosure A bool indicating if the captured expression is a /// closure or internally produced closure. Some matchers /// may require closures. For example, toEventually() /// requires an explicit closure. This gives Nimble /// flexibility if @autoclosure behavior changes between /// Swift versions. Nimble internals always sets this true. public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) { self._expression = memoizedExpression self.location = location self._withoutCaching = withoutCaching self.isClosure = isClosure } /// Returns a new Expression from the given expression. Identical to a map() /// on this type. This should be used only to typecast the Expression's /// closure value. /// /// The returned expression will preserve location and isClosure. /// /// @param block The block that can cast the current Expression value to a /// new type. public func cast(block: (T?) throws -> U?) -> Expression { return Expression(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) } public func evaluate() throws -> T? { return try self._expression(_withoutCaching) } public func withoutCaching() -> Expression { return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/FailureMessage.swift ================================================ import Foundation /// Encapsulates the failure message that matchers can report to the end user. /// /// This is shared state between Nimble and matchers that mutate this value. public class FailureMessage: NSObject { public var expected: String = "expected" public var actualValue: String? = "" // empty string -> use default; nil -> exclude public var to: String = "to" public var postfixMessage: String = "match" public var postfixActual: String = "" /// An optional message that will be appended as a new line and provides additional details /// about the failure. This message will only be visible in the issue navigator / in logs but /// not directly in the source editor since only a single line is presented there. public var extendedMessage: String? = nil public var userDescription: String? = nil public var stringValue: String { get { if let value = _stringValueOverride { return value } else { return computeStringValue() } } set { _stringValueOverride = newValue } } internal var _stringValueOverride: String? public override init() { } public init(stringValue: String) { _stringValueOverride = stringValue } internal func stripNewlines(str: String) -> String { var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } return lines.joinWithSeparator("") } internal func computeStringValue() -> String { var value = "\(expected) \(to) \(postfixMessage)" if let actualValue = actualValue { value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" } value = stripNewlines(value) if let extendedMessage = extendedMessage { value += "\n\(stripNewlines(extendedMessage))" } if let userDescription = userDescription { return "\(userDescription)\n\(value)" } return value } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSHumanReadableCopyright Copyright © 2014 Jeff Hui. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AllPass.swift ================================================ import Foundation public func allPass (passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return allPass("pass a condition", passFunc) } public func allPass (passName: String, _ passFunc: (T?) -> Bool) -> NonNilMatcherFunc { return createAllPassMatcher() { expression, failureMessage in failureMessage.postfixMessage = passName return passFunc(try expression.evaluate()) } } public func allPass (matcher: V) -> NonNilMatcherFunc { return createAllPassMatcher() { try matcher.matches($0, failureMessage: $1) } } private func createAllPassMatcher (elementEvaluator:(Expression, FailureMessage) throws -> Bool) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.actualValue = nil if let actualValue = try actualExpression.evaluate() { for currentElement in actualValue { let exp = Expression( expression: {currentElement}, location: actualExpression.location) if try !elementEvaluator(exp, failureMessage) { failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)," + " but failed first at element <\(stringify(currentElement))>" + " in <\(stringify(actualValue))>" return false } } failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)" } else { failureMessage.postfixMessage = "all pass (use beNil() to match nils)" return false } return true } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() var nsObjects = [NSObject]() var collectionIsUsable = true if let value = actualValue as? NSFastEnumeration { let generator = NSFastGenerator(value) while let obj:AnyObject = generator.next() { if let nsObject = obj as? NSObject { nsObjects.append(nsObject) } else { collectionIsUsable = false break } } } else { collectionIsUsable = false } if !collectionIsUsable { failureMessage.postfixMessage = "allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects" failureMessage.expected = "" failureMessage.to = "" return false } let expr = Expression(expression: ({ nsObjects }), location: location) let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location) } return try! createAllPassMatcher(elementEvaluator).matches( expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift ================================================ import Foundation #if _runtime(_ObjC) public struct AsyncDefaults { public static var Timeout: NSTimeInterval = 1 public static var PollInterval: NSTimeInterval = 0.01 } internal struct AsyncMatcherWrapper: Matcher { let fullMatcher: U let timeoutInterval: NSTimeInterval let pollInterval: NSTimeInterval init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { self.fullMatcher = fullMatcher self.timeoutInterval = timeoutInterval self.pollInterval = pollInterval } func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let fnName = "expect(...).toEventually(...)" let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: fnName) { try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventually(...).") } } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() let result = pollBlock( pollInterval: pollInterval, timeoutInterval: timeoutInterval, file: actualExpression.location.file, line: actualExpression.location.line, fnName: "expect(...).toEventuallyNot(...)") { try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) } switch (result) { case let .Completed(isSuccessful): return isSuccessful case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false case let .RaisedException(exception): failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false case .BlockedRunLoop: failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false case .Incomplete: internalError("Reached .Incomplete state for toEventuallyNot(...).") } } } private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function") extension Expectation { /// Tests the actual value using a matcher to match by checking continuously /// at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionMatches( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), to: "to eventually", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionDoesNotMatch( expression, matcher: AsyncMatcherWrapper( fullMatcher: matcher, timeoutInterval: timeout, pollInterval: pollInterval), toNot: "to eventually not", description: description ) verify(pass, msg) } else { verify(false, toEventuallyRequiresClosureError) } } /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. /// /// Alias of toEventuallyNot() /// /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift ================================================ import Foundation #if _runtime(_ObjC) // A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAKindOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAnInstanceOf if you want to match against the exact class public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" return instance != nil && instance!.isKindOfClass(expectedClass) } } extension NMBObjCMatcher { public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift ================================================ import Foundation // A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types public func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since" + " the Swift compiler will automatically type check Swift-only types." + " This expectation is redundant." return false } } /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAKindOf if you want to match against subclasses public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } failureMessage.postfixMessage = "be an instance of \(classAsString(expectedClass))" #if _runtime(_ObjC) return instance != nil && instance!.isMemberOfClass(expectedClass) #else return instance != nil && instance!.dynamicType == expectedClass #endif } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift ================================================ #if os(Linux) import Glibc #endif import Foundation internal let DefaultDelta = 0.0001 internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" failureMessage.actualValue = "<\(stringify(actualValue))>" return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } /// A Nimble matcher that succeeds when a value is close to another. This is used for floating /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) } } #if _runtime(_ObjC) public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { var _expected: NSNumber var _delta: CDouble init(expected: NSNumber, within: CDouble) { _expected = expected _delta = within } public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let actualBlock: () -> NMBDoubleConvertible? = ({ return actualExpression() as? NMBDoubleConvertible }) let expr = Expression(expression: actualBlock, location: location) let matcher = beCloseTo(self._expected, within: self._delta) return try! matcher.doesNotMatch(expr, failureMessage: failureMessage) } public var within: (CDouble) -> NMBObjCBeCloseToMatcher { return ({ delta in return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) }) } } extension NMBObjCMatcher { public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { return NMBObjCBeCloseToMatcher(expected: expected, within: within) } } #endif public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" if let actual = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actual))>" if actual.count != expectedValues.count { return false } else { for (index, actualItem) in actual.enumerate() { if fabs(actualItem - expectedValues[index]) > delta { return false } } return true } } return false } } // MARK: - Operators infix operator ≈ { associativity none precedence 130 } public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { lhs.to(beCloseTo(rhs)) } public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } public func ==(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) } // make this higher precedence than exponents so the Doubles either end aren't pulled in // unexpectantly infix operator ± { precedence 170 } public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { return (expected: lhs, delta: rhs) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeEmpty.swift ================================================ import Foundation /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualSeq = try actualExpression.evaluate() if actualSeq == nil { return true } var generator = actualSeq!.generate() return generator.next() == nil } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || NSString(string: actualString!).length == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For NSString instances, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() return actualString == nil || actualString!.length == 0 } } // Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray, // etc, since they conform to SequenceType as well as NMBCollection. /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualDictionary = try actualExpression.evaluate() return actualDictionary == nil || actualDictionary!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualArray = try actualExpression.evaluate() return actualArray == nil || actualArray!.count == 0 } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actual = try actualExpression.evaluate() return actual == nil || actual!.count == 0 } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beEmptyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() failureMessage.postfixMessage = "be empty" if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" return try actualExpression.evaluate() > expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending return matches } } public func >(lhs: Expectation, rhs: T) { lhs.to(beGreaterThan(rhs)) } public func >(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beGreaterThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue >= expectedValue } } /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending return matches } } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actual = try actualExpression.evaluate() failureMessage.actualValue = "\(identityAsString(actual))" failureMessage.postfixMessage = "be identical to \(identityAsString(expected))" return actual === expected && actual !== nil } } public func ===(lhs: Expectation, rhs: AnyObject?) { lhs.to(beIdenticalTo(rhs)) } public func !==(lhs: Expectation, rhs: AnyObject?) { lhs.toNot(beIdenticalTo(rhs)) } /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. /// /// Alias for "beIdenticalTo". public func be(expected: AnyObject?) -> NonNilMatcherFunc { return beIdenticalTo(expected) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let aExpr = actualExpression.cast { $0 as AnyObject? } return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThan.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" return try actualExpression.evaluate() < expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending return matches } } public func <(lhs: Expectation, rhs: T) { lhs.to(beLessThan(rhs)) } public func <(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beLessThan(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as! NMBComparable? } return try! beLessThan(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" return try actualExpression.evaluate() <= expectedValue } } /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending } } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in let expr = actualExpression.cast { $0 as? NMBComparable } return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLogical.swift ================================================ import Foundation internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in defer { postprocessor(failureMessage) } return try matcher.matcher(actualExpression, failureMessage) } } // MARK: beTrue() / beFalse() /// A Nimble matcher that succeeds when the actual value is exactly true. /// This matcher will not match against nils. public func beTrue() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(true)) { failureMessage in failureMessage.postfixMessage = "be true" } } /// A Nimble matcher that succeeds when the actual value is exactly false. /// This matcher will not match against nils. public func beFalse() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(false)) { failureMessage in failureMessage.postfixMessage = "be false" } } // MARK: beTruthy() / beFalsy() /// A Nimble matcher that succeeds when the actual value is not logically false. public func beTruthy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be truthy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue == true } } return actualValue != nil } } /// A Nimble matcher that succeeds when the actual value is logically false. /// This matcher will match against nils. public func beFalsy() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be falsy" let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { if let actualValue = actualValue as? BooleanType { return actualValue.boolValue != true } } return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beTruthyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beTruthy().matches(expr, failureMessage: failureMessage) } } public class func beFalsyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } return try! beFalsy().matches(expr, failureMessage: failureMessage) } } public class func beTrueMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beTrue().matches(expr, failureMessage: failureMessage) } } public class func beFalseMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } return try! beFalse().matches(expr, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeNil.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is nil. public func beNil() -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be nil" let actualValue = try actualExpression.evaluate() return actualValue == nil } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in return try! beNil().matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeVoid.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is Void. public func beVoid() -> MatcherFunc<()> { return MatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be void" let actualValue: ()? = try actualExpression.evaluate() return actualValue != nil } } public func ==(lhs: Expectation<()>, rhs: ()) { lhs.to(beVoid()) } public func !=(lhs: Expectation<()>, rhs: ()) { lhs.toNot(beVoid()) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeginWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's first element /// is equal to the expected value. public func beginWith(startingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() return actualGenerator.next() == startingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's first element /// is equal to the expected object. public func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(startingElement) == 0 } } /// A Nimble matcher that succeeds when the actual string contains expected substring /// where the expected substring's location is zero. public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingSubstring)>" if let actual = try actualExpression.evaluate() { let range = actual.rangeOfString(startingSubstring) return range != nil && range!.startIndex == actual.startIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! beginWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Contain.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence contains the expected value. public func contain(items: T...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [T]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" if let actual = try actualExpression.evaluate() { return items.all { return actual.contains($0) } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: String...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [String]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { let range = actual.rangeOfString($0) return range != nil && !range!.isEmpty } } return false } } /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(substrings: NSString...) -> NonNilMatcherFunc { return contain(substrings) } public func contain(substrings: [NSString]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { return substrings.all { actual.rangeOfString($0.description).length != 0 } } return false } } /// A Nimble matcher that succeeds when the actual collection contains the expected object. public func contain(items: AnyObject?...) -> NonNilMatcherFunc { return contain(items) } public func contain(items: [AnyObject?]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" guard let actual = try actualExpression.evaluate() else { return false } return items.all { item in return item != nil && actual.containsObject(item!) } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBContainer { let expr = Expression(expression: ({ value as NMBContainer }), location: location) // A straightforward cast on the array causes this to crash, so we have to cast the individual items let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? }) return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage) } else if actualValue != nil { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" } else { failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/EndWith.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual sequence's last element /// is equal to the expected value. public func endWith(endingElement: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" if let actualValue = try actualExpression.evaluate() { var actualGenerator = actualValue.generate() var lastItem: T? var item: T? repeat { lastItem = item item = actualGenerator.next() } while(item != nil) return lastItem == endingElement } return false } } /// A Nimble matcher that succeeds when the actual collection's last element /// is equal to the expected object. public func endWith(endingElement: AnyObject) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingElement)>" let collection = try actualExpression.evaluate() return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1 } } /// A Nimble matcher that succeeds when the actual string contains the expected substring /// where the expected substring's location is the actual string's length minus the /// expected substring's length. public func endWith(endingSubstring: String) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "end with <\(endingSubstring)>" if let collection = try actualExpression.evaluate() { let range = collection.rangeOfString(endingSubstring) return range != nil && range!.endIndex == collection.endIndex } return false } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = try! actualExpression.evaluate() if let _ = actual as? String { let expr = actualExpression.cast { $0 as? String } return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return try! endWith(expected).matches(expr, failureMessage: failureMessage) } } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Equal.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: T?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() let matches = actualValue == expectedValue && expectedValue != nil if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return matches } } /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// /// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). public func equal(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. /// Items must implement the Equatable protocol. public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" let actualValue = try actualExpression.evaluate() if expectedValue == nil || actualValue == nil { if expectedValue == nil { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } return expectedValue! == actualValue! } } /// A Nimble matcher allowing comparison of collection with optional type public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let actualValue = try actualExpression.evaluate() { if expectedValue.count != actualValue.count { return false } for (index, item) in actualValue.enumerate() { let otherItem = expectedValue[index] if item == nil && otherItem == nil { continue } else if item == nil && otherItem != nil { return false } else if item != nil && otherItem == nil { return false } else if item! != otherItem! { return false } } return true } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: stringify) } /// A Nimble matcher that succeeds when the actual set is equal to the expected set. public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { return equal(expectedValue, stringify: { if let set = $0 { return stringify(Array(set).sort { $0 < $1 }) } else { return "nil" } }) } private func equal(expectedValue: Set?, stringify: Set? -> String) -> NonNilMatcherFunc> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" if let expectedValue = expectedValue { if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "<\(stringify(actualValue))>" if expectedValue == actualValue { return true } let missing = expectedValue.subtract(actualValue) if missing.count > 0 { failureMessage.postfixActual += ", missing <\(stringify(missing))>" } let extra = actualValue.subtract(expectedValue) if extra.count > 0 { failureMessage.postfixActual += ", extra <\(stringify(extra))>" } } } else { failureMessage.postfixActual = " (use beNil() to match nils)" } return false } } public func ==(lhs: Expectation, rhs: T?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation, rhs: T?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T]>, rhs: [T]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T]>, rhs: [T]?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation>, rhs: Set?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation>, rhs: Set?) { lhs.toNot(equal(rhs)) } public func ==(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.to(equal(rhs)) } public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.toNot(equal(rhs)) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func equalMatcher(expected: NSObject) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in return try! equal(expected).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/HaveCount.swift ================================================ import Foundation // The `haveCount` matchers do not print the full string representation of the collection value, // instead they only print the type name and the expected count. This makes it easier to understand // the reason for failed expectations. See: https://github.com/Quick/Nimble/issues/308. // The representation of the collection content is provided in a new line as an `extendedMessage`. /// A Nimble matcher that succeeds when the actual CollectionType's count equals /// the expected value public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" return result } else { return false } } } /// A Nimble matcher that succeeds when the actual collection's count equals /// the expected value public func haveCount(expectedValue: Int) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" return result } else { return false } } } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let location = actualExpression.location let actualValue = try! actualExpression.evaluate() if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection}), location: location) return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" } return false } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Match.swift ================================================ import Foundation #if _runtime(_ObjC) /// A Nimble matcher that succeeds when the actual string satisfies the regular expression /// described by the expected string. public func match(expectedValue: String?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "match <\(stringify(expectedValue))>" if let actual = try actualExpression.evaluate() { if let regexp = expectedValue { return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil } } return false } } extension NMBObjCMatcher { public class func matchMatcher(expected: NSString) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in let actual = actualExpression.cast { $0 as? String } return try! match(expected.description).matches(actual, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatchError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. public func matchError(error: T) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) return errorMatchesNonNilFieldsOrClosure(actualError, error: error) } } /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error of the specified type public func matchError(errorType: T.Type) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actualError: ErrorType? = try actualExpression.evaluate() setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift ================================================ /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil /// values are recieved in an expectation. /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct MatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try matcher(actualExpression, failureMessage) } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { return try !matcher(actualExpression, failureMessage) } } /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// /// Unlike MatcherFunc, this will always fail if an expectation contains nil. /// This applies regardless of using to() or toNot(). /// /// You may use this when implementing your own custom matchers. /// /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. public struct NonNilMatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { self.matcher = matcher } public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { let pass = try !matcher(actualExpression, failureMessage) if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { return false } return pass } internal func attachNilErrorIfNeeded(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { if try actualExpression.evaluate() == nil { failureMessage.postfixActual = " (use beNil() to match nils)" return true } return false } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift ================================================ import Foundation /// Implement this protocol to implement a custom matcher for Swift public protocol Matcher { associatedtype ValueType func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool } #if _runtime(_ObjC) /// Objective-C interface to the Swift variant of Matcher. @objc public protocol NMBMatcher { func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool } #endif #if _runtime(_ObjC) /// Protocol for types that support contain() matcher. @objc public protocol NMBContainer { func containsObject(object: AnyObject!) -> Bool } extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet #else public protocol NMBContainer { func containsObject(object: AnyObject) -> Bool } #endif extension NSArray : NMBContainer {} extension NSSet : NMBContainer {} #if _runtime(_ObjC) /// Protocol for types that support only beEmpty(), haveCount() matchers @objc public protocol NMBCollection { var count: Int { get } } extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet extension NSMapTable : NMBCollection {} #else public protocol NMBCollection { var count: Int { get } } #endif extension NSSet : NMBCollection {} extension NSIndexSet : NMBCollection {} extension NSDictionary : NMBCollection {} #if _runtime(_ObjC) /// Protocol for types that support beginWith(), endWith(), beEmpty() matchers @objc public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject!) -> Int } #else public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject) -> Int } #endif extension NSArray : NMBOrderedCollection {} #if _runtime(_ObjC) /// Protocol for types to support beCloseTo() matcher @objc public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } #else public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } extension Double : NMBDoubleConvertible { public var doubleValue: CDouble { get { return self } } } extension Float : NMBDoubleConvertible { public var doubleValue: CDouble { get { return CDouble(self) } } } #endif extension NSNumber : NMBDoubleConvertible { } private let dateFormatter: NSDateFormatter = { let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") return formatter }() #if _runtime(_ObjC) extension NSDate: NMBDoubleConvertible { public var doubleValue: CDouble { get { return self.timeIntervalSinceReferenceDate } } } #endif extension NSDate: TestOutputStringConvertible { public var testDescription: String { return dateFormatter.stringFromDate(self) } } /// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), /// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. /// /// Types that conform to Swift's Comparable protocol will work implicitly too #if _runtime(_ObjC) @objc public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #else // This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } #endif extension NSNumber : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! NSNumber) } } extension NSString : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! String) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/PostNotification.swift ================================================ import Foundation internal class NotificationCollector { private(set) var observedNotifications: [NSNotification] private let notificationCenter: NSNotificationCenter #if _runtime(_ObjC) private var token: AnyObject? #else private var token: NSObjectProtocol? #endif required init(notificationCenter: NSNotificationCenter) { self.notificationCenter = notificationCenter self.observedNotifications = [] } func startObserving() { self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { // linux-swift gets confused by .append(n) [weak self] n in self?.observedNotifications += [n] } } deinit { #if _runtime(_ObjC) if let token = self.token { self.notificationCenter.removeObserver(token) } #else if let token = self.token as? AnyObject { self.notificationCenter.removeObserver(token) } #endif } } private let mainThread = pthread_self() public func postNotifications( notificationsMatcher: T, fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) -> MatcherFunc { let _ = mainThread // Force lazy-loading of this value let collector = NotificationCollector(notificationCenter: center) collector.startObserving() var once: Bool = false return MatcherFunc { actualExpression, failureMessage in let collectorNotificationsExpression = Expression(memoizedExpression: { _ in return collector.observedNotifications }, location: actualExpression.location, withoutCaching: true) assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") if !once { once = true try actualExpression.evaluate() } let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) if collector.observedNotifications.isEmpty { failureMessage.actualValue = "no notifications" } else { failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" } return match } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/RaisesException.swift ================================================ import Foundation // This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager #if _runtime(_ObjC) && !SWIFT_PACKAGE /// A Nimble matcher that succeeds when the actual expression raises an /// exception with the specified name, reason, and/or userInfo. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the raised exception. The closure only gets called when an exception /// is raised. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func raiseException( named named: String? = nil, reason: String? = nil, userInfo: NSDictionary? = nil, closure: ((NSException) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var exception: NSException? let capture = NMBExceptionCapture(handler: ({ e in exception = e }), finally: nil) capture.tryBlock { try! actualExpression.evaluate() return } setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure) return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure) } } internal func setFailureMessageForException( failureMessage: FailureMessage, exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) { failureMessage.postfixMessage = "raise exception" if let named = named { failureMessage.postfixMessage += " with name <\(named)>" } if let reason = reason { failureMessage.postfixMessage += " with reason <\(reason)>" } if let userInfo = userInfo { failureMessage.postfixMessage += " with userInfo <\(userInfo)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if named == nil && reason == nil && userInfo == nil && closure == nil { failureMessage.postfixMessage = "raise any exception" } if let exception = exception { failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" } else { failureMessage.actualValue = "no exception" } } internal func exceptionMatchesNonNilFieldsOrClosure( exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, closure: ((NSException) -> Void)?) -> Bool { var matches = false if let exception = exception { matches = true if named != nil && exception.name != named { matches = false } if reason != nil && exception.reason != reason { matches = false } if userInfo != nil && exception.userInfo != userInfo { matches = false } if let closure = closure { let assertions = gatherFailingExpectations { closure(exception) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } public class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher { internal var _name: String? internal var _reason: String? internal var _userInfo: NSDictionary? internal var _block: ((NSException) -> Void)? internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { _name = name _reason = reason _userInfo = userInfo _block = block } public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let block: () -> Any? = ({ actualBlock(); return nil }) let expr = Expression(expression: block, location: location) return try! raiseException( named: _name, reason: _reason, userInfo: _userInfo, closure: _block ).matches(expr, failureMessage: failureMessage) } public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { return !matches(actualBlock, failureMessage: failureMessage, location: location) } public var named: (name: String) -> NMBObjCRaiseExceptionMatcher { return ({ name in return NMBObjCRaiseExceptionMatcher( name: name, reason: self._reason, userInfo: self._userInfo, block: self._block ) }) } public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher { return ({ reason in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: reason, userInfo: self._userInfo, block: self._block ) }) } public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { return ({ userInfo in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: userInfo, block: self._block ) }) } public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { return ({ block in return NMBObjCRaiseExceptionMatcher( name: self._name, reason: self._reason, userInfo: self._userInfo, block: block ) }) } } extension NMBObjCMatcher { public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual value matches with any of the matchers /// provided in the variable list of matchers. public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { return satisfyAnyOf(matchers) } internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let postfixMessages = NSMutableArray() var matches = false for matcher in matchers { if try matcher.matches(actualExpression, failureMessage: failureMessage) { matches = true } postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) } failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") if let actualValue = try actualExpression.evaluate() { failureMessage.actualValue = "\(actualValue)" } return matches } } public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { return satisfyAnyOf(left, right) } #if _runtime(_ObjC) extension NMBObjCMatcher { public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in if matchers.isEmpty { failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" return false } var elementEvaluators = [NonNilMatcherFunc]() for matcher in matchers { let elementEvaluator: (Expression, FailureMessage) -> Bool = { expression, failureMessage in return matcher.matches( {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) } elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) } return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/ThrowError.swift ================================================ import Foundation /// A Nimble matcher that succeeds when the actual expression throws an /// error of the specified type or from the specified case. /// /// Errors are tried to be compared by their implementation of Equatable, /// otherwise they fallback to comparision by _domain and _code. /// /// Alternatively, you can pass a closure to do any arbitrary custom matching /// to the thrown error. The closure only gets called when an error was thrown. /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. public func throwError( error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) } } /// A Nimble matcher that succeeds when the actual expression throws any /// error or when the passed closures' arbitrary custom matching succeeds. /// /// This duplication to it's generic adequate is required to allow to receive /// values of the existential type ErrorType in the closure. /// /// The closure only gets called when an error was thrown. public func throwError( closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in var actualError: ErrorType? do { try actualExpression.evaluate() } catch let catchedError { actualError = catchedError } setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Nimble.h ================================================ #import #import "NMBExceptionCapture.h" #import "NMBStringify.h" #import "DSL.h" FOUNDATION_EXPORT double NimbleVersionNumber; FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Async.swift ================================================ import Foundation #if _runtime(_ObjC) import Dispatch private let timeoutLeeway: UInt64 = NSEC_PER_MSEC private let pollLeeway: UInt64 = NSEC_PER_MSEC /// Stores debugging information about callers internal struct WaitingInfo: CustomStringConvertible { let name: String let file: FileString let lineNumber: UInt var description: String { return "\(name) at \(file):\(lineNumber)" } } internal protocol WaitLock { func acquireWaitingLock(fnName: String, file: FileString, line: UInt) func releaseWaitingLock() func isWaitingLocked() -> Bool } internal class AssertionWaitLock: WaitLock { private var currentWaiter: WaitingInfo? = nil init() { } func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { let info = WaitingInfo(name: fnName, file: file, lineNumber: line) nimblePrecondition( NSThread.isMainThread(), "InvalidNimbleAPIUsage", "\(fnName) can only run on the main thread." ) nimblePrecondition( currentWaiter == nil, "InvalidNimbleAPIUsage", "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + "The call to\n\t\(info)\n" + "triggered this exception because\n\t\(currentWaiter!)\n" + "is currently managing the main run loop." ) currentWaiter = info } func isWaitingLocked() -> Bool { return currentWaiter != nil } func releaseWaitingLock() { currentWaiter = nil } } internal enum AwaitResult { /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) case Incomplete /// TimedOut indicates the result reached its defined timeout limit before returning case TimedOut /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger /// the timeout code. /// /// This may also mean the async code waiting upon may have never actually ran within the /// required time because other timers & sources are running on the main run loop. case BlockedRunLoop /// The async block successfully executed and returned a given result case Completed(T) /// When a Swift Error is thrown case ErrorThrown(ErrorType) /// When an Objective-C Exception is raised case RaisedException(NSException) func isIncomplete() -> Bool { switch self { case .Incomplete: return true default: return false } } func isCompleted() -> Bool { switch self { case .Completed(_): return true default: return false } } } /// Holds the resulting value from an asynchronous expectation. /// This class is thread-safe at receiving an "response" to this promise. internal class AwaitPromise { private(set) internal var asyncResult: AwaitResult = .Incomplete private var signal: dispatch_semaphore_t init() { signal = dispatch_semaphore_create(1) } /// Resolves the promise with the given result if it has not been resolved. Repeated calls to /// this method will resolve in a no-op. /// /// @returns a Bool that indicates if the async result was accepted or rejected because another /// value was recieved first. func resolveResult(result: AwaitResult) -> Bool { if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { self.asyncResult = result return true } else { return false } } } internal struct AwaitTrigger { let timeoutSource: dispatch_source_t let actionSource: dispatch_source_t? let start: () throws -> Void } /// Factory for building fully configured AwaitPromises and waiting for their results. /// /// This factory stores all the state for an async expectation so that Await doesn't /// doesn't have to manage it. internal class AwaitPromiseBuilder { let awaiter: Awaiter let waitLock: WaitLock let trigger: AwaitTrigger let promise: AwaitPromise internal init( awaiter: Awaiter, waitLock: WaitLock, promise: AwaitPromise, trigger: AwaitTrigger) { self.awaiter = awaiter self.waitLock = waitLock self.promise = promise self.trigger = trigger } func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { // = Discussion = // // There's a lot of technical decisions here that is useful to elaborate on. This is // definitely more lower-level than the previous NSRunLoop based implementation. // // // Why Dispatch Source? // // // We're using a dispatch source to have better control of the run loop behavior. // A timer source gives us deferred-timing control without having to rely as much on // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) // which is ripe for getting corrupted by application code. // // And unlike dispatch_async(), we can control how likely our code gets prioritized to // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. // // This timer is assumed to run on the HIGH priority queue to ensure it maintains the // highest priority over normal application / test code when possible. // // // Run Loop Management // // In order to properly interrupt the waiting behavior performed by this factory class, // this timer stops the main run loop to tell the waiter code that the result should be // checked. // // In addition, stopping the run loop is used to halt code executed on the main run loop. dispatch_source_set_timer( trigger.timeoutSource, dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), DISPATCH_TIME_FOREVER, timeoutLeeway ) dispatch_source_set_event_handler(trigger.timeoutSource) { guard self.promise.asyncResult.isIncomplete() else { return } let timedOutSem = dispatch_semaphore_create(0) let semTimedOutOrBlocked = dispatch_semaphore_create(0) dispatch_semaphore_signal(semTimedOutOrBlocked) let runLoop = CFRunLoopGetMain() CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { dispatch_semaphore_signal(timedOutSem) dispatch_semaphore_signal(semTimedOutOrBlocked) if self.promise.resolveResult(.TimedOut) { CFRunLoopStop(CFRunLoopGetMain()) } } } // potentially interrupt blocking code on run loop to let timeout code run CFRunLoopStop(runLoop) let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 if didNotTimeOut && timeoutWasNotTriggered { if self.promise.resolveResult(.BlockedRunLoop) { CFRunLoopStop(CFRunLoopGetMain()) } } } return self } /// Blocks for an asynchronous result. /// /// @discussion /// This function must be executed on the main thread and cannot be nested. This is because /// this function (and it's related methods) coordinate through the main run loop. Tampering /// with the run loop can cause undesireable behavior. /// /// This method will return an AwaitResult in the following cases: /// /// - The main run loop is blocked by other operations and the async expectation cannot be /// be stopped. /// - The async expectation timed out /// - The async expectation succeeded /// - The async expectation raised an unexpected exception (objc) /// - The async expectation raised an unexpected error (swift) /// /// The returned AwaitResult will NEVER be .Incomplete. func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { waitLock.acquireWaitingLock( fnName, file: file, line: line) let capture = NMBExceptionCapture(handler: ({ exception in self.promise.resolveResult(.RaisedException(exception)) }), finally: ({ self.waitLock.releaseWaitingLock() })) capture.tryBlock { do { try self.trigger.start() } catch let error { self.promise.resolveResult(.ErrorThrown(error)) } dispatch_resume(self.trigger.timeoutSource) while self.promise.asyncResult.isIncomplete() { // Stopping the run loop does not work unless we run only 1 mode NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) } dispatch_suspend(self.trigger.timeoutSource) dispatch_source_cancel(self.trigger.timeoutSource) if let asyncSource = self.trigger.actionSource { dispatch_source_cancel(asyncSource) } } return promise.asyncResult } } internal class Awaiter { let waitLock: WaitLock let timeoutQueue: dispatch_queue_t let asyncQueue: dispatch_queue_t internal init( waitLock: WaitLock, asyncQueue: dispatch_queue_t, timeoutQueue: dispatch_queue_t) { self.waitLock = waitLock self.asyncQueue = asyncQueue self.timeoutQueue = timeoutQueue } private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { return dispatch_source_create( DISPATCH_SOURCE_TYPE_TIMER, 0, DISPATCH_TIMER_STRICT, queue ) } func performBlock( closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) var completionCount = 0 let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { try closure() { completionCount += 1 nimblePrecondition( completionCount < 2, "InvalidNimbleAPIUsage", "Done closure's was called multiple times. waitUntil(..) expects its " + "completion closure to only be called once.") if promise.resolveResult(.Completed($0)) { CFRunLoopStop(CFRunLoopGetMain()) } } } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) let asyncSource = createTimerSource(asyncQueue) let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) dispatch_source_set_event_handler(asyncSource) { do { if let result = try closure() { if promise.resolveResult(.Completed(result)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } catch let error { if promise.resolveResult(.ErrorThrown(error)) { CFRunLoopStop(CFRunLoopGetCurrent()) } } } dispatch_resume(asyncSource) } return AwaitPromiseBuilder( awaiter: self, waitLock: waitLock, promise: promise, trigger: trigger) } } internal func pollBlock( pollInterval pollInterval: NSTimeInterval, timeoutInterval: NSTimeInterval, file: FileString, line: UInt, fnName: String = #function, expression: () throws -> Bool) -> AwaitResult { let awaiter = NimbleEnvironment.activeInstance.awaiter let result = awaiter.poll(pollInterval) { () throws -> Bool? in do { if try expression() { return true } return nil } catch let error { throw error } }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) return result } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Errors.swift ================================================ import Foundation // Generic internal func setFailureMessageForError( failureMessage: FailureMessage, postfixMessageVerb: String = "throw", actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) { failureMessage.postfixMessage = "\(postfixMessageVerb) error" if let error = error { if let error = error as? CustomDebugStringConvertible { failureMessage.postfixMessage += " <\(error.debugDescription)>" } else { failureMessage.postfixMessage += " <\(error)>" } } else if errorType != nil || closure != nil { failureMessage.postfixMessage += " from type <\(T.self)>" } if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } if error == nil && errorType == nil && closure == nil { failureMessage.postfixMessage = "\(postfixMessageVerb) any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { return actualError._domain == expectedError._domain && actualError._code == expectedError._code } internal func errorMatchesExpectedError( actualError: ErrorType, expectedError: T) -> Bool { if let actualError = actualError as? T { return actualError == expectedError } return false } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, error: T? = nil, errorType: T.Type? = nil, closure: ((T) -> Void)? = nil) -> Bool { var matches = false if let actualError = actualError { matches = true if let error = error { if !errorMatchesExpectedError(actualError, expectedError: error) { matches = false } } if let actualError = actualError as? T { if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError as T) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } else if errorType != nil && closure != nil { // The closure expects another ErrorType as argument, so this // is _supposed_ to fail, so that it becomes more obvious. let assertions = gatherExpectations { expect(actualError is T).to(equal(true)) } precondition(assertions.map { $0.message }.count > 0) matches = false } } return matches } // Non-generic internal func setFailureMessageForError( failureMessage: FailureMessage, actualError: ErrorType?, closure: ((ErrorType) -> Void)?) { failureMessage.postfixMessage = "throw error" if let _ = closure { failureMessage.postfixMessage += " that satisfies block" } else { failureMessage.postfixMessage = "throw any error" } if let actualError = actualError { failureMessage.actualValue = "<\(actualError)>" } else { failureMessage.actualValue = "no error" } } internal func errorMatchesNonNilFieldsOrClosure( actualError: ErrorType?, closure: ((ErrorType) -> Void)?) -> Bool { var matches = false if let actualError = actualError { matches = true if let closure = closure { let assertions = gatherFailingExpectations { closure(actualError) } let messages = assertions.map { $0.message } if messages.count > 0 { matches = false } } } return matches } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Functional.swift ================================================ import Foundation extension SequenceType { internal func all(fn: Generator.Element -> Bool) -> Bool { for item in self { if !fn(item) { return false } } return true } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/SourceLocation.swift ================================================ import Foundation // Ideally we would always use `StaticString` as the type for tracking the file name // that expectations originate from, for consistency with `assert` etc. from the // stdlib, and because recent versions of the XCTest overlay require `StaticString` // when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we // have to use `String` instead because StaticString can't be generated from Objective-C #if _runtime(_ObjC) public typealias FileString = String #else public typealias FileString = StaticString #endif public final class SourceLocation : NSObject { public let file: FileString public let line: UInt override init() { file = "Unknown File" line = 0 } init(file: FileString, line: UInt) { self.file = file self.line = line } override public var description: String { return "\(file):\(line)" } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Stringers.swift ================================================ import Foundation internal func identityAsString(value: AnyObject?) -> String { if let value = value { return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description } else { return "nil" } } internal func classAsString(cls: AnyClass) -> String { #if _runtime(_ObjC) return NSStringFromClass(cls) #else return String(cls) #endif } internal func arrayAsString(items: [T], joiner: String = ", ") -> String { return items.reduce("") { accum, item in let prefix = (accum.isEmpty ? "" : joiner) return accum + prefix + "\(stringify(item))" } } /// A type with a customized test output text representation. /// /// This textual representation is produced when values will be /// printed in test runs, and may be useful when producing /// error messages in custom matchers. /// /// - SeeAlso: `CustomDebugStringConvertible` public protocol TestOutputStringConvertible { var testDescription: String { get } } extension Double: TestOutputStringConvertible { public var testDescription: String { return NSNumber(double: self).testDescription } } extension Float: TestOutputStringConvertible { public var testDescription: String { return NSNumber(float: self).testDescription } } extension NSNumber: TestOutputStringConvertible { // This is using `NSString(format:)` instead of // `String(format:)` because the latter somehow breaks // the travis CI build on linux. public var testDescription: String { let description = self.description if description.containsString(".") { // Travis linux swiftpm build doesn't like casting String to NSString, // which is why this annoying nested initializer thing is here. // Maybe this will change in a future snapshot. let decimalPlaces = NSString(string: NSString(string: description) .componentsSeparatedByString(".")[1]) if decimalPlaces.length > 4 { return NSString(format: "%0.4f", self.doubleValue).description } } return self.description } } extension Array: TestOutputStringConvertible { public var testDescription: String { let list = self.map(Nimble.stringify).joinWithSeparator(", ") return "[\(list)]" } } extension AnySequence: TestOutputStringConvertible { public var testDescription: String { let generator = self.generate() var strings = [String]() var value: AnySequence.Generator.Element? repeat { value = generator.next() if let value = value { strings.append(stringify(value)) } } while value != nil let list = strings.joinWithSeparator(", ") return "[\(list)]" } } extension NSArray: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension NSIndexSet: TestOutputStringConvertible { public var testDescription: String { let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") return "(\(list))" } } extension String: TestOutputStringConvertible { public var testDescription: String { return self } } extension NSData: TestOutputStringConvertible { public var testDescription: String { #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) return "NSData" #else return "NSData" #endif } } /// /// Returns a string appropriate for displaying in test output /// from the provided value. /// /// - parameter value: A value that will show up in a test's output. /// /// - returns: The string that is returned can be /// customized per type by conforming a type to the `TestOutputStringConvertible` /// protocol. When stringifying a non-`TestOutputStringConvertible` type, this /// function will return the value's debug description and then its /// normal description if available and in that order. Otherwise it /// will return the result of constructing a string from the value. /// /// - SeeAlso: `TestOutputStringConvertible` @warn_unused_result public func stringify(value: T) -> String { if let value = value as? TestOutputStringConvertible { return value.testDescription } if let value = value as? CustomDebugStringConvertible { return value.debugDescription } return String(value) } /// -SeeAlso: `stringify(value: T)` @warn_unused_result public func stringify(value: T?) -> String { if let unboxed = value { return stringify(unboxed) } return "nil" } #if _runtime(_ObjC) @objc public class NMBStringer: NSObject { @warn_unused_result @objc public class func stringify(obj: AnyObject?) -> String { return Nimble.stringify(obj) } } #endif // MARK: Collection Type Stringers /// Attempts to generate a pretty type string for a given value. If the value is of a Objective-C /// collection type, or a subclass thereof, (e.g. `NSArray`, `NSDictionary`, etc.). /// This function will return the type name of the root class of the class cluster for better /// readability (e.g. `NSArray` instead of `__NSArrayI`). /// /// For values that don't have a type of an Objective-C collection, this function returns the /// default type description. /// /// - parameter value: A value that will be used to determine a type name. /// /// - returns: The name of the class cluster root class for Objective-C collection types, or the /// the `dynamicType` of the value for values of any other type. public func prettyCollectionType(value: T) -> String { #if _runtime(_ObjC) // Check for types that are not in corelibs-foundation separately if value is NSHashTable { return String(NSHashTable.self) } #endif switch value { case is NSArray: return String(NSArray.self) case is NSDictionary: return String(NSDictionary.self) case is NSSet: return String(NSSet.self) case is NSIndexSet: return String(NSIndexSet.self) default: return String(value) } } /// Returns the type name for a given collection type. This overload is used by Swift /// collection types. /// /// - parameter collection: A Swift `CollectionType` value. /// /// - returns: A string representing the `dynamicType` of the value. public func prettyCollectionType(collection: T) -> String { return String(collection.dynamicType) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/LinuxMain.swift ================================================ import XCTest @testable import Nimbletest // This is the entry point for NimbleTests on Linux XCTMain([ // AsynchronousTests(), SynchronousTest(), UserDescriptionTest(), // Matchers AllPassTest(), // BeAKindOfTest(), BeAnInstanceOfTest(), BeCloseToTest(), BeginWithTest(), BeGreaterThanOrEqualToTest(), BeGreaterThanTest(), BeIdenticalToObjectTest(), BeIdenticalToTest(), BeLessThanOrEqualToTest(), BeLessThanTest(), BeTruthyTest(), BeTrueTest(), BeFalsyTest(), BeFalseTest(), BeNilTest(), ContainTest(), EndWithTest(), EqualTest(), HaveCountTest(), // MatchTest(), // RaisesExceptionTest(), ThrowErrorTest(), SatisfyAnyOfTest(), PostNotificationTest(), ]) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/AsynchronousTest.swift ================================================ import Foundation import XCTest import Nimble // These tests require the ObjC runtimes do not currently have the GCD and run loop facilities // required for working with Nimble's async matchers #if _runtime(_ObjC) class AsyncTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToEventuallyPositiveMatches", testToEventuallyPositiveMatches), ("testToEventuallyNegativeMatches", testToEventuallyNegativeMatches), ("testWaitUntilPositiveMatches", testWaitUntilPositiveMatches), ("testToEventuallyWithCustomDefaultTimeout", testToEventuallyWithCustomDefaultTimeout), ("testWaitUntilTimesOutIfNotCalled", testWaitUntilTimesOutIfNotCalled), ("testWaitUntilTimesOutWhenExceedingItsTime", testWaitUntilTimesOutWhenExceedingItsTime), ("testWaitUntilNegativeMatches", testWaitUntilNegativeMatches), ("testWaitUntilDetectsStalledMainThreadActivity", testWaitUntilDetectsStalledMainThreadActivity), ("testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed", testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed), ("testWaitUntilErrorsIfDoneIsCalledMultipleTimes", testWaitUntilErrorsIfDoneIsCalledMultipleTimes), ("testWaitUntilMustBeInMainThread", testWaitUntilMustBeInMainThread), ("testToEventuallyMustBeInMainThread", testToEventuallyMustBeInMainThread), ] } let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testToEventuallyPositiveMatches() { var value = 0 deferToMainQueue { value = 1 } expect { value }.toEventually(equal(1)) deferToMainQueue { value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testToEventuallyNegativeMatches() { let value = 0 failsWithErrorMessage("expected to eventually not equal <0>, got <0>") { expect { value }.toEventuallyNot(equal(0)) } failsWithErrorMessage("expected to eventually equal <1>, got <0>") { expect { value }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventually(equal(1)) } failsWithErrorMessage("expected to eventually not equal <0>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toEventuallyNot(equal(0)) } } func testToEventuallyWithCustomDefaultTimeout() { AsyncDefaults.Timeout = 2 defer { AsyncDefaults.Timeout = 1 } var value = 0 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 1 } expect { value }.toEventually(equal(1)) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(1.1) value = 0 } expect { value }.toEventuallyNot(equal(1)) } func testWaitUntilPositiveMatches() { waitUntil { done in done() } waitUntil { done in deferToMainQueue { done() } } } func testWaitUntilTimesOutIfNotCalled() { failsWithErrorMessage("Waited more than 1.0 second") { waitUntil(timeout: 1) { done in return } } } func testWaitUntilTimesOutWhenExceedingItsTime() { var waiting = true failsWithErrorMessage("Waited more than 0.01 seconds") { waitUntil(timeout: 0.01) { done in dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { NSThread.sleepForTimeInterval(0.1) done() waiting = false } } } // "clear" runloop to ensure this test doesn't poison other tests repeat { NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2)) } while(waiting) } func testWaitUntilNegativeMatches() { failsWithErrorMessage("expected to equal <2>, got <1>") { waitUntil { done in NSThread.sleepForTimeInterval(0.1) expect(1).to(equal(2)) done() } } } func testWaitUntilDetectsStalledMainThreadActivity() { let msg = "-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." failsWithErrorMessage(msg) { waitUntil(timeout: 1) { done in NSThread.sleepForTimeInterval(5.0) done() } } } func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() { // Currently we are unable to catch Objective-C exceptions when built by the Swift Package Manager #if !SWIFT_PACKAGE let referenceLine = #line + 9 var msg = "Unexpected exception raised: Nested async expectations are not allowed " msg += "to avoid creating flaky tests." msg += "\n\n" msg += "The call to\n\t" msg += "expect(...).toEventually(...) at \(#file):\(referenceLine + 7)\n" msg += "triggered this exception because\n\t" msg += "waitUntil(...) at \(#file):\(referenceLine + 1)\n" msg += "is currently managing the main run loop." failsWithErrorMessage(msg) { // reference line waitUntil(timeout: 2.0) { done in var protected: Int = 0 dispatch_async(dispatch_get_main_queue()) { protected = 1 } expect(protected).toEventually(equal(1)) done() } } #endif } func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() { #if !SWIFT_PACKAGE waitUntil { done in deferToMainQueue { done() expect { done() }.to(raiseException(named: "InvalidNimbleAPIUsage")) } } #endif } func testWaitUntilMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { waitUntil { done in done() } }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } func testToEventuallyMustBeInMainThread() { #if !SWIFT_PACKAGE var executedAsyncBlock: Bool = false dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { expect { expect(1).toEventually(equal(2)) }.to(raiseException(named: "InvalidNimbleAPIUsage")) executedAsyncBlock = true } expect(executedAsyncBlock).toEventually(beTruthy()) #endif } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift ================================================ import Foundation class ObjectWithLazyProperty { init() {} lazy var value: String = "hello" lazy var anotherValue: String = { return "world" }() } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift ================================================ import Foundation import XCTest // XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available // in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, // we ensure that the tests fail in Xcode if they haven't been configured properly to // be run with the open-source tools. #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) public protocol XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { get } } extension XCTestCase { override public func tearDown() { if let provider = self as? XCTestCaseProvider { provider.assertContainsTest(invocation!.selector.description) } super.tearDown() } } extension XCTestCaseProvider { private func assertContainsTest(name: String) { let contains = self.allTests.contains({ test in return test.0 == name }) XCTAssert(contains, "Test '\(name)' is missing from the allTests array") } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/utils.swift ================================================ import Foundation @testable import Nimble import XCTest func failsWithErrorMessage(messages: [String], file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) { var filePath = file var lineNumber = line let recorder = AssertionRecorder() withAssertionHandler(recorder, closure: closure) for msg in messages { var lastFailure: AssertionRecord? var foundFailureMessage = false for assertion in recorder.assertions { lastFailure = assertion if assertion.message.stringValue == msg { foundFailureMessage = true break } } if foundFailureMessage { continue } if preferOriginalSourceLocation { if let failure = lastFailure { filePath = failure.location.file lineNumber = failure.location.line } } let message: String if let lastFailure = lastFailure { message = "Got failure message: \"\(lastFailure.message.stringValue)\", but expected \"\(msg)\"" } else { message = "expected failure message, but got none" } NimbleAssertionHandler.assert(false, message: FailureMessage(stringValue: message), location: SourceLocation(file: filePath, line: lineNumber)) } } func failsWithErrorMessage(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { return failsWithErrorMessage( [message], file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure ) } func failsWithErrorMessageForNil(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { failsWithErrorMessage("\(message) (use beNil() to match nils)", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure) } #if _runtime(_ObjC) func deferToMainQueue(action: () -> Void) { dispatch_async(dispatch_get_main_queue()) { NSThread.sleepForTimeInterval(0.01) action() } } #endif public class NimbleHelper : NSObject { public class func expectFailureMessage(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessages(messages: [NSString], block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessage(messages.map({ String($0) }), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } public class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: FileString, line: UInt) { failsWithErrorMessageForNil(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) } } extension NSDate { convenience init(dateTimeString:String) { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") let date = dateFormatter.dateFromString(dateTimeString)! self.init(timeInterval:0, sinceDate:date) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/AllPassTest.swift ================================================ import XCTest import Nimble class AllPassTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAllPassArray", testAllPassArray), ("testAllPassMatcher", testAllPassMatcher), ("testAllPassCollectionsWithOptionalsDontWork", testAllPassCollectionsWithOptionalsDontWork), ("testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer", testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer), ("testAllPassSet", testAllPassSet), ("testAllPassWithNilAsExpectedValue", testAllPassWithNilAsExpectedValue), ] } func testAllPassArray() { expect([1,2,3,4]).to(allPass({$0 < 5})) expect([1,2,3,4]).toNot(allPass({$0 > 5})) failsWithErrorMessage( "expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass({$0 < 3})) } failsWithErrorMessage("expected to not all pass a condition") { expect([1,2,3,4]).toNot(allPass({$0 < 5})) } failsWithErrorMessage( "expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass("be something", {$0 < 3})) } failsWithErrorMessage("expected to not all be something") { expect([1,2,3,4]).toNot(allPass("be something", {$0 < 5})) } } func testAllPassMatcher() { expect([1,2,3,4]).to(allPass(beLessThan(5))) expect([1,2,3,4]).toNot(allPass(beGreaterThan(5))) failsWithErrorMessage( "expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>") { expect([1,2,3,4]).to(allPass(beLessThan(3))) } failsWithErrorMessage("expected to not all be less than <5>") { expect([1,2,3,4]).toNot(allPass(beLessThan(5))) } } func testAllPassCollectionsWithOptionalsDontWork() { failsWithErrorMessage("expected to all be nil, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass(beNil())) } failsWithErrorMessage("expected to all pass a condition, but failed first at element in <[nil, nil, nil]>") { expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil})) } } func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() { expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil})) expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil})) expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1})) expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1})) expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4})) expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3})) expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3})) } func testAllPassSet() { expect(Set([1,2,3,4])).to(allPass({$0 < 5})) expect(Set([1,2,3,4])).toNot(allPass({$0 > 5})) failsWithErrorMessage("expected to not all pass a condition") { expect(Set([1,2,3,4])).toNot(allPass({$0 < 5})) } failsWithErrorMessage("expected to not all be something") { expect(Set([1,2,3,4])).toNot(allPass("be something", {$0 < 5})) } } func testAllPassWithNilAsExpectedValue() { failsWithErrorMessageForNil("expected to all pass") { expect(nil as [Int]?).to(allPass(beLessThan(5))) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class TestNull : NSNull {} class BeAKindOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(TestNull()).to(beAKindOf(NSNull)) expect(NSObject()).to(beAKindOf(NSObject)) expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be a kind of NSNull, got ") { expect(nil as NSNull?).toNot(beAKindOf(NSNull)) } failsWithErrorMessageForNil("expected to be a kind of NSString, got ") { expect(nil as NSString?).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to be a kind of NSString, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).to(beAKindOf(NSString)) } failsWithErrorMessage("expected to not be a kind of NSNumber, got <__NSCFNumber instance>") { expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAKindOf(Int)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAKindOf(String)) } failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAKindOf(TestEnum)) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift ================================================ import Foundation import XCTest import Nimble class BeAnInstanceOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatch", testPositiveMatch), ("testFailureMessages", testFailureMessages), ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), ] } func testPositiveMatch() { expect(NSNull()).to(beAnInstanceOf(NSNull)) expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate)) } func testFailureMessages() { failsWithErrorMessageForNil("expected to not be an instance of NSNull, got ") { expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull)) } failsWithErrorMessageForNil("expected to be an instance of NSString, got ") { expect(nil as NSString?).to(beAnInstanceOf(NSString)) } #if _runtime(_ObjC) let numberTypeName = "__NSCFNumber" #else let numberTypeName = "NSNumber" #endif failsWithErrorMessage("expected to be an instance of NSString, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString)) } failsWithErrorMessage("expected to not be an instance of NSNumber, got <\(numberTypeName) instance>") { expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber)) } } func testSwiftTypesFailureMessages() { enum TestEnum { case One, Two } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(1).to(beAnInstanceOf(Int)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect("test").to(beAnInstanceOf(String)) } failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" + " will automatically type check Swift-only types. This expectation is redundant.") { expect(TestEnum.One).to(beAnInstanceOf(TestEnum)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift ================================================ import Foundation import XCTest import Nimble class BeCloseToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeCloseTo", testBeCloseTo), ("testBeCloseToWithin", testBeCloseToWithin), ("testBeCloseToWithNSNumber", testBeCloseToWithNSNumber), ("testBeCloseToWithNSDate", testBeCloseToWithNSDate), ("testBeCloseToOperator", testBeCloseToOperator), ("testBeCloseToWithinOperator", testBeCloseToWithinOperator), ("testPlusMinusOperator", testPlusMinusOperator), ("testBeCloseToOperatorWithNSDate", testBeCloseToOperatorWithNSDate), ("testBeCloseToWithinOperatorWithNSDate", testBeCloseToWithinOperatorWithNSDate), ("testPlusMinusOperatorWithNSDate", testPlusMinusOperatorWithNSDate), ("testBeCloseToArray", testBeCloseToArray), ] } func testBeCloseTo() { expect(1.2).to(beCloseTo(1.2001)) expect(1.2 as CDouble).to(beCloseTo(1.2001)) expect(1.2 as Float).to(beCloseTo(1.2001)) failsWithErrorMessage("expected to not be close to <1.2001> (within 0.0001), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001)) } } func testBeCloseToWithin() { expect(1.2).to(beCloseTo(9.300, within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(1.2).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSNumber() { expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10)) expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10)) expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10)) failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0)) } } func testBeCloseToWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).to(beCloseTo(NSDate(dateTimeString: "2015-08-26 11:43:05"), within: 10)) failsWithErrorMessage("expected to not be close to <2015-08-26 11:43:00.0050> (within 0.004), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).toNot(beCloseTo(expectedDate, within: 0.004)) } #endif } func testBeCloseToOperator() { expect(1.2) ≈ 1.2001 expect(1.2 as CDouble) ≈ 1.2001 failsWithErrorMessage("expected to be close to <1.2002> (within 0.0001), got <1.2>") { expect(1.2) ≈ 1.2002 } } func testBeCloseToWithinOperator() { expect(1.2) ≈ (9.300, 10) expect(1.2) == (9.300, 10) failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ (1.0, 0.1) } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == (1.0, 0.1) } } func testPlusMinusOperator() { expect(1.2) ≈ 9.300 ± 10 expect(1.2) == 9.300 ± 10 failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) ≈ 1.0 ± 0.1 } failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { expect(1.2) == 1.0 ± 0.1 } } func testBeCloseToOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:00") failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.0001), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate } #endif } func testBeCloseToWithinOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (expectedDate, 0.006) } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (expectedDate, 0.006) } #endif } func testPlusMinusOperatorWithNSDate() { #if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate ± 0.006 } failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == expectedDate ± 0.006 } #endif } func testBeCloseToArray() { expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001] expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1)) failsWithErrorMessage("expected to be close to <[0, 1]> (each within 0.0001), got <[0, 1.1]>") { expect([0.0, 1.1]) ≈ [0.0, 1.0] } failsWithErrorMessage("expected to be close to <[0.2, 1.2]> (each within 0.1), got <[0, 1.1]>") { expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift ================================================ import Foundation import XCTest import Nimble class BeEmptyTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeEmptyPositive", testBeEmptyPositive), ("testBeEmptyNegative", testBeEmptyNegative), ] } func testBeEmptyPositive() { expect([] as [Int]).to(beEmpty()) expect([1]).toNot(beEmpty()) expect([] as [CInt]).to(beEmpty()) expect([1] as [CInt]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSDictionary() as? [Int:Int]).to(beEmpty()) expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty()) #endif expect(Dictionary()).to(beEmpty()) expect(["hi": 1]).toNot(beEmpty()) #if _runtime(_ObjC) expect(NSArray() as? [Int]).to(beEmpty()) expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty()) #endif expect(NSSet()).to(beEmpty()) expect(NSSet(array: [NSNumber(integer: 1)])).toNot(beEmpty()) expect(NSIndexSet()).to(beEmpty()) expect(NSIndexSet(index: 1)).toNot(beEmpty()) expect(NSString()).to(beEmpty()) expect(NSString(string: "hello")).toNot(beEmpty()) expect("").to(beEmpty()) expect("foo").toNot(beEmpty()) } func testBeEmptyNegative() { failsWithErrorMessageForNil("expected to be empty, got ") { expect(nil as NSString?).to(beEmpty()) } failsWithErrorMessageForNil("expected to not be empty, got ") { expect(nil as [CInt]?).toNot(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSArray()).toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got <[1]>") { expect([1]).to(beEmpty()) } failsWithErrorMessage("expected to not be empty, got <{()}>") { expect(NSSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <{(1)}>") { expect(NSSet(object: NSNumber(int: 1))).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <()>") { expect(NSIndexSet()).toNot(beEmpty()); } failsWithErrorMessage("expected to be empty, got <(1)>") { expect(NSIndexSet(index: 1)).to(beEmpty()); } failsWithErrorMessage("expected to not be empty, got <>") { expect("").toNot(beEmpty()) } failsWithErrorMessage("expected to be empty, got ") { expect("foo").to(beEmpty()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThanOrEqualTo", testGreaterThanOrEqualTo), ("testGreaterThanOrEqualToOperator", testGreaterThanOrEqualToOperator), ] } func testGreaterThanOrEqualTo() { expect(10).to(beGreaterThanOrEqualTo(10)) expect(10).to(beGreaterThanOrEqualTo(2)) expect(1).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2)) expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2))) #if _runtime(_ObjC) expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0))) #endif failsWithErrorMessage("expected to be greater than or equal to <2>, got <0>") { expect(0).to(beGreaterThanOrEqualTo(2)) return } failsWithErrorMessage("expected to not be greater than or equal to <1>, got <1>") { expect(1).toNot(beGreaterThanOrEqualTo(1)) return } failsWithErrorMessageForNil("expected to be greater than or equal to <-2>, got ") { expect(nil as Int?).to(beGreaterThanOrEqualTo(-2)) } failsWithErrorMessageForNil("expected to not be greater than or equal to <1>, got ") { expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1)) } } func testGreaterThanOrEqualToOperator() { expect(0) >= 0 expect(1) >= 0 expect(NSNumber(int:1)) >= 1 expect(NSNumber(int:1)) >= NSNumber(int:1) failsWithErrorMessage("expected to be greater than or equal to <2>, got <1>") { expect(1) >= 2 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeGreaterThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testGreaterThan", testGreaterThan), ("testGreaterThanOperator", testGreaterThanOperator), ] } func testGreaterThan() { expect(10).to(beGreaterThan(2)) expect(1).toNot(beGreaterThan(2)) #if _runtime(_ObjC) expect(NSNumber(int:3)).to(beGreaterThan(2)) #endif expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2))) failsWithErrorMessage("expected to be greater than <2>, got <0>") { expect(0).to(beGreaterThan(2)) } failsWithErrorMessage("expected to not be greater than <0>, got <1>") { expect(1).toNot(beGreaterThan(0)) } failsWithErrorMessageForNil("expected to be greater than <-2>, got ") { expect(nil as Int?).to(beGreaterThan(-2)) } failsWithErrorMessageForNil("expected to not be greater than <0>, got ") { expect(nil as Int?).toNot(beGreaterThan(0)) } } func testGreaterThanOperator() { expect(1) > 0 expect(NSNumber(int:1)) > NSNumber(int:0) #if _runtime(_ObjC) expect(NSNumber(int:1)) > 0 #endif failsWithErrorMessage("expected to be greater than <2>, got <1>") { expect(1) > 2 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift ================================================ import Foundation import XCTest import Nimble class BeIdenticalToObjectTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testFailsOnNils", testFailsOnNils), ("testOperators", testOperators), ] } private class BeIdenticalToObjectTester {} private let testObjectA = BeIdenticalToObjectTester() private let testObjectB = BeIdenticalToObjectTester() func testBeIdenticalToPositive() { expect(self.testObjectA).to(beIdenticalTo(testObjectA)) } func testBeIdenticalToNegative() { expect(self.testObjectA).toNot(beIdenticalTo(testObjectB)) } func testBeIdenticalToPositiveMessage() { let message = String(NSString(format: "expected to be identical to <%p>, got <%p>", unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).to(beIdenticalTo(self.testObjectB)) } } func testBeIdenticalToNegativeMessage() { let message = String(NSString(format: "expected to not be identical to <%p>, got <%p>", unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessage(message) { expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA)) } } func testFailsOnNils() { let message1 = String(NSString(format: "expected to be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message1) { expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA)) } let message2 = String(NSString(format: "expected to not be identical to <%p>, got nil", unsafeBitCast(testObjectA, Int.self))) failsWithErrorMessageForNil(message2) { expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA)) } } func testOperators() { expect(self.testObjectA) === testObjectA expect(self.testObjectA) !== testObjectB } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift ================================================ import Foundation import XCTest @testable import Nimble class BeIdenticalToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeIdenticalToPositive", testBeIdenticalToPositive), ("testBeIdenticalToNegative", testBeIdenticalToNegative), ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), ("testOperators", testOperators), ("testBeAlias", testBeAlias) ] } func testBeIdenticalToPositive() { let value = NSDate() expect(value).to(beIdenticalTo(value)) } func testBeIdenticalToNegative() { expect(NSNumber(integer:1)).toNot(beIdenticalTo(NSString(string: "yo"))) expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) } func testBeIdenticalToPositiveMessage() { let num1 = NSNumber(integer:1) let num2 = NSNumber(integer:2) let message = "expected to be identical to \(identityAsString(num2)), got \(identityAsString(num1))" failsWithErrorMessage(message) { expect(num1).to(beIdenticalTo(num2)) } } func testBeIdenticalToNegativeMessage() { let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(beIdenticalTo(value2)) } } func testOperators() { let value = NSDate() expect(value) === value expect(NSNumber(integer:1)) !== NSNumber(integer:2) } func testBeAlias() { let value = NSDate() expect(value).to(be(value)) expect(NSNumber(integer:1)).toNot(be(NSString(stringLiteral: "turtles"))) #if _runtime(_ObjC) expect([1]).toNot(be([1])) #else expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) #endif let value1 = NSArray(array: []) let value2 = NSArray(array: []) let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" failsWithErrorMessage(message) { expect(value1).toNot(be(value2)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanOrEqualToTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThanOrEqualTo", testLessThanOrEqualTo), ("testLessThanOrEqualToOperator", testLessThanOrEqualToOperator), ] } func testLessThanOrEqualTo() { expect(10).to(beLessThanOrEqualTo(10)) expect(2).to(beLessThanOrEqualTo(10)) expect(2).toNot(beLessThanOrEqualTo(1)) expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10)) expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1)) #if _runtime(_ObjC) expect(2).to(beLessThanOrEqualTo(NSNumber(int:10))) expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1))) #endif failsWithErrorMessage("expected to be less than or equal to <0>, got <2>") { expect(2).to(beLessThanOrEqualTo(0)) return } failsWithErrorMessage("expected to not be less than or equal to <0>, got <0>") { expect(0).toNot(beLessThanOrEqualTo(0)) return } failsWithErrorMessageForNil("expected to be less than or equal to <2>, got ") { expect(nil as Int?).to(beLessThanOrEqualTo(2)) return } failsWithErrorMessageForNil("expected to not be less than or equal to <-2>, got ") { expect(nil as Int?).toNot(beLessThanOrEqualTo(-2)) return } } func testLessThanOrEqualToOperator() { expect(0) <= 1 expect(1) <= 1 failsWithErrorMessage("expected to be less than or equal to <1>, got <2>") { expect(2) <= 1 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift ================================================ import Foundation import XCTest import Nimble class BeLessThanTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testLessThan", testLessThan), ("testLessThanOperator", testLessThanOperator), ] } func testLessThan() { expect(2).to(beLessThan(10)) expect(2).toNot(beLessThan(1)) #if _runtime(_ObjC) expect(NSNumber(integer:2)).to(beLessThan(10)) expect(NSNumber(integer:2)).toNot(beLessThan(1)) expect(2).to(beLessThan(NSNumber(integer:10))) expect(2).toNot(beLessThan(NSNumber(integer:1))) #endif failsWithErrorMessage("expected to be less than <0>, got <2>") { expect(2).to(beLessThan(0)) } failsWithErrorMessage("expected to not be less than <1>, got <0>") { expect(0).toNot(beLessThan(1)) } failsWithErrorMessageForNil("expected to be less than <2>, got ") { expect(nil as Int?).to(beLessThan(2)) } failsWithErrorMessageForNil("expected to not be less than <-1>, got ") { expect(nil as Int?).toNot(beLessThan(-1)) } } func testLessThanOperator() { expect(0) < 1 #if _runtime(_ObjC) expect(NSNumber(int:0)) < 1 #endif failsWithErrorMessage("expected to be less than <1>, got <2>") { expect(2) < 1 return } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift ================================================ import XCTest import Nimble enum ConvertsToBool : BooleanType, CustomStringConvertible { case TrueLike, FalseLike var boolValue : Bool { switch self { case .TrueLike: return true case .FalseLike: return false } } var description : String { switch self { case .TrueLike: return "TrueLike" case .FalseLike: return "FalseLike" } } } class BeTruthyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNonNilTypes", testShouldMatchNonNilTypes), ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchNilTypes", testShouldNotMatchNilTypes), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ("testShouldMatchBoolConvertibleTypesThatConvertToTrue", testShouldMatchBoolConvertibleTypesThatConvertToTrue), ("testShouldNotMatchBoolConvertibleTypesThatConvertToFalse", testShouldNotMatchBoolConvertibleTypesThatConvertToFalse), ] } func testShouldMatchNonNilTypes() { expect(true as Bool?).to(beTruthy()) expect(1 as Int?).to(beTruthy()) } func testShouldMatchTrue() { expect(true).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(true).toNot(beTruthy()) } } func testShouldNotMatchNilTypes() { expect(false as Bool?).toNot(beTruthy()) expect(nil as Bool?).toNot(beTruthy()) expect(nil as Int?).toNot(beTruthy()) } func testShouldNotMatchFalse() { expect(false).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(false).to(beTruthy()) } } func testShouldNotMatchNilBools() { expect(nil as Bool?).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(nil as Bool?).to(beTruthy()) } } func testShouldMatchBoolConvertibleTypesThatConvertToTrue() { expect(ConvertsToBool.TrueLike).to(beTruthy()) failsWithErrorMessage("expected to not be truthy, got ") { expect(ConvertsToBool.TrueLike).toNot(beTruthy()) } } func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() { expect(ConvertsToBool.FalseLike).toNot(beTruthy()) failsWithErrorMessage("expected to be truthy, got ") { expect(ConvertsToBool.FalseLike).to(beTruthy()) } } } class BeTrueTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchTrue", testShouldMatchTrue), ("testShouldNotMatchFalse", testShouldNotMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldMatchTrue() { expect(true).to(beTrue()) failsWithErrorMessage("expected to not be true, got ") { expect(true).toNot(beTrue()) } } func testShouldNotMatchFalse() { expect(false).toNot(beTrue()) failsWithErrorMessage("expected to be true, got ") { expect(false).to(beTrue()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to not be true, got ") { expect(nil as Bool?).toNot(beTrue()) } failsWithErrorMessageForNil("expected to be true, got ") { expect(nil as Bool?).to(beTrue()) } } } class BeFalsyTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldMatchNilTypes", testShouldMatchNilTypes), ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldNotMatchNonNilTypes", testShouldNotMatchNonNilTypes), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldMatchNilBools", testShouldMatchNilBools), ] } func testShouldMatchNilTypes() { expect(false as Bool?).to(beFalsy()) expect(nil as Bool?).to(beFalsy()) expect(nil as Int?).to(beFalsy()) } func testShouldNotMatchTrue() { expect(true).toNot(beFalsy()) failsWithErrorMessage("expected to be falsy, got ") { expect(true).to(beFalsy()) } } func testShouldNotMatchNonNilTypes() { expect(true as Bool?).toNot(beFalsy()) expect(1 as Int?).toNot(beFalsy()) } func testShouldMatchFalse() { expect(false).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(false).toNot(beFalsy()) } } func testShouldMatchNilBools() { expect(nil as Bool?).to(beFalsy()) failsWithErrorMessage("expected to not be falsy, got ") { expect(nil as Bool?).toNot(beFalsy()) } } } class BeFalseTest : XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testShouldNotMatchTrue", testShouldNotMatchTrue), ("testShouldMatchFalse", testShouldMatchFalse), ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), ] } func testShouldNotMatchTrue() { expect(true).toNot(beFalse()) failsWithErrorMessage("expected to be false, got ") { expect(true).to(beFalse()) } } func testShouldMatchFalse() { expect(false).to(beFalse()) failsWithErrorMessage("expected to not be false, got ") { expect(false).toNot(beFalse()) } } func testShouldNotMatchNilBools() { failsWithErrorMessageForNil("expected to be false, got ") { expect(nil as Bool?).to(beFalse()) } failsWithErrorMessageForNil("expected to not be false, got ") { expect(nil as Bool?).toNot(beFalse()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeNilTest.swift ================================================ import XCTest import Nimble class BeNilTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeNil", testBeNil), ] } func producesNil() -> Array? { return nil } func testBeNil() { expect(nil as Int?).to(beNil()) expect(1 as Int?).toNot(beNil()) expect(self.producesNil()).to(beNil()) failsWithErrorMessage("expected to not be nil, got ") { expect(nil as Int?).toNot(beNil()) } failsWithErrorMessage("expected to be nil, got <1>") { expect(1 as Int?).to(beNil()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift ================================================ import XCTest import Nimble class BeVoidTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeVoid", testBeVoid), ] } func testBeVoid() { expect(()).to(beVoid()) expect(() as ()?).to(beVoid()) expect(nil as ()?).toNot(beVoid()) expect(()) == () expect(() as ()?) == () expect(nil as ()?) != () failsWithErrorMessage("expected to not be void, got <()>") { expect(()).toNot(beVoid()) } failsWithErrorMessage("expected to not be void, got <()>") { expect(() as ()?).toNot(beVoid()) } failsWithErrorMessage("expected to be void, got ") { expect(nil as ()?).to(beVoid()) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift ================================================ import Foundation import XCTest import Nimble class BeginWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testNegativeMatches", testNegativeMatches), ] } func testPositiveMatches() { expect([1, 2, 3]).to(beginWith(1)) expect([1, 2, 3]).toNot(beginWith(2)) expect("foobar").to(beginWith("foo")) expect("foobar").toNot(beginWith("oo")) expect(NSString(string: "foobar").description).to(beginWith("foo")) expect(NSString(string: "foobar").description).toNot(beginWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(beginWith("a")) expect(NSArray(array: ["a", "b"])).toNot(beginWith("b")) #endif } func testNegativeMatches() { failsWithErrorMessageForNil("expected to begin with , got ") { expect(nil as NSArray?).to(beginWith(NSString(string: "b"))) } failsWithErrorMessageForNil("expected to not begin with , got ") { expect(nil as NSArray?).toNot(beginWith(NSString(string: "b"))) } failsWithErrorMessage("expected to begin with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(beginWith(2)) } failsWithErrorMessage("expected to not begin with <1>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(beginWith(1)) } failsWithErrorMessage("expected to begin with , got ") { expect("batman").to(beginWith("atm")) } failsWithErrorMessage("expected to not begin with , got ") { expect("batman").toNot(beginWith("bat")) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ContainTest.swift ================================================ import Foundation import XCTest import Nimble class ContainTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testContain", testContain), ("testContainSubstring", testContainSubstring), ("testContainObjCSubstring", testContainObjCSubstring), ("testVariadicArguments", testVariadicArguments), ("testCollectionArguments", testCollectionArguments), ] } func testContain() { expect([1, 2, 3]).to(contain(1)) expect([1, 2, 3] as [CInt]).to(contain(1 as CInt)) expect([1, 2, 3] as Array).to(contain(1 as CInt)) expect(["foo", "bar", "baz"]).to(contain("baz")) expect([1, 2, 3]).toNot(contain(4)) expect(["foo", "bar", "baz"]).toNot(contain("ba")) #if _runtime(_ObjC) expect(NSArray(array: ["a"])).to(contain(NSString(string: "a"))) expect(NSArray(array: ["a"])).toNot(contain(NSString(string:"b"))) expect(NSArray(object: 1) as NSArray?).to(contain(1)) #endif failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("b")) } failsWithErrorMessageForNil("expected to contain , got ") { expect(nil as [String]?).to(contain("bar")) } failsWithErrorMessageForNil("expected to not contain , got ") { expect(nil as [String]?).toNot(contain("b")) } } func testContainSubstring() { expect("foo").to(contain("o")) expect("foo").to(contain("oo")) expect("foo").toNot(contain("z")) expect("foo").toNot(contain("zz")) failsWithErrorMessage("expected to contain , got ") { expect("foo").to(contain("bar")) } failsWithErrorMessage("expected to not contain , got ") { expect("foo").toNot(contain("oo")) } } func testContainObjCSubstring() { let str = NSString(string: "foo") expect(str).to(contain(NSString(string: "o"))) expect(str).to(contain(NSString(string: "oo"))) expect(str).toNot(contain(NSString(string: "z"))) expect(str).toNot(contain(NSString(string: "zz"))) } func testVariadicArguments() { expect([1, 2, 3]).to(contain(1, 2)) expect([1, 2, 3]).toNot(contain(1, 4)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain("a", "bar")) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain("bar", "b")) } } func testCollectionArguments() { expect([1, 2, 3]).to(contain([1, 2])) expect([1, 2, 3]).toNot(contain([1, 4])) let collection = Array(1...10) let slice = Array(collection[3...5]) expect(collection).to(contain(slice)) failsWithErrorMessage("expected to contain , got <[a, b, c]>") { expect(["a", "b", "c"]).to(contain(["a", "bar"])) } failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { expect(["a", "b", "c"]).toNot(contain(["bar", "b"])) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EndWithTest.swift ================================================ import Foundation import XCTest import Nimble class EndWithTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEndWithPositives", testEndWithPositives), ("testEndWithNegatives", testEndWithNegatives), ] } func testEndWithPositives() { expect([1, 2, 3]).to(endWith(3)) expect([1, 2, 3]).toNot(endWith(2)) expect("foobar").to(endWith("bar")) expect("foobar").toNot(endWith("oo")) expect(NSString(string: "foobar").description).to(endWith("bar")) expect(NSString(string: "foobar").description).toNot(endWith("oo")) #if _runtime(_ObjC) expect(NSArray(array: ["a", "b"])).to(endWith("b")) expect(NSArray(array: ["a", "b"])).toNot(endWith("a")) #endif } func testEndWithNegatives() { failsWithErrorMessageForNil("expected to end with <2>, got ") { expect(nil as [Int]?).to(endWith(2)) } failsWithErrorMessageForNil("expected to not end with <2>, got ") { expect(nil as [Int]?).toNot(endWith(2)) } failsWithErrorMessage("expected to end with <2>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(endWith(2)) } failsWithErrorMessage("expected to not end with <3>, got <[1, 2, 3]>") { expect([1, 2, 3]).toNot(endWith(3)) } failsWithErrorMessage("expected to end with , got ") { expect("batman").to(endWith("atm")) } failsWithErrorMessage("expected to not end with , got ") { expect("batman").toNot(endWith("man")) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EqualTest.swift ================================================ import Foundation import XCTest import Nimble class EqualTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testEquality", testEquality), ("testArrayEquality", testArrayEquality), ("testSetEquality", testSetEquality), ("testDoesNotMatchNils", testDoesNotMatchNils), ("testDictionaryEquality", testDictionaryEquality), ("testDataEquality", testDataEquality), ("testNSObjectEquality", testNSObjectEquality), ("testOperatorEquality", testOperatorEquality), ("testOperatorEqualityWithArrays", testOperatorEqualityWithArrays), ("testOperatorEqualityWithDictionaries", testOperatorEqualityWithDictionaries), ("testOptionalEquality", testOptionalEquality), ("testArrayOfOptionalsEquality", testArrayOfOptionalsEquality), ("testDictionariesWithDifferentSequences", testDictionariesWithDifferentSequences), ] } func testEquality() { expect(1 as CInt).to(equal(1 as CInt)) expect(1 as CInt).to(equal(1)) expect(1).to(equal(1)) expect("hello").to(equal("hello")) expect("hello").toNot(equal("world")) expect { 1 }.to(equal(1)) failsWithErrorMessage("expected to equal , got ") { expect("hello").to(equal("world")) } failsWithErrorMessage("expected to not equal , got ") { expect("hello").toNot(equal("hello")) } } func testArrayEquality() { expect([1, 2, 3]).to(equal([1, 2, 3])) expect([1, 2, 3]).toNot(equal([1, 2])) expect([1, 2, 3]).toNot(equal([1, 2, 4])) let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] expect(array1).to(equal(array2)) expect(array1).to(equal([1, 2, 3])) expect(array1).toNot(equal([1, 2] as Array)) #if _runtime(_ObjC) expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3]))) #endif failsWithErrorMessage("expected to equal <[1, 2]>, got <[1, 2, 3]>") { expect([1, 2, 3]).to(equal([1, 2])) } } func testSetEquality() { expect(Set([1, 2])).to(equal(Set([1, 2]))) expect(Set()).to(equal(Set())) expect(Set()) == Set() expect(Set([1, 2])) != Set() failsWithErrorMessageForNil("expected to equal <[1, 2]>, got ") { expect(nil as Set?).to(equal(Set([1, 2]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>") { expect(Set([2, 3])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>") { expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3]))) } failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { expect(Set([2, 3, 4])) == Set([1, 2, 3]) } failsWithErrorMessage("expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>") { expect(Set([1, 2, 3])) != Set([1, 2, 3]) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as String?).to(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect("foo").toNot(equal(nil as String?)) } failsWithErrorMessageForNil("expected to not equal , got ") { expect(nil as String?).toNot(equal("bar")) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int]?).to(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1]>, got ") { expect(nil as [Int]?).toNot(equal([1])) } failsWithErrorMessageForNil("expected to not equal , got <[1]>") { expect([1]).toNot(equal(nil as [Int]?)) } failsWithErrorMessageForNil("expected to equal , got ") { expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?)) } failsWithErrorMessageForNil("expected to not equal <[1: 1]>, got ") { expect(nil as [Int: Int]?).toNot(equal([1: 1])) } failsWithErrorMessageForNil("expected to not equal , got <[1: 1]>") { expect([1: 1]).toNot(equal(nil as [Int: Int]?)) } } func testDictionaryEquality() { expect(["foo": "bar"]).to(equal(["foo": "bar"])) expect(["foo": "bar"]).toNot(equal(["foo": "baz"])) let actual = ["foo": "bar"] let expected = ["foo": "bar"] let unexpected = ["foo": "baz"] expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if _runtime(_ObjC) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(["foo": "bar"])) expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(expected)) #endif } func testDataEquality() { let actual = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let expected = "foobar".dataUsingEncoding(NSUTF8StringEncoding) let unexpected = "foobarfoo".dataUsingEncoding(NSUTF8StringEncoding) expect(actual).to(equal(expected)) expect(actual).toNot(equal(unexpected)) #if os(Linux) // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11) let expectedErrorMessage = "expected to equal >, got >" #else let expectedErrorMessage = "expected to equal >," + " got >" #endif failsWithErrorMessage(expectedErrorMessage) { expect(actual).to(equal(unexpected)) } } func testNSObjectEquality() { expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1))) expect(NSNumber(integer:1)) == NSNumber(integer:1) expect(NSNumber(integer:1)) != NSNumber(integer:2) expect { NSNumber(integer:1) }.to(equal(1)) } func testOperatorEquality() { expect("foo") == "foo" expect("foo") != "bar" failsWithErrorMessage("expected to equal , got ") { expect("hello") == "world" return } failsWithErrorMessage("expected to not equal , got ") { expect("hello") != "hello" return } } func testOperatorEqualityWithArrays() { let array1: Array = [1, 2, 3] let array2: Array = [1, 2, 3] let array3: Array = [1, 2] expect(array1) == array2 expect(array1) != array3 } func testOperatorEqualityWithDictionaries() { let dict1 = ["foo": "bar"] let dict2 = ["foo": "bar"] let dict3 = ["foo": "baz"] expect(dict1) == dict2 expect(dict1) != dict3 } func testOptionalEquality() { expect(1 as CInt?).to(equal(1)) expect(1 as CInt?).to(equal(1 as CInt?)) expect(1).toNot(equal(nil)) } func testArrayOfOptionalsEquality() { let array1: Array = [1, nil, 3] let array2: Array = [nil, 2, 3] let array3: Array = [1, nil, 3] expect(array1).toNot(equal(array2)) expect(array1).to(equal(array3)) expect(array2).toNot(equal(array3)) let allNils1: Array = [nil, nil, nil, nil] let allNils2: Array = [nil, nil, nil, nil] let notReallyAllNils: Array = [nil, nil, nil, "turtles"] expect(allNils1).to(equal(allNils2)) expect(allNils1).toNot(equal(notReallyAllNils)) let noNils1: Array = [1, 2, 3, 4, 5] let noNils2: Array = [1, 3, 5, 7, 9] expect(noNils1).toNot(equal(noNils2)) failsWithErrorMessage("expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>") { let arrayOfOptionalInts: Array = [nil, 2] let anotherArrayOfOptionalInts: Array = [1, nil] expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts)) return } } func testDictionariesWithDifferentSequences() { // see: https://github.com/Quick/Nimble/issues/61 // these dictionaries generate different orderings of sequences. let result = ["how":1, "think":1, "didnt":2, "because":1, "interesting":1, "always":1, "right":1, "such":1, "to":3, "say":1, "cool":1, "you":1, "weather":3, "be":1, "went":1, "was":2, "sometimes":1, "and":3, "mind":1, "rain":1, "whole":1, "everything":1, "weather.":1, "down":1, "kind":1, "mood.":1, "it":2, "everyday":1, "might":1, "more":1, "have":2, "person":1, "could":1, "tenth":2, "night":1, "write":1, "Youd":1, "affects":1, "of":3, "Who":1, "us":1, "an":1, "I":4, "my":1, "much":2, "wrong.":1, "peacefully.":1, "amazing":3, "would":4, "just":1, "grade.":1, "Its":2, "The":2, "had":1, "that":1, "the":5, "best":1, "but":1, "essay":1, "for":1, "summer":2, "your":1, "grade":1, "vary":1, "pretty":1, "at":1, "rain.":1, "about":1, "allow":1, "thought":1, "in":1, "sleep":1, "a":1, "hot":1, "really":1, "beach":1, "life.":1, "we":1, "although":1] let storyCount = ["The":2, "summer":2, "of":3, "tenth":2, "grade":1, "was":2, "the":5, "best":1, "my":1, "life.":1, "I":4, "went":1, "to":3, "beach":1, "everyday":1, "and":3, "we":1, "had":1, "amazing":3, "weather.":1, "weather":3, "didnt":2, "really":1, "vary":1, "much":2, "always":1, "pretty":1, "hot":1, "although":1, "sometimes":1, "at":1, "night":1, "it":2, "would":4, "rain.":1, "mind":1, "rain":1, "because":1, "cool":1, "everything":1, "down":1, "allow":1, "us":1, "sleep":1, "peacefully.":1, "Its":2, "how":1, "affects":1, "your":1, "mood.":1, "Who":1, "have":2, "thought":1, "that":1, "could":1, "write":1, "a":1, "whole":1, "essay":1, "just":1, "about":1, "in":1, "grade.":1, "kind":1, "right":1, "Youd":1, "think":1, "for":1, "such":1, "an":1, "interesting":1, "person":1, "might":1, "more":1, "say":1, "but":1, "you":1, "be":1, "wrong.":1] expect(result).to(equal(storyCount)) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift ================================================ import XCTest import Nimble class HaveCountTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testHaveCountForArray", testHaveCountForArray), ("testHaveCountForDictionary", testHaveCountForDictionary), ("testHaveCountForSet", testHaveCountForSet), ] } func testHaveCountForArray() { expect([1, 2, 3]).to(haveCount(3)) expect([1, 2, 3]).notTo(haveCount(1)) failsWithErrorMessage("expected to have Array with count 1, got 3\nActual Value: [1, 2, 3]") { expect([1, 2, 3]).to(haveCount(1)) } failsWithErrorMessage("expected to not have Array with count 3, got 3\nActual Value: [1, 2, 3]") { expect([1, 2, 3]).notTo(haveCount(3)) } } func testHaveCountForDictionary() { let dictionary = ["1":1, "2":2, "3":3] expect(dictionary).to(haveCount(3)) expect(dictionary).notTo(haveCount(1)) failsWithErrorMessage("expected to have Dictionary with count 1, got 3\nActual Value: \(stringify(dictionary))") { expect(dictionary).to(haveCount(1)) } failsWithErrorMessage("expected to not have Dictionary with count 3, got 3" + "\nActual Value: \(stringify(dictionary))") { expect(dictionary).notTo(haveCount(3)) } } func testHaveCountForSet() { let set = Set([1, 2, 3]) expect(set).to(haveCount(3)) expect(set).notTo(haveCount(1)) failsWithErrorMessage("expected to have Set with count 1, got 3" + "\nActual Value: \(stringify(set))") { expect(set).to(haveCount(1)) } failsWithErrorMessage("expected to not have Set with count 3, got 3" + "\nActual Value: \(stringify(set))") { expect(set).notTo(haveCount(3)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift ================================================ import Foundation import XCTest import Nimble class MatchErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchErrorPositive", testMatchErrorPositive), ("testMatchErrorNegative", testMatchErrorNegative), ("testMatchNSErrorPositive", testMatchNSErrorPositive), ("testMatchNSErrorNegative", testMatchNSErrorNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testDoesNotMatchNils", testDoesNotMatchNils), ] } func testMatchErrorPositive() { expect(Error.Laugh).to(matchError(Error.Laugh)) expect(Error.Laugh).to(matchError(Error.self)) expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 1))) expect(Error.Laugh as ErrorType).to(matchError(Error.Laugh)) } func testMatchErrorNegative() { expect(Error.Laugh).toNot(matchError(Error.Cry)) expect(Error.Laugh as ErrorType).toNot(matchError(Error.Cry)) } func testMatchNSErrorPositive() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 0, userInfo: nil) expect(error1).to(matchError(error2)) } func testMatchNSErrorNegative() { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).toNot(matchError(error2)) } func testMatchPositiveMessage() { failsWithErrorMessage("expected to match error , got ") { expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 2))) } failsWithErrorMessage("expected to match error , got ") { expect(Error.Laugh).to(matchError(Error.Cry)) } failsWithErrorMessage("expected to match error , got ") { expect(CustomDebugStringConvertibleError.A).to(matchError(CustomDebugStringConvertibleError.B)) } failsWithErrorMessage("expected to match error , got ") { let error1 = NSError(domain: "err", code: 0, userInfo: nil) let error2 = NSError(domain: "err", code: 1, userInfo: nil) expect(error1).to(matchError(error2)) } } func testMatchNegativeMessage() { failsWithErrorMessage("expected to not match error , got ") { expect(Error.Laugh).toNot(matchError(Error.Laugh)) } } func testDoesNotMatchNils() { failsWithErrorMessageForNil("expected to match error , got no error") { expect(nil as ErrorType?).to(matchError(Error.Laugh)) } failsWithErrorMessageForNil("expected to not match error , got no error") { expect(nil as ErrorType?).toNot(matchError(Error.Laugh)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) class MatchTest:XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testMatchPositive", testMatchPositive), ("testMatchNegative", testMatchNegative), ("testMatchPositiveMessage", testMatchPositiveMessage), ("testMatchNegativeMessage", testMatchNegativeMessage), ("testMatchNils", testMatchNils), ] } func testMatchPositive() { expect("11:14").to(match("\\d{2}:\\d{2}")) } func testMatchNegative() { expect("hello").toNot(match("\\d{2}:\\d{2}")) } func testMatchPositiveMessage() { let message = "expected to match <\\d{2}:\\d{2}>, got " failsWithErrorMessage(message) { expect("hello").to(match("\\d{2}:\\d{2}")) } } func testMatchNegativeMessage() { let message = "expected to not match <\\d{2}:\\d{2}>, got <11:14>" failsWithErrorMessage(message) { expect("11:14").toNot(match("\\d{2}:\\d{2}")) } } func testMatchNils() { failsWithErrorMessageForNil("expected to match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).to(match("\\d{2}:\\d{2}")) } failsWithErrorMessageForNil("expected to not match <\\d{2}:\\d{2}>, got ") { expect(nil as String?).toNot(match("\\d{2}:\\d{2}")) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift ================================================ import XCTest import Nimble import Foundation class PostNotificationTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPassesWhenNoNotificationsArePosted", testPassesWhenNoNotificationsArePosted), ("testPassesWhenExpectedNotificationIsPosted", testPassesWhenExpectedNotificationIsPosted), ("testPassesWhenAllExpectedNotificationsArePosted", testPassesWhenAllExpectedNotificationsArePosted), ("testFailsWhenNoNotificationsArePosted", testFailsWhenNoNotificationsArePosted), ("testFailsWhenNotificationWithWrongNameIsPosted", testFailsWhenNotificationWithWrongNameIsPosted), ("testFailsWhenNotificationWithWrongObjectIsPosted", testFailsWhenNotificationWithWrongObjectIsPosted), ("testPassesWhenExpectedNotificationEventuallyIsPosted", testPassesWhenExpectedNotificationEventuallyIsPosted), ] } var notificationCenter: NSNotificationCenter! #if _runtime(_ObjC) override func setUp() { _setUp() super.setUp() } #else func setUp() { _setUp() } #endif func _setUp() { notificationCenter = NSNotificationCenter() } func testPassesWhenNoNotificationsArePosted() { expect { // no notifications here! return nil }.to(postNotifications(beEmpty(), fromNotificationCenter: notificationCenter)) } func testPassesWhenExpectedNotificationIsPosted() { let testNotification = NSNotification(name: "Foo", object: nil) expect { self.notificationCenter.postNotification(testNotification) }.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) } func testPassesWhenAllExpectedNotificationsArePosted() { let foo = NSNumber(int: 1) let bar = NSNumber(int: 2) let n1 = NSNotification(name: "Foo", object: foo) let n2 = NSNotification(name: "Bar", object: bar) expect { self.notificationCenter.postNotification(n1) self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1, n2]), fromNotificationCenter: notificationCenter)) } func testFailsWhenNoNotificationsArePosted() { let testNotification = NSNotification(name: "Foo", object: nil) failsWithErrorMessage("expected to equal <[\(testNotification)]>, got no notifications") { expect { // no notifications here! return nil }.to(postNotifications(equal([testNotification]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongNameIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name + "a", object: nil) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testFailsWhenNotificationWithWrongObjectIsPosted() { let n1 = NSNotification(name: "Foo", object: nil) let n2 = NSNotification(name: n1.name, object: NSObject()) failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { expect { self.notificationCenter.postNotification(n2) return nil }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) } } func testPassesWhenExpectedNotificationEventuallyIsPosted() { #if _runtime(_ObjC) let testNotification = NSNotification(name: "Foo", object: nil) expect { deferToMainQueue { self.notificationCenter.postNotification(testNotification) } return nil }.toEventually(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) #else print("\(#function) is missing because toEventually is not implement on this platform") #endif } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift ================================================ import XCTest import Nimble #if _runtime(_ObjC) && !SWIFT_PACKAGE class RaisesExceptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testNegativeMatchesDoNotCallClosureWithoutException", testNegativeMatchesDoNotCallClosureWithoutException), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } var anException = NSException(name: "laugh", reason: "Lulz", userInfo: ["key": "value"]) func testPositiveMatches() { expect { self.anException.raise() }.to(raiseException()) expect { self.anException.raise() }.to(raiseException(named: "laugh")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz")) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } func testPositiveMatchesWithClosures() { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("laugh")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("lau")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).toNot(beginWith("df")) }) expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).toNot(beginWith("as")) }) } func testNegativeMatches() { failsWithErrorMessage("expected to raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "foo")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "bar")) } failsWithErrorMessage( "expected to raise exception with name with reason with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["k": "v"])) } failsWithErrorMessage("expected to raise any exception, got no exception") { expect { self.anException }.to(raiseException()) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } failsWithErrorMessage("expected to raise exception with name with reason , got no exception") { expect { self.anException }.to(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException(named: "bar", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh")) } failsWithErrorMessage("expected to not raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz")) } failsWithErrorMessage("expected to not raise exception with name with reason with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) } } func testNegativeMatchesDoNotCallClosureWithoutException() { failsWithErrorMessage("expected to raise exception that satisfies block, got no exception") { expect { self.anException }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "ha") { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to raise exception with name with reason with userInfo <{}> that satisfies block, got no exception") { expect { self.anException }.to(raiseException(named: "foo", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.toNot(raiseException()) } } func testNegativeMatchesWithClosure() { failsWithErrorMessage("expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { expect { self.anException.raise() }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal("foo")) }) } let innerFailureMessage = "expected to begin with , got " failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "wrong") { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "Lulz", userInfo: [:]) { (exception: NSException) in expect(exception.name).to(beginWith("fo")) }) } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift ================================================ import XCTest import Nimble class SatisfyAnyOfTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testSatisfyAnyOf", testSatisfyAnyOf), ("testOperatorOr", testOperatorOr), ] } func testSatisfyAnyOf() { expect(2).to(satisfyAnyOf(equal(2), equal(3))) #if _runtime(_ObjC) expect(2).toNot(satisfyAnyOf(equal(3), equal("turtles"))) #endif expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3))) expect("turtle").toNot(satisfyAnyOf(contain("a"), endWith("magic"))) expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) expect(false).to(satisfyAnyOf(beTrue(), beFalse())) expect(true).to(satisfyAnyOf(beTruthy(), beFalsy())) failsWithErrorMessage( "expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2") { expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5))) } failsWithErrorMessage( "expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]") { expect([5,6,7]).to(satisfyAnyOf(allPass("be less than 4", {$0 < 4}), equal([1,2,3,4]))) } failsWithErrorMessage( "expected to match one of: {be true}, got false") { expect(false).to(satisfyAnyOf(beTrue())) } failsWithErrorMessage( "expected to not match one of: {be less than <10.5>}, or {be greater than <100.75>}, or {be close to <50.1> (within 0.0001)}, got 50.10001") { expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) } } func testOperatorOr() { expect(2).to(equal(2) || equal(3)) #if _runtime(_ObjC) expect(2).toNot(equal(3) || equal("turtles")) #endif expect("turtle").toNot(contain("a") || endWith("magic")) expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75)) expect(false).to(beTrue() || beFalse()) expect(true).to(beTruthy() || beFalsy()) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift ================================================ import XCTest import Nimble enum Error : ErrorType { case Laugh case Cry } enum EquatableError : ErrorType { case Parameterized(x: Int) } extension EquatableError : Equatable { } func ==(lhs: EquatableError, rhs: EquatableError) -> Bool { switch (lhs, rhs) { case (.Parameterized(let l), .Parameterized(let r)): return l == r } } enum CustomDebugStringConvertibleError : ErrorType { case A case B } extension CustomDebugStringConvertibleError : CustomDebugStringConvertible { var debugDescription : String { return "code=\(_code)" } } class ThrowErrorTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testPositiveMatches", testPositiveMatches), ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), ("testNegativeMatches", testNegativeMatches), ("testPositiveNegatedMatches", testPositiveNegatedMatches), ("testNegativeNegatedMatches", testNegativeNegatedMatches), ("testNegativeMatchesDoNotCallClosureWithoutError", testNegativeMatchesDoNotCallClosureWithoutError), ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), ] } func testPositiveMatches() { expect { throw Error.Laugh }.to(throwError()) expect { throw Error.Laugh }.to(throwError(Error.Laugh)) expect { throw Error.Laugh }.to(throwError(errorType: Error.self)) expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1))) } func testPositiveMatchesWithClosures() { // Generic typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in guard case EquatableError.Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Explicit typed closure expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over errorType argument expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in guard case .Parameterized(let x) = error else { fail(); return } expect(x) >= 1 }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).to(beginWith("Nim")) }) // Typed closure over error argument expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in expect(error._domain).toNot(beginWith("as")) }) } func testNegativeMatches() { // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Same case, different arguments failsWithErrorMessage("expected to throw error , got ") { expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) } // Different case failsWithErrorMessage("expected to throw error , got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry)) } // Different case with closure failsWithErrorMessage("expected to throw error that satisfies block, got ") { expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return }) } // Different case, implementing CustomDebugStringConvertible failsWithErrorMessage("expected to throw error , got ") { expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B)) } } func testPositiveNegatedMatches() { // No error at all expect { return }.toNot(throwError()) // Different case expect { throw Error.Laugh }.toNot(throwError(Error.Cry)) } func testNegativeNegatedMatches() { // No error at all failsWithErrorMessage("expected to not throw any error, got ") { expect { throw Error.Laugh }.toNot(throwError()) } // Different error failsWithErrorMessage("expected to not throw error , got ") { expect { throw Error.Laugh }.toNot(throwError(Error.Laugh)) } } func testNegativeMatchesDoNotCallClosureWithoutError() { failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError { error in fail() }) } failsWithErrorMessage("expected to throw error that satisfies block, got no error") { expect { return }.to(throwError(Error.Laugh) { error in fail() }) } } func testNegativeMatchesWithClosure() { #if SWIFT_PACKAGE let moduleName = "Nimbletest" #else let moduleName = "NimbleTests" #endif let innerFailureMessage = "expected to equal , got <\(moduleName).Error>" let closure = { (error: Error) in print("** In closure! With domain \(error._domain)") expect(error._domain).to(equal("foo")) } failsWithErrorMessage([innerFailureMessage, "expected to throw error from type that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(closure: closure)) } failsWithErrorMessage([innerFailureMessage, "expected to throw error that satisfies block, got "]) { expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure)) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/SynchronousTests.swift ================================================ import Foundation import XCTest import Nimble class SynchronousTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testFailAlwaysFails", testFailAlwaysFails), ("testUnexpectedErrorsThrownFails", testUnexpectedErrorsThrownFails), ("testToMatchesIfMatcherReturnsTrue", testToMatchesIfMatcherReturnsTrue), ("testToProvidesActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpression", testToProvidesActualValueExpression), ("testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToMatchAgainstLazyProperties", testToMatchAgainstLazyProperties), ("testToNotMatchesIfMatcherReturnsTrue", testToNotMatchesIfMatcherReturnsTrue), ("testToNotProvidesActualValueExpression", testToNotProvidesActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpression", testToNotProvidesAMemoizedActualValueExpression), ("testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), ("testToNotNegativeMatches", testToNotNegativeMatches), ("testNotToMatchesLikeToNot", testNotToMatchesLikeToNot), ] } let errorToThrow = NSError(domain: NSCocoaErrorDomain, code: 42, userInfo: nil) private func doThrowError() throws -> Int { throw errorToThrow } func testFailAlwaysFails() { failsWithErrorMessage("My error message") { fail("My error message") } failsWithErrorMessage("fail() always fails") { fail() } } func testUnexpectedErrorsThrownFails() { #if _runtime(_ObjC) // This test triggers a weird segfault on Linux currently failsWithErrorMessage("expected to equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.to(equal(1)) } failsWithErrorMessage("expected to not equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { expect { try self.doThrowError() }.toNot(equal(1)) } #endif } func testToMatchesIfMatcherReturnsTrue() { expect(1).to(MatcherFunc { expr, failure in true }) expect{1}.to(MatcherFunc { expr, failure in true }) } func testToProvidesActualValueExpression() { var value: Int? expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true }) expect(value).to(equal(1)) } func testToProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.to(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return true }) expect(callCount).to(equal(1)) } func testToMatchAgainstLazyProperties() { expect(ObjectWithLazyProperty().value).to(equal("hello")) expect(ObjectWithLazyProperty().value).toNot(equal("world")) expect(ObjectWithLazyProperty().anotherValue).to(equal("world")) expect(ObjectWithLazyProperty().anotherValue).toNot(equal("hello")) } // repeated tests from to() for toNot() func testToNotMatchesIfMatcherReturnsTrue() { expect(1).toNot(MatcherFunc { expr, failure in false }) expect{1}.toNot(MatcherFunc { expr, failure in false }) } func testToNotProvidesActualValueExpression() { var value: Int? expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false }) expect(value).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpression() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in try expr.evaluate() try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { var callCount = 0 expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in expect(callCount).to(equal(0)) try expr.evaluate() return false }) expect(callCount).to(equal(1)) } func testToNotNegativeMatches() { failsWithErrorMessage("expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }) } } func testNotToMatchesLikeToNot() { expect(1).notTo(MatcherFunc { expr, failure in false }) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/UserDescriptionTest.swift ================================================ import XCTest import Nimble class UserDescriptionTest: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testToMatcher_CustomFailureMessage", testToMatcher_CustomFailureMessage), ("testNotToMatcher_CustomFailureMessage", testNotToMatcher_CustomFailureMessage), ("testToNotMatcher_CustomFailureMessage", testToNotMatcher_CustomFailureMessage), ("testToEventuallyMatch_CustomFailureMessage", testToEventuallyMatch_CustomFailureMessage), ("testToEventuallyNotMatch_CustomFailureMessage", testToEventuallyNotMatch_CustomFailureMessage), ("testToNotEventuallyMatch_CustomFailureMessage", testToNotEventuallyMatch_CustomFailureMessage), ] } func testToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to match, got <1>") { expect(1).to(MatcherFunc { expr, failure in false }, description: "These aren't equal!") } } func testNotToMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).notTo(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToNotMatcher_CustomFailureMessage() { failsWithErrorMessage( "These aren't equal!\n" + "expected to not match, got <1>") { expect(1).toNot(MatcherFunc { expr, failure in true }, description: "These aren't equal!") } } func testToEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These aren't eventually equal!\n" + "expected to eventually equal <1>, got <0>") { expect { 0 }.toEventually(equal(1), description: "These aren't eventually equal!") } #endif } func testToEventuallyNotMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } func testToNotEventuallyMatch_CustomFailureMessage() { #if _runtime(_ObjC) failsWithErrorMessage( "These are eventually equal!\n" + "expected to eventually not equal <1>, got <1>") { expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") } #endif } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h ================================================ @import Nimble; #import "NimbleTests-Swift.h" // Use this when you want to verify the failure message for when an expectation fails #define expectFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; #define expectFailureMessages(MSGS, BLOCK) \ [NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__]; // Use this when you want to verify the failure message with the nil message postfixed // to it: " (use beNil() to match nils)" #define expectNilFailureMessage(MSG, BLOCK) \ [NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCAllPassTest : XCTestCase @end @implementation ObjCAllPassTest - (void)testPositiveMatches { expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5))); expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5))); } - (void)testNegativeMatches { expectFailureMessage(@"expected to all be less than <3>, but failed first at element" " <3> in <[1, 2, 3, 4]>", ^{ expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"expected to not all be less than <5>", ^{ expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).to(allPass(beLessThan(@5))); }); expectFailureMessage(@"allPass only works with NSFastEnumeration" " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ expect(@3).toNot(allPass(beLessThan(@5))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCAsyncTest : XCTestCase @end @implementation ObjCAsyncTest - (void)testAsync { __block id obj = @1; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = nil; }); expect(obj).toEventually(beNil()); } - (void)testAsyncWithCustomTimeout { __block id obj = nil; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ obj = @1; }); expect(obj).withTimeout(5).toEventuallyNot(beNil()); } - (void)testAsyncCallback { waitUntil(^(void (^done)(void)){ done(); }); expectFailureMessage(@"Waited more than 1.0 second", ^{ waitUntil(^(void (^done)(void)){ /* ... */ }); }); expectFailureMessage(@"Waited more than 0.01 seconds", ^{ waitUntilTimeout(0.01, ^(void (^done)(void)){ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [NSThread sleepForTimeInterval:0.1]; done(); }); }); }); expectFailureMessage(@"expected to equal , got ", ^{ waitUntil(^(void (^done)(void)){ [NSThread sleepForTimeInterval:0.1]; expect(@"hello").to(equal(@"goodbye")); done(); }); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeAnInstanceOfTest : XCTestCase @end @implementation ObjCBeAnInstanceOfTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beAnInstanceOf([NSNull class])); expect(@1).toNot(beAnInstanceOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be an instance of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAnInstanceOf([NSNull class])); }); expectFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect([NSNull null]).toNot(beAnInstanceOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be an instance of NSNull, got ", ^{ expect(nil).to(beAnInstanceOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ expect(nil).toNot(beAnInstanceOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeCloseToTest : XCTestCase @end @implementation ObjCBeCloseToTest - (void)testPositiveMatches { expect(@1.2).to(beCloseTo(@1.2001)); expect(@1.2).to(beCloseTo(@2).within(10)); expect(@2).toNot(beCloseTo(@1)); expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be close to <0> (within 0.001), got <1>", ^{ expect(@1).to(beCloseTo(@0)); }); expectFailureMessage(@"expected to not be close to <0> (within 0.001), got <0.0001>", ^{ expect(@(0.0001)).toNot(beCloseTo(@0)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be close to <0> (within 0.001), got ", ^{ expect(nil).to(beCloseTo(@0)); }); expectNilFailureMessage(@"expected to not be close to <0> (within 0.001), got ", ^{ expect(nil).toNot(beCloseTo(@0)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeEmptyTest : XCTestCase @end @implementation ObjCBeEmptyTest - (void)testPositiveMatches { expect(@[]).to(beEmpty()); expect(@"").to(beEmpty()); expect(@{}).to(beEmpty()); expect([NSSet set]).to(beEmpty()); expect([NSIndexSet indexSet]).to(beEmpty()); expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty()); expect(@[@1, @2]).toNot(beEmpty()); expect(@"a").toNot(beEmpty()); expect(@{@"key": @"value"}).toNot(beEmpty()); expect([NSSet setWithObject:@1]).toNot(beEmpty()); expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; expect(table).toNot(beEmpty()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be empty, got ", ^{ expect(@"foo").to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect(@[@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{key = value;}>", ^{ expect(@{@"key": @"value"}).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).to(beEmpty()); }); expectFailureMessage(@"expected to be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).to(beEmpty()); }); NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; expectFailureMessage(([NSString stringWithFormat:@"expected to be empty, got <%@>", tableString]), ^{ expect(table).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <>", ^{ expect(@"").toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <()>", ^{ expect(@[]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{}>", ^{ expect(@{}).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <{(1)}>", ^{ expect([NSSet setWithObject:@1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got <(1)>", ^{ expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); }); expectFailureMessage(@"expected to not be empty, got ", ^{ expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty()); }); } - (void)testItDoesNotMatchNil { expectNilFailureMessage(@"expected to be empty, got ", ^{ expect(nil).to(beEmpty()); }); expectNilFailureMessage(@"expected to not be empty, got ", ^{ expect(nil).toNot(beEmpty()); }); } - (void)testItReportsTypesItMatchesAgainst { expectFailureMessage(@"expected to be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).to(beEmpty()); }); expectFailureMessage(@"expected to not be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ expect(@1).toNot(beEmpty()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalseTest : XCTestCase @end @implementation ObjCBeFalseTest - (void)testPositiveMatches { expect(@NO).to(beFalse()); expect(@YES).toNot(beFalse()); } - (void)testNegativeMatches { expectNilFailureMessage(@"expected to be false, got ", ^{ expect(nil).to(beFalse()); }); expectNilFailureMessage(@"expected to not be false, got ", ^{ expect(nil).toNot(beFalse()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeFalsyTest : XCTestCase @end @implementation ObjCBeFalsyTest - (void)testPositiveMatches { expect(@NO).to(beFalsy()); expect(@YES).toNot(beFalsy()); expect(nil).to(beFalsy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to not be falsy, got ", ^{ expect(nil).toNot(beFalsy()); }); expectFailureMessage(@"expected to be falsy, got <1>", ^{ expect(@1).to(beFalsy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanOrEqualToTest : XCTestCase @end @implementation ObjCBeGreaterThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beGreaterThanOrEqualTo(@2)); expect(@2).toNot(beGreaterThanOrEqualTo(@3)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than or equal to <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThanOrEqualTo(@0)); }); expectFailureMessage(@"expected to not be greater than or equal to <1>, got <2>", ^{ expect(@2).toNot(beGreaterThanOrEqualTo(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than or equal to <-1>, got ", ^{ expect(nil).to(beGreaterThanOrEqualTo(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than or equal to <1>, got ", ^{ expect(nil).toNot(beGreaterThanOrEqualTo(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeGreaterThanTest : XCTestCase @end @implementation ObjCBeGreaterThanTest - (void)testPositiveMatches { expect(@2).to(beGreaterThan(@1)); expect(@2).toNot(beGreaterThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be greater than <0>, got <-1>", ^{ expect(@(-1)).to(beGreaterThan(@(0))); }); expectFailureMessage(@"expected to not be greater than <1>, got <0>", ^{ expect(@0).toNot(beGreaterThan(@(1))); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be greater than <-1>, got ", ^{ expect(nil).to(beGreaterThan(@(-1))); }); expectNilFailureMessage(@"expected to not be greater than <1>, got ", ^{ expect(nil).toNot(beGreaterThan(@(1))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeIdenticalToTest : XCTestCase @end @implementation ObjCBeIdenticalToTest - (void)testPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(beIdenticalTo([NSNull null])); expect(@2).toNot(beIdenticalTo(@3)); } - (void)testNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(beIdenticalTo(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(beIdenticalTo(obj)); }); } - (void)testNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(beIdenticalTo(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(beIdenticalTo(obj)); }); } - (void)testAliasPositiveMatches { NSNull *obj = [NSNull null]; expect(obj).to(be([NSNull null])); expect(@2).toNot(be(@3)); } - (void)testAliasNegativeMatches { NSNull *obj = [NSNull null]; expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ expect(@2).to(be(obj)); }); expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ expect(obj).toNot(be(obj)); }); } - (void)testAliasNilMatches { NSNull *obj = [NSNull null]; expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ expect(nil).to(be(nil)); }); expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ expect(nil).toNot(be(obj)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeKindOfTest : XCTestCase @end @implementation ObjCBeKindOfTest - (void)testPositiveMatches { NSMutableArray *array = [NSMutableArray array]; expect(array).to(beAKindOf([NSArray class])); expect(@1).toNot(beAKindOf([NSNull class])); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be a kind of NSNull, got <__NSCFNumber instance>", ^{ expect(@1).to(beAKindOf([NSNull class])); }); expectFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect([NSNull null]).toNot(beAKindOf([NSNull class])); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be a kind of NSNull, got ", ^{ expect(nil).to(beAKindOf([NSNull class])); }); expectNilFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ expect(nil).toNot(beAKindOf([NSNull class])); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanOrEqualToTest : XCTestCase @end @implementation ObjCBeLessThanOrEqualToTest - (void)testPositiveMatches { expect(@2).to(beLessThanOrEqualTo(@2)); expect(@2).toNot(beLessThanOrEqualTo(@1)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than or equal to <1>, got <2>", ^{ expect(@2).to(beLessThanOrEqualTo(@1)); }); expectFailureMessage(@"expected to not be less than or equal to <1>, got <1>", ^{ expect(@1).toNot(beLessThanOrEqualTo(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than or equal to <1>, got ", ^{ expect(nil).to(beLessThanOrEqualTo(@1)); }); expectNilFailureMessage(@"expected to not be less than or equal to <-1>, got ", ^{ expect(nil).toNot(beLessThanOrEqualTo(@(-1))); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeLessThanTest : XCTestCase @end @implementation ObjCBeLessThanTest - (void)testPositiveMatches { expect(@2).to(beLessThan(@3)); expect(@2).toNot(beLessThan(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be less than <0>, got <-1>", ^{ expect(@(-1)).to(beLessThan(@0)); }); expectFailureMessage(@"expected to not be less than <1>, got <0>", ^{ expect(@0).toNot(beLessThan(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to be less than <-1>, got ", ^{ expect(nil).to(beLessThan(@(-1))); }); expectNilFailureMessage(@"expected to not be less than <1>, got ", ^{ expect(nil).toNot(beLessThan(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeNilTest : XCTestCase @end @implementation ObjCBeNilTest - (void)testPositiveMatches { expect(nil).to(beNil()); expect(@NO).toNot(beNil()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be nil, got <1>", ^{ expect(@1).to(beNil()); }); expectFailureMessage(@"expected to not be nil, got ", ^{ expect(nil).toNot(beNil()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTrueTest : XCTestCase @end @implementation ObjCBeTrueTest - (void)testPositiveMatches { expect(@YES).to(beTrue()); expect(@NO).toNot(beTrue()); expect(nil).toNot(beTrue()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be true, got <0>", ^{ expect(@NO).to(beTrue()); }); expectFailureMessage(@"expected to be true, got ", ^{ expect(nil).to(beTrue()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeTruthyTest : XCTestCase @end @implementation ObjCBeTruthyTest - (void)testPositiveMatches { expect(@YES).to(beTruthy()); expect(@NO).toNot(beTruthy()); expect(nil).toNot(beTruthy()); } - (void)testNegativeMatches { expectFailureMessage(@"expected to be truthy, got ", ^{ expect(nil).to(beTruthy()); }); expectFailureMessage(@"expected to not be truthy, got <1>", ^{ expect(@1).toNot(beTruthy()); }); expectFailureMessage(@"expected to be truthy, got <0>", ^{ expect(@NO).to(beTruthy()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCBeginWithTest : XCTestCase @end @implementation ObjCBeginWithTest - (void)testPositiveMatches { expect(@"hello world!").to(beginWith(@"hello")); expect(@"hello world!").toNot(beginWith(@"world")); NSArray *array = @[@1, @2]; expect(array).to(beginWith(@1)); expect(array).toNot(beginWith(@2)); } - (void)testNegativeMatches { expectFailureMessage(@"expected to begin with , got ", ^{ expect(@"foo").to(beginWith(@"bar")); }); expectFailureMessage(@"expected to not begin with , got ", ^{ expect(@"foo").toNot(beginWith(@"foo")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to begin with <1>, got ", ^{ expect(nil).to(beginWith(@1)); }); expectNilFailureMessage(@"expected to not begin with <1>, got ", ^{ expect(nil).toNot(beginWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCContainTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCContainTest : XCTestCase @end @implementation ObjCContainTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(array).to(contain(@1)); expect(array).toNot(contain(@"HI")); expect(@"String").to(contain(@"Str")); expect(@"Other").toNot(contain(@"Str")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to contain <3>, got <(1, 2)>", ^{ expect((@[@1, @2])).to(contain(@3)); }); expectFailureMessage(@"expected to not contain <2>, got <(1, 2)>", ^{ expect((@[@1, @2])).toNot(contain(@2)); }); expectFailureMessage(@"expected to contain , got ", ^{ expect(@"la").to(contain(@"hi")); }); expectFailureMessage(@"expected to not contain , got ", ^{ expect(@"hihihi").toNot(contain(@"hi")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to contain <3>, got ", ^{ expect(nil).to(contain(@3)); }); expectNilFailureMessage(@"expected to not contain <3>, got ", ^{ expect(nil).toNot(contain(@3)); }); expectNilFailureMessage(@"expected to contain , got ", ^{ expect(nil).to(contain(@"hi")); }); expectNilFailureMessage(@"expected to not contain , got ", ^{ expect(nil).toNot(contain(@"hi")); }); } - (void)testVariadicArguments { NSArray *array = @[@1, @2]; expect(array).to(contain(@1, @2)); expect(array).toNot(contain(@"HI", @"whale")); expect(@"String").to(contain(@"Str", @"ng")); expect(@"Other").toNot(contain(@"Str", @"Oth")); expectFailureMessage(@"expected to contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).to(contain(@"a", @"bar")); }); expectFailureMessage(@"expected to not contain , got <(a, b, c)>", ^{ expect(@[@"a", @"b", @"c"]).toNot(contain(@"bar", @"b")); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEndWithTest : XCTestCase @end @implementation ObjCEndWithTest - (void)testPositiveMatches { NSArray *array = @[@1, @2]; expect(@"hello world!").to(endWith(@"world!")); expect(@"hello world!").toNot(endWith(@"hello")); expect(array).to(endWith(@2)); expect(array).toNot(endWith(@1)); expect(@1).toNot(contain(@"foo")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to end with , got ", ^{ expect(@"hello world!").to(endWith(@"?")); }); expectFailureMessage(@"expected to not end with , got ", ^{ expect(@"hello world!").toNot(endWith(@"!")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to end with <1>, got ", ^{ expect(nil).to(endWith(@1)); }); expectNilFailureMessage(@"expected to not end with <1>, got ", ^{ expect(nil).toNot(endWith(@1)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEqualTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCEqualTest : XCTestCase @end @implementation ObjCEqualTest - (void)testPositiveMatches { expect(@1).to(equal(@1)); expect(@1).toNot(equal(@2)); expect(@1).notTo(equal(@2)); expect(@"hello").to(equal(@"hello")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to equal <2>, got <1>", ^{ expect(@1).to(equal(@2)); }); expectFailureMessage(@"expected to not equal <1>, got <1>", ^{ expect(@1).toNot(equal(@1)); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to equal , got ", ^{ expect(nil).to(equal(nil)); }); expectNilFailureMessage(@"expected to not equal , got ", ^{ expect(nil).toNot(equal(nil)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCHaveCount.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCHaveCountTest : XCTestCase @end @implementation ObjCHaveCountTest - (void)testHaveCountForNSArray { expect(@[@1, @2, @3]).to(haveCount(@3)); expect(@[@1, @2, @3]).notTo(haveCount(@1)); expect(@[]).to(haveCount(@0)); expect(@[@1]).notTo(haveCount(@0)); expectFailureMessage(@"expected to have NSArray with count 1, got 3\nActual Value: (1, 2, 3)", ^{ expect(@[@1, @2, @3]).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSArray with count 3, got 3\nActual Value: (1, 2, 3)", ^{ expect(@[@1, @2, @3]).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSDictionary { expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@3)); expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSDictionary with count 1, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSDictionary with count 3, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSHashtable { NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; [table addObject:@1]; [table addObject:@2]; [table addObject:@3]; expect(table).to(haveCount(@3)); expect(table).notTo(haveCount(@1)); NSString *msg = [NSString stringWithFormat: @"expected to have NSHashTable with count 1, got 3\nActual Value: %@", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).to(haveCount(@1)); }); msg = [NSString stringWithFormat: @"expected to not have NSHashTable with count 3, got 3\nActual Value: %@", [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; expectFailureMessage(msg, ^{ expect(table).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSSet { NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSSet with count 1, got 3\nActual Value: {(3,1,2)}", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSSet with count 3, got 3\nActual Value: {(3,1,2)}", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForNSIndexSet { NSIndexSet *const set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; expect(set).to(haveCount(@3)); expect(set).notTo(haveCount(@1)); expectFailureMessage(@"expected to have NSIndexSet with count 1, got 3\nActual Value: (1, 2, 3)", ^{ expect(set).to(haveCount(@1)); }); expectFailureMessage(@"expected to not have NSIndexSet with count 3, got 3\nActual Value: (1, 2, 3)", ^{ expect(set).notTo(haveCount(@3)); }); } - (void)testHaveCountForUnsupportedTypes { expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString", ^{ expect(@"string").to(haveCount(@6)); }); expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber", ^{ expect(@1).to(haveCount(@6)); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCMatchTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCMatchTest : XCTestCase @end @implementation ObjCMatchTest - (void)testPositiveMatches { expect(@"11:14").to(match(@"\\d{2}:\\d{2}")); expect(@"hello").toNot(match(@"\\d{2}:\\d{2}")); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(@"hello").to(match(@"\\d{2}:\\d{2}")); }); expectFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got <11:22>", ^{ expect(@"11:22").toNot(match(@"\\d{2}:\\d{2}")); }); } - (void)testNilMatches { expectNilFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).to(match(@"\\d{2}:\\d{2}")); }); expectNilFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got ", ^{ expect(nil).toNot(match(@"\\d{2}:\\d{2}")); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCRaiseExceptionTest : XCTestCase @end @implementation ObjCRaiseExceptionTest - (void)testPositiveMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ @throw exception; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException()); expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException)); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food")); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"})); expectAction(^{ }).toNot(raiseException()); } - (void)testPositiveMatchesWithBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); } - (void)testNegativeMatches { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise any exception, got no exception", ^{ expectAction(^{ }).to(raiseException()); }); expectFailureMessage(@"expected to raise exception with name , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(@"foo")); }); expectFailureMessage(@"expected to raise exception with name with reason , got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"cakes")); }); expectFailureMessage(@"expected to raise exception with name with reason with userInfo <{k = v;}>, got no exception", ^{ expectAction(^{ }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"k": @"v"})); }); expectFailureMessage(@"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }", ^{ expectAction(^{ [exception raise]; }).toNot(raiseException()); }); } - (void)testNegativeMatchesWithPassingBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; expectFailureMessage(@"expected to raise exception that satisfies block, got no exception", ^{ expect(exception).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"LOL")); })); }); NSString *outerFailureMessage = @"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(@"foo"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"bar"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(NSInvalidArgumentException)); })); }); } - (void)testNegativeMatchesWithNegativeBlocks { __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:@"No food" userInfo:@{@"key": @"value"}]; NSString *outerFailureMessage; NSString const *innerFailureMessage = @"expected to equal , got "; outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ expectAction(^{ [exception raise]; }).to(raiseException(). named(NSInvalidArgumentException). reason(@"No food"). userInfo(@{@"key": @"value"}). satisfyingBlock(^(NSException *exception) { expect(exception.name).to(equal(@"foo")); })); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCSatisfyAnyOfTest : XCTestCase @end @implementation ObjCSatisfyAnyOfTest - (void)testPositiveMatches { expect(@2).to(satisfyAnyOf(equal(@2), equal(@3))); expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16))); expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4)))); expect(@NO).to(satisfyAnyOf(beTrue(), beFalse())); expect(@YES).to(satisfyAnyOf(beTrue(), beFalse())); } - (void)testNegativeMatches { expectFailureMessage(@"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2", ^{ expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5))); }); expectFailureMessage(@"expected to match one of: {all be less than <4>, but failed first at element" " <5> in <[5, 6, 7]>}, or {equal <(1, 2, 3, 4)>}, got (5,6,7)", ^{ expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4]))); }); expectFailureMessage(@"satisfyAnyOf must be called with at least one matcher", ^{ expect(@"turtles").to(satisfyAnyOf()); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSyncTest.m ================================================ #import #import #import "NimbleSpecHelper.h" @interface ObjCSyncTest : XCTestCase @end @implementation ObjCSyncTest - (void)testFailureExpectation { expectFailureMessage(@"fail() always fails", ^{ fail(); }); expectFailureMessage(@"This always fails", ^{ failWithMessage(@"This always fails"); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m ================================================ #import #import "NimbleSpecHelper.h" @interface ObjCUserDescriptionTest : XCTestCase @end @implementation ObjCUserDescriptionTest - (void)testToWithDescription { expectFailureMessage(@"These are equal!\n" "expected to equal <2>, got <1>", ^{ expect(@1).toWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).toNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testNotToWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to not equal <1>, got <1>", ^{ expect(@1).notToWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToEventuallyWithDescription { expectFailureMessage(@"These are equal!\n" "expected to eventually equal <2>, got <1>", ^{ expect(@1).toEventuallyWithDescription(equal(@2), @"These are equal!"); }); } - (void)testToEventuallyNotWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toEventuallyNotWithDescription(equal(@1), @"These aren't equal!"); }); } - (void)testToNotEventuallyWithDescription { expectFailureMessage(@"These aren't equal!\n" "expected to eventually not equal <1>, got <1>", ^{ expect(@1).toNotEventuallyWithDescription(equal(@1), @"These aren't equal!"); }); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjcStringersTest.m ================================================ @import XCTest; @import Nimble; @interface ObjcStringersTest : XCTestCase @end @implementation ObjcStringersTest - (void)testItCanStringifyArrays { NSArray *array = @[@1, @2, @3]; NSString *result = NMBStringify(array); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItCanStringifyIndexSets { NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; NSString *result = NMBStringify(indexSet); expect(result).to(equal(@"(1, 2, 3)")); } - (void)testItRoundsLongDecimals { NSNumber *num = @291.123782163; NSString *result = NMBStringify(num); expect(result).to(equal(@"291.1238")); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/circle.yml ================================================ machine: xcode: version: "7.3" dependencies: pre: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" test: override: - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx - eval "$(swiftenv init -)"; ./test swiftpm: environment: SWIFTENV_ROOT: $HOME/.swiftenv PATH: $SWIFTENV_ROOT/bin:$PATH ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/script/release ================================================ #!/usr/bin/env sh REMOTE_BRANCH=master POD_NAME=Nimble PODSPEC=Nimble.podspec POD=${COCOAPODS:-pod} function help { echo "Usage: release VERSION RELEASE_NOTES [-f]" echo echo "VERSION should be the version to release, should not include the 'v' prefix" echo "RELEASE_NOTES should be a file that lists all the release notes for this version" echo " if file does not exist, creates a git-style commit with a diff as a comment" echo echo "FLAGS" echo " -f Forces override of tag" echo echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" echo echo "HINT: use 'git diff ...HEAD' to build the release notes" echo exit 2 } function die { echo "[ERROR] $@" echo exit 1 } if [ $# -lt 2 ]; then help fi VERSION=$1 RELEASE_NOTES=$2 FORCE_TAG=$3 VERSION_TAG="v$VERSION" echo "-> Verifying Local Directory for Release" if [ -z "`which $POD`" ]; then die "Cocoapods is required to produce a release. Aborting." fi echo " > Cocoapods is installed" echo " > Is this a reasonable tag?" echo $VERSION_TAG | grep -q "^vv" if [ $? -eq 0 ]; then die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." fi echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" if [ $? -ne 0 ]; then die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." fi echo " > Is this version ($VERSION) unique?" git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 if [ $? -eq 0 ]; then if [ -z "$FORCE_TAG" ]; then die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" else echo " > NO, but force was specified." fi else echo " > Yes, tag is unique" fi if [ ! -f "$RELEASE_NOTES" ]; then echo " > Failed to find $RELEASE_NOTES. Prompting editor" RELEASE_NOTES=.release-changes LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` echo " > Latest tag ${LATEST_TAG}" echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES echo "================" >> $RELEASE_NOTES echo >> $RELEASE_NOTES echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES $EDITOR $RELEASE_NOTES diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 STATUS=$? rm ${RELEASE_NOTES}.backup if [ $STATUS -eq 0 ]; then rm $RELEASE_NOTES die "No changes in release notes file. Aborting." fi fi echo " > Release notes: $RELEASE_NOTES" if [ ! -f "$PODSPEC" ]; then die "Cannot find podspec: $PODSPEC. Aborting." fi echo " > Podspec exists" git config --get user.signingkey > /dev/null || { echo "[ERROR] No PGP found to sign tag. Aborting." echo echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" echo " intermediate between you and the end-users to modify the git repository." echo echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" echo " from the official maintainers." echo echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." echo echo "Related resources:" echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" echo exit 2 } echo " > Found PGP key for git" # Verify cocoapods trunk ownership pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." echo " > Verified ownership to $POD_NAME pod" echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." function restore_podspec { if [ -f "${PODSPEC}.backup" ]; then mv -f ${PODSPEC}{.backup,} fi } echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" git fetch origin || die "Failed to fetch origin" git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" echo "-> Setting podspec version" cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" SET_PODSPEC_VERSION=$? if [ $SET_PODSPEC_VERSION -eq 0 ]; then echo " > Podspec already set to $VERSION. Skipping." else sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { restore_podspec die "Failed to update version in podspec" } git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi if [ -z "$FORCE_TAG" ]; then echo "-> Tagging version" git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin" git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" else echo "-> Tagging version (force)" git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin (force)" git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" fi if [ $SET_PODSPEC_VERSION -ne 0 ]; then git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" echo " > Pushed version to origin" fi echo echo "---------------- Released as $VERSION_TAG ----------------" echo echo echo "Pushing to pod trunk..." $POD trunk push "$PODSPEC" echo echo "================ Finalizing the Release ================" echo echo " - Opening GitHub to mark this as a release..." echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for GitHub styling." echo " - Announce!" open "https://github.com/Quick/Nimble/releases/new?tag=$VERSION_TAG" rm ${PODSPEC}.backup ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/test ================================================ #!/bin/bash GREEN="\033[0;32m" CLEAR="\033[0m" if which xcodebuild > /dev/null; then echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..." BUILD_DIR=`pwd`/build LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} RUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} RUNTIME_TVOS_SDK_VERSION=${NIMBLE_RUNTIME_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} BUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION} fi set -e function color_if_overridden { local actual=$1 local env_var=$2 if [ -z "$env_var" ]; then printf "$actual" else printf "$GREEN$actual$CLEAR" fi } function print_env { echo "=== Environment ===" echo " iOS:" echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION" echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`" echo " Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`" echo echo " tvOS:" echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION" echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" echo " Running with tvOS SDK: `color_if_overridden $RUNTIME_TVOS_SDK_VERSION $NIMBLE_RUNTIME_TVOS_SDK_VERSION`" echo echo " Mac OS X:" echo " Latest OS X SDK: $LATEST_OSX_SDK_VERSION" echo " Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`" echo echo "======= END =======" echo } function run { echo -e "$GREEN==>$CLEAR $@" "$@" } function test_ios { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION" build test run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION" build test } function test_tvos { run osascript -e 'tell app "Simulator" to quit' run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV 1080p,OS=$RUNTIME_TVOS_SDK_VERSION" build test } function test_osx { run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-OSX" -configuration "Debug" -sdk "macosx$BUILD_OSX_SDK_VERSION" build test } function test_podspec { echo "Gathering CocoaPods installation information..." run bundle exec pod --version echo "Linting podspec..." run bundle exec pod lib lint Nimble.podspec } function test_swiftpm { run swift build --clean && swift build && swift test } function test() { test_ios test_tvos test_osx if which swift-test; then test_swiftpm else echo "Not testing with the Swift Package Manager because swift-test is not installed" fi } function clean { run rm -rf ~/Library/Developer/Xcode/DerivedData\; true } function help { echo "Usage: $0 COMMANDS" echo echo "COMMANDS:" echo " clean - Cleans the derived data directory of Xcode. Assumes default location" echo " ios - Runs the tests as an iOS device" echo " tvos - Runs the tests as an tvOS device" echo " osx - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)" echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" echo " all - Runs the all tests of ios, tvos and osx" echo " swiftpm - Runs the tests built by the Swift Package Manager" echo " help - Displays this help" echo exit 1 } function main { print_env for arg in $@ do case "$arg" in clean) clean ;; ios) test_ios ;; tvos) test_tvos ;; osx) test_osx ;; podspec) test_podspec ;; test) test ;; all) test ;; swiftpm) test_swiftpm ;; help) help ;; esac done if [ $# -eq 0 ]; then clean test fi } main $@ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Gemfile ================================================ source "https://rubygems.org" gem 'cocoapods', '1.0' ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2014, Quick Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Package.swift ================================================ import PackageDescription let package = Package( name: "Quick", targets: [ Target(name: "QuickTests", dependencies: [.Target(name: "Quick"), .Target(name: "QuickTestHelpers")]), Target(name: "QuickFocusedTests", dependencies: [.Target(name: "Quick"), .Target(name: "QuickTestHelpers")]), Target(name: "QuickTestHelpers", dependencies: [.Target(name: "Quick")]), ], // TODO: Once the `test` command has been implemented in the Swift Package Manager, this should be changed to // be `testDependencies:` instead. For now it has to be done like this for the library to get linked with the test targets. // See: https://github.com/apple/swift-evolution/blob/master/proposals/0019-package-manager-testing.md dependencies: [ .Package(url: "https://github.com/briancroom/Nimble", majorVersion: 3) ] ) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.h ================================================ @import Quick; @interface ___FILEBASENAMEASIDENTIFIER___ : QuickConfiguration @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.m ================================================ #import "___FILEBASENAMEASIDENTIFIER___.h" @implementation ___FILEBASENAMEASIDENTIFIER___ + (void)configure:(Configuration *)configuration { } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Swift/___FILEBASENAME___.swift ================================================ import Quick class ___FILEBASENAMEASIDENTIFIER___: QuickConfiguration { override class func configure(configuration: Configuration) { } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateInfo.plist ================================================ Kind Xcode.IDEKit.TextSubstitutionFileTemplateKind Description A QuickConfiguration subclass. Summary A QuickConfiguration subclass, overload +configure: to configure the behaviour when running specs, shared examples that are used across spec files. SortOrder 1 BuildableType Test DefaultCompletionName Spec Options Description Name of the Quick Configuration Identifier productName Name QuickConfiguration Name: NotPersisted Required Type text AllowedTypes Swift public.swift-source Objective-C public.objective-c-source public.objective-c-plus-plus-source Default Swift Description The implementation language Identifier languageChoice MainTemplateFiles Objective-C ___FILEBASENAME___.m Swift ___FILEBASENAME___.swift Name Language: Required Yes Type popup Values Swift Objective-C ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Objective-C/___FILEBASENAME___.m ================================================ #import #import QuickSpecBegin(___FILEBASENAMEASIDENTIFIER___) QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Swift/___FILEBASENAME___.swift ================================================ import Quick import Nimble class ___FILEBASENAMEASIDENTIFIER___: QuickSpec { override func spec() { } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateInfo.plist ================================================ Kind Xcode.IDEKit.TextSubstitutionFileTemplateKind Description A class implementing a Quick spec. Summary A class implementing a Quick spec SortOrder 1 BuildableType Test DefaultCompletionName Spec Options Description Name of the Quick spec class Identifier productName Name Spec Name: NotPersisted Required Type text AllowedTypes Swift public.swift-source Objective-C public.objective-c-source public.objective-c-plus-plus-source Default Swift Description The implementation language Identifier languageChoice MainTemplateFiles Objective-C ___FILEBASENAME___.m Swift ___FILEBASENAME___.swift Name Language: Required Yes Type popup Values Swift Objective-C ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.podspec ================================================ Pod::Spec.new do |s| s.name = "Quick" s.version = "0.9.2" s.summary = "The Swift (and Objective-C) testing framework." s.description = <<-DESC Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo. DESC s.homepage = "https://github.com/Quick/Quick" s.license = { :type => "Apache 2.0", :file => "LICENSE" } s.author = "Quick Contributors" s.ios.deployment_target = "7.0" s.osx.deployment_target = "10.9" s.tvos.deployment_target = '9.0' s.source = { :git => "https://github.com/Quick/Quick.git", :tag => "v#{s.version}" } s.source_files = "Sources/Quick/**/*.{swift,h,m}" s.public_header_files = [ 'Sources/Quick/Configuration/QuickConfiguration.h', 'Sources/Quick/DSL/QCKDSL.h', 'Sources/Quick/Quick.h', 'Sources/Quick/QuickSpec.h', ] s.exclude_files = [ 'Sources/Quick/Configuration/QuickConfiguration.swift', 'Sources/Quick/QuickSpec.swift', 'Sources/Quick/QuickMain.swift', ] s.framework = "XCTest" s.requires_arc = true s.user_target_xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(PLATFORM_DIR)/Developer/Library/Frameworks' } s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' } end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; }; 1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; }; 1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; 1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; 1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; 1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; 1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; 1F118D001BDCA536005013A2 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; 1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; 1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; 1F118D031BDCA536005013A2 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; 1F118D041BDCA536005013A2 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; 1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; 1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; 1F118D071BDCA536005013A2 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; 1F118D081BDCA536005013A2 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; 1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; 1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; 1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; 1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; 1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; 1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; 1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; 1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; 1F118D121BDCA556005013A2 /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; 1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; 1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; 1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; 1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; 1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; 1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; 1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; 1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; 1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; 1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; 1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; 1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; 1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; 1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; 1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; 1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; 1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; 1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; 1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; 1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; 1F118D271BDCA5AF005013A2 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; 1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; 1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D341BDCA657005013A2 /* Nimble.framework */; }; 1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D361BDCA65C005013A2 /* Nimble.framework */; }; 1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; 1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; 1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; 34C586011C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586031C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586051C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; 34C586081C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; 34C586091C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; 34C5860A1C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; 34F375A719515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; 34F375A819515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; 34F375AB19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; 34F375AC19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; 34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; 34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; 34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; 34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; 34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; 34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; 34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; 34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; 34F375BB19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; 34F375BC19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; 470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; 470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; 471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; 471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; 4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; 4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; 4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; 4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; 4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; 4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; 47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; 47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; 479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; 479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; 47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; 47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; 5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; }; 5A5D11A7194740E000F6D13D /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7B44ADBE1C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; 7B44ADBF1C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; 7B44ADC01C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; 7B5358CE1C3D4FBC00A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; 7B5358CF1C3D4FBE00A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; 7B5358D01C3D4FC000A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; 8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; 8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; 8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; 96327C631C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; 96327C641C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; 96327C651C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; 96327C661C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; 96327C671C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; 96327C681C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; CE57CEDD1C430BD200D63004 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; CE57CEDE1C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; CE57CEDF1C430BD200D63004 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; CE57CEE01C430BD200D63004 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; CE57CEE11C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; CE590E1A1C431FE300253D19 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; CE590E1B1C431FE300253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; CE590E1C1C431FE300253D19 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; CE590E1D1C431FE300253D19 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; CE590E1E1C431FE300253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; CE590E1F1C431FE400253D19 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; CE590E201C431FE400253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; CE590E211C431FE400253D19 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; CE590E221C431FE400253D19 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; CE590E231C431FE400253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; DA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; DA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA169E4819FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; DA169E4919FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; DA3124E619FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; DA3124E719FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; DA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; DA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; DA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; DA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; DA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; DA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; DA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; DA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; DA408BE219FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; DA408BE319FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; DA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; DA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; DA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; DA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; DA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; }; DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; DA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; DA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; DA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; DA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; DA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; DA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; DA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; DA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; DA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; DA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; DA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; DA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; }; DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; DAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; DAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; DAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; DAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; DAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; DAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; DAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; DAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; DAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; DAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; DAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; DAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; DAEB6B941943873100289F44 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; }; DAED1EC41B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; DAED1EC51B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; DAED1ECA1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; DAED1ECB1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 047655511949F4CB00B288BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 047655531949F4CB00B288BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04765555194A327000B288BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F118CD41BDCA4AB005013A2; remoteInfo = "Quick-tvOS"; }; 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 1F118CD41BDCA4AB005013A2; remoteInfo = "Quick-tvOS"; }; 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = "Quick-OSX"; }; DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = 5A5D117B19473F2100F6D13D; remoteInfo = "Quick-iOS"; }; DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DAEB6B851943873100289F44 /* Project object */; proxyType = 1; remoteGlobalIDString = DAEB6B8D1943873100289F44; remoteInfo = Quick; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 1F118CD51BDCA4AB005013A2 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1F118D341BDCA657005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = "Externals/Nimble/build/Debug-appletvos/Nimble.framework"; sourceTree = ""; }; 1F118D361BDCA65C005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = "Externals/Nimble/build/Debug-appletvos/Nimble.framework"; sourceTree = ""; }; 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorUtility.swift; sourceTree = ""; }; 34F3759C19515CA700CE1B99 /* Callsite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Callsite.swift; sourceTree = ""; }; 34F3759E19515CA700CE1B99 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = ""; }; 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleGroup.swift; sourceTree = ""; }; 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+QCKSelectorName.h"; sourceTree = ""; }; 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+QCKSelectorName.m"; sourceTree = ""; }; 34F375A419515CA700CE1B99 /* QuickSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickSpec.h; sourceTree = ""; }; 34F375A519515CA700CE1B99 /* QuickSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickSpec.m; sourceTree = ""; }; 34F375A619515CA700CE1B99 /* World.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = World.swift; sourceTree = ""; }; 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AfterEachTests+ObjC.m"; sourceTree = ""; }; 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PendingTests+ObjC.m"; sourceTree = ""; }; 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SharedExamplesTests+ObjC.m"; sourceTree = ""; }; 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SharedExamples+BeforeEachTests+ObjC.m"; sourceTree = ""; }; 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AfterSuiteTests+ObjC.m"; sourceTree = ""; }; 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BeforeSuiteTests+ObjC.m"; sourceTree = ""; }; 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ItTests+ObjC.m"; sourceTree = ""; }; 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BeforeEachTests+ObjC.m"; sourceTree = ""; }; 5A5D117C19473F2100F6D13D /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HooksPhase.swift; sourceTree = ""; }; 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextTests.swift; sourceTree = ""; }; 8D010A561C11726F00633E2B /* DescribeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescribeTests.swift; sourceTree = ""; }; 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QuickSpec+QuickSpec_MethodList.h"; sourceTree = ""; }; 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "QuickSpec+QuickSpec_MethodList.m"; sourceTree = ""; }; AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+QCKSuspendObservation.m"; sourceTree = ""; }; AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossReferencingSpecs.swift; sourceTree = ""; }; CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSBundle+CurrentTestBundle.swift"; sourceTree = ""; }; CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickTestSuite.swift; sourceTree = ""; }; CE57CEDB1C430BD200D63004 /* String+FileName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+FileName.swift"; sourceTree = ""; }; CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; DA02C91819A8073100093156 /* ExampleMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleMetadata.swift; sourceTree = ""; }; DA05D60F19F73A3800771050 /* AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterEachTests.swift; sourceTree = ""; }; DA169E4719FF5DF100619816 /* Configuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; }; DA3124E219FCAEE8002858A7 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; DA3124E319FCAEE8002858A7 /* QCKDSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKDSL.h; sourceTree = ""; }; DA3124E419FCAEE8002858A7 /* QCKDSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKDSL.m; sourceTree = ""; }; DA3124E519FCAEE8002858A7 /* World+DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "World+DSL.swift"; sourceTree = ""; }; DA408BDF19FF5599005DF92A /* Closures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Closures.swift; sourceTree = ""; }; DA408BE019FF5599005DF92A /* ExampleHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleHooks.swift; sourceTree = ""; }; DA408BE119FF5599005DF92A /* SuiteHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuiteHooks.swift; sourceTree = ""; }; DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; DA6B30171A4DB0D500FFB148 /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = ""; }; DA7AE6F019FC493F000AFDCE /* ItTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItTests.swift; sourceTree = ""; }; DA87078219F48775008C04AC /* BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeEachTests.swift; sourceTree = ""; }; DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureUsingXCTAssertTests+ObjC.m"; sourceTree = ""; }; DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfigurationTests.m; sourceTree = ""; }; DA8F919519F31680006F6675 /* QCKSpecRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKSpecRunner.h; sourceTree = ""; }; DA8F919619F31680006F6675 /* QCKSpecRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKSpecRunner.m; sourceTree = ""; }; DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTestsBridgingHeader.h; sourceTree = ""; }; DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestObservationCenter+QCKSuspendObservation.h"; sourceTree = ""; }; DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureTests+ObjC.m"; sourceTree = ""; }; DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeSuiteTests.swift; sourceTree = ""; }; DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterSuiteTests.swift; sourceTree = ""; }; DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedExamplesTests.swift; sourceTree = ""; }; DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FunctionalTests_SharedExamplesTests_SharedExamples.swift; sourceTree = ""; }; DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; DA9876BF1A4C87200004AA17 /* FocusedTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FocusedTests.swift; sourceTree = ""; }; DA9876C01A4C87200004AA17 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DAA63EA219F7637300CD0A3B /* PendingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingTests.swift; sourceTree = ""; }; DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SharedExamples+BeforeEachTests.swift"; sourceTree = ""; }; DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+BeforeEachTests.swift"; sourceTree = ""; }; DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+BeforeEach.swift"; sourceTree = ""; }; DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+AfterEach.swift"; sourceTree = ""; }; DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+AfterEachTests.swift"; sourceTree = ""; }; DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickConfiguration.h; sourceTree = ""; }; DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfiguration.m; sourceTree = ""; }; DAEB6B8E1943873100289F44 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DAEB6B921943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DAEB6B931943873100289F44 /* Quick.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quick.h; sourceTree = ""; }; DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; DAEB6B9F1943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DAED1EC21B1105BC006F61EC /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = ""; }; DAED1EC81B110699006F61EC /* World+DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "World+DSL.h"; sourceTree = ""; }; DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FocusedTests+ObjC.m"; sourceTree = ""; }; F8100E901A1E4447007595ED /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 1F118CD11BDCA4AB005013A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CDB1BDCA4AB005013A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */, 1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CED1BDCA4BB005013A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */, 1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117819473F2100F6D13D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D118319473F2100F6D13D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */, DA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; DA5663E51A4C8D8500193C88 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( DA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */, 1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; DA9876AF1A4C70EB0004AA17 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( DA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */, DAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B8A1943873100289F44 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B961943873100289F44 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( DA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */, DAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1F118D331BDCA645005013A2 /* Frameworks */ = { isa = PBXGroup; children = ( 1F118D361BDCA65C005013A2 /* Nimble.framework */, 1F118D341BDCA657005013A2 /* Nimble.framework */, ); name = Frameworks; sourceTree = ""; }; DA169E4619FF5DF100619816 /* Configuration */ = { isa = PBXGroup; children = ( DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */, DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */, DA169E4719FF5DF100619816 /* Configuration.swift */, ); path = Configuration; sourceTree = ""; }; DA3124E119FCAEE8002858A7 /* DSL */ = { isa = PBXGroup; children = ( DA3124E519FCAEE8002858A7 /* World+DSL.swift */, DAED1EC81B110699006F61EC /* World+DSL.h */, DA3124E219FCAEE8002858A7 /* DSL.swift */, DA3124E319FCAEE8002858A7 /* QCKDSL.h */, DA3124E419FCAEE8002858A7 /* QCKDSL.m */, ); path = DSL; sourceTree = ""; }; DA408BDE19FF5599005DF92A /* Hooks */ = { isa = PBXGroup; children = ( DA408BDF19FF5599005DF92A /* Closures.swift */, DA408BE019FF5599005DF92A /* ExampleHooks.swift */, DA408BE119FF5599005DF92A /* SuiteHooks.swift */, 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */, ); path = Hooks; sourceTree = ""; }; DA8F919419F31680006F6675 /* Helpers */ = { isa = PBXGroup; children = ( DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */, DA8F919519F31680006F6675 /* QCKSpecRunner.h */, DA8F919619F31680006F6675 /* QCKSpecRunner.m */, 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */, DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */, 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */, 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */, AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */, ); path = Helpers; sourceTree = ""; }; DA8F919B19F3189D006F6675 /* FunctionalTests */ = { isa = PBXGroup; children = ( DAE714E919FF65A6005905B8 /* Configuration */, DA7AE6F019FC493F000AFDCE /* ItTests.swift */, 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */, 8D010A561C11726F00633E2B /* DescribeTests.swift */, DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */, DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */, DA87078219F48775008C04AC /* BeforeEachTests.swift */, 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */, DA05D60F19F73A3800771050 /* AfterEachTests.swift */, 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */, DAA63EA219F7637300CD0A3B /* PendingTests.swift */, 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */, DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */, 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */, DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */, 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */, DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */, 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */, DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */, 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */, 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */, AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */, ); path = FunctionalTests; sourceTree = ""; }; DA9876BE1A4C87200004AA17 /* QuickFocusedTests */ = { isa = PBXGroup; children = ( DA9876BF1A4C87200004AA17 /* FocusedTests.swift */, DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */, DA9876C31A4C87310004AA17 /* Supporting Files */, ); name = QuickFocusedTests; path = Sources/QuickFocusedTests; sourceTree = ""; }; DA9876C31A4C87310004AA17 /* Supporting Files */ = { isa = PBXGroup; children = ( DA9876C01A4C87200004AA17 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; DAE714E919FF65A6005905B8 /* Configuration */ = { isa = PBXGroup; children = ( DAE714F519FF67FF005905B8 /* AfterEach */, DAE714EA19FF65A6005905B8 /* BeforeEach */, ); path = Configuration; sourceTree = ""; }; DAE714EA19FF65A6005905B8 /* BeforeEach */ = { isa = PBXGroup; children = ( DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */, DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */, ); path = BeforeEach; sourceTree = ""; }; DAE714F519FF67FF005905B8 /* AfterEach */ = { isa = PBXGroup; children = ( DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */, DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */, ); path = AfterEach; sourceTree = ""; }; DAEB6B841943873100289F44 = { isa = PBXGroup; children = ( DAEB6B901943873100289F44 /* Quick */, DAEB6B9D1943873100289F44 /* QuickTests */, DA9876BE1A4C87200004AA17 /* QuickFocusedTests */, DAEB6B8F1943873100289F44 /* Products */, 1F118D331BDCA645005013A2 /* Frameworks */, ); indentWidth = 4; sourceTree = ""; tabWidth = 4; }; DAEB6B8F1943873100289F44 /* Products */ = { isa = PBXGroup; children = ( DAEB6B8E1943873100289F44 /* Quick.framework */, DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */, 5A5D117C19473F2100F6D13D /* Quick.framework */, 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */, DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */, DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */, 1F118CD51BDCA4AB005013A2 /* Quick.framework */, 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */, 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; DAEB6B901943873100289F44 /* Quick */ = { isa = PBXGroup; children = ( DA169E4619FF5DF100619816 /* Configuration */, DA3124E119FCAEE8002858A7 /* DSL */, DA408BDE19FF5599005DF92A /* Hooks */, DAEB6B931943873100289F44 /* Quick.h */, 34F375A619515CA700CE1B99 /* World.swift */, DAED1EC21B1105BC006F61EC /* World.h */, 34F3759E19515CA700CE1B99 /* Example.swift */, DA02C91819A8073100093156 /* ExampleMetadata.swift */, 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */, 34F3759C19515CA700CE1B99 /* Callsite.swift */, DA6B30171A4DB0D500FFB148 /* Filter.swift */, 34F375A419515CA700CE1B99 /* QuickSpec.h */, 34F375A519515CA700CE1B99 /* QuickSpec.m */, CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */, CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */, CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */, 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */, 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */, CE57CEDB1C430BD200D63004 /* String+FileName.swift */, CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */, 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */, DAEB6B911943873100289F44 /* Supporting Files */, ); name = Quick; path = Sources/Quick; sourceTree = ""; }; DAEB6B911943873100289F44 /* Supporting Files */ = { isa = PBXGroup; children = ( DAEB6B921943873100289F44 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; DAEB6B9D1943873100289F44 /* QuickTests */ = { isa = PBXGroup; children = ( DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */, DA8F919419F31680006F6675 /* Helpers */, DAEB6BCD194387D700289F44 /* Fixtures */, DA8F919B19F3189D006F6675 /* FunctionalTests */, F8100E941A1E4469007595ED /* Frameworks */, DAEB6B9E1943873100289F44 /* Supporting Files */, ); name = QuickTests; path = Sources/QuickTests; sourceTree = ""; }; DAEB6B9E1943873100289F44 /* Supporting Files */ = { isa = PBXGroup; children = ( DAEB6B9F1943873100289F44 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; DAEB6BCD194387D700289F44 /* Fixtures */ = { isa = PBXGroup; children = ( DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */, ); path = Fixtures; sourceTree = ""; }; F8100E941A1E4469007595ED /* Frameworks */ = { isa = PBXGroup; children = ( F8100E901A1E4447007595ED /* Nimble.framework */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 1F118CD21BDCA4AB005013A2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */, 1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */, 96327C651C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, 1F118D271BDCA5AF005013A2 /* World.h in Headers */, 1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */, 1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */, 1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */, 1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117919473F2100F6D13D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */, DAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */, 96327C641C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, DA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */, DAED1ECB1B110699006F61EC /* World+DSL.h in Headers */, DAED1EC51B1105BC006F61EC /* World.h in Headers */, 34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */, 5A5D11A7194740E000F6D13D /* Quick.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B8B1943873100289F44 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */, DAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */, 96327C631C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, DA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */, DAED1ECA1B110699006F61EC /* World+DSL.h in Headers */, DAED1EC41B1105BC006F61EC /* World.h in Headers */, 34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */, DAEB6B941943873100289F44 /* Quick.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOS" */; buildPhases = ( 1F118CD01BDCA4AB005013A2 /* Sources */, 1F118CD11BDCA4AB005013A2 /* Frameworks */, 1F118CD21BDCA4AB005013A2 /* Headers */, 1F118CD31BDCA4AB005013A2 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Quick-tvOS"; productName = "Quick-tvOS"; productReference = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; productType = "com.apple.product-type.framework"; }; 1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOSTests" */; buildPhases = ( 1F118CDA1BDCA4AB005013A2 /* Sources */, 1F118CDB1BDCA4AB005013A2 /* Frameworks */, 1F118CDC1BDCA4AB005013A2 /* Resources */, ); buildRules = ( ); dependencies = ( 1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */, ); name = "Quick-tvOSTests"; productName = "Quick-tvOSTests"; productReference = 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget "QuickFocused-tvOSTests" */; buildPhases = ( 1F118CEC1BDCA4BB005013A2 /* Sources */, 1F118CED1BDCA4BB005013A2 /* Frameworks */, 1F118CEE1BDCA4BB005013A2 /* Resources */, ); buildRules = ( ); dependencies = ( 1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */, ); name = "QuickFocused-tvOSTests"; productName = "QuickFocused-tvOSTests"; productReference = 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 5A5D117B19473F2100F6D13D /* Quick-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOS" */; buildPhases = ( 5A5D117719473F2100F6D13D /* Sources */, 5A5D117819473F2100F6D13D /* Frameworks */, 5A5D117919473F2100F6D13D /* Headers */, 5A5D117A19473F2100F6D13D /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Quick-iOS"; productName = "Quick-iOS"; productReference = 5A5D117C19473F2100F6D13D /* Quick.framework */; productType = "com.apple.product-type.framework"; }; 5A5D118519473F2100F6D13D /* Quick-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOSTests" */; buildPhases = ( 5A5D118219473F2100F6D13D /* Sources */, 5A5D118319473F2100F6D13D /* Frameworks */, 5A5D118419473F2100F6D13D /* Resources */, ); buildRules = ( ); dependencies = ( 5A5D118919473F2100F6D13D /* PBXTargetDependency */, 5A5D11F0194741B500F6D13D /* PBXTargetDependency */, 5A5D11F2194741B500F6D13D /* PBXTargetDependency */, 04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */, 04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */, 04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */, 04DC97F7194B831200CE00B6 /* PBXTargetDependency */, 04DC97FB194B834100CE00B6 /* PBXTargetDependency */, 04DC97FF194B835E00CE00B6 /* PBXTargetDependency */, 04DC9803194B836300CE00B6 /* PBXTargetDependency */, 04DC9807194B838700CE00B6 /* PBXTargetDependency */, ); name = "Quick-iOSTests"; productName = "Quick-iOSTests"; productReference = 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; DA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget "QuickFocused-OSXTests" */; buildPhases = ( DA5663E41A4C8D8500193C88 /* Sources */, DA5663E51A4C8D8500193C88 /* Frameworks */, DA5663E61A4C8D8500193C88 /* Resources */, ); buildRules = ( ); dependencies = ( DA5663F01A4C8D8500193C88 /* PBXTargetDependency */, ); name = "QuickFocused-OSXTests"; productName = "QuickFocused-OSXTests"; productReference = DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; DA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget "QuickFocused-iOSTests" */; buildPhases = ( DA9876AE1A4C70EB0004AA17 /* Sources */, DA9876AF1A4C70EB0004AA17 /* Frameworks */, DA9876B01A4C70EB0004AA17 /* Resources */, ); buildRules = ( ); dependencies = ( DA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */, ); name = "QuickFocused-iOSTests"; productName = "QuickFocused-iOSTests"; productReference = DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; DAEB6B8D1943873100289F44 /* Quick-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSX" */; buildPhases = ( DAEB6B891943873100289F44 /* Sources */, DAEB6B8A1943873100289F44 /* Frameworks */, DAEB6B8B1943873100289F44 /* Headers */, DAEB6B8C1943873100289F44 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Quick-OSX"; productName = Quick; productReference = DAEB6B8E1943873100289F44 /* Quick.framework */; productType = "com.apple.product-type.framework"; }; DAEB6B981943873100289F44 /* Quick-OSXTests */ = { isa = PBXNativeTarget; buildConfigurationList = DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSXTests" */; buildPhases = ( DAEB6B951943873100289F44 /* Sources */, DAEB6B961943873100289F44 /* Frameworks */, DAEB6B971943873100289F44 /* Resources */, ); buildRules = ( ); dependencies = ( DAEB6B9C1943873100289F44 /* PBXTargetDependency */, 047655521949F4CB00B288BB /* PBXTargetDependency */, 047655541949F4CB00B288BB /* PBXTargetDependency */, 04765556194A327000B288BB /* PBXTargetDependency */, 04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */, 04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */, 04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */, 04DC97F9194B834000CE00B6 /* PBXTargetDependency */, 04DC97FD194B834B00CE00B6 /* PBXTargetDependency */, 04DC9801194B836100CE00B6 /* PBXTargetDependency */, 04DC9805194B838400CE00B6 /* PBXTargetDependency */, 04DC9809194B838B00CE00B6 /* PBXTargetDependency */, 93625F391951DDC8006B1FE1 /* PBXTargetDependency */, ); name = "Quick-OSXTests"; productName = QuickTests; productReference = DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ DAEB6B851943873100289F44 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; LastUpgradeCheck = 0700; ORGANIZATIONNAME = "Brian Ivan Gesiak"; TargetAttributes = { 1F118CD41BDCA4AB005013A2 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F118CDD1BDCA4AB005013A2 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 1F118CEF1BDCA4BB005013A2 = { CreatedOnToolsVersion = 7.1; LastSwiftMigration = 0800; }; 5A5D117B19473F2100F6D13D = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; 5A5D118519473F2100F6D13D = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = 5A5D117B19473F2100F6D13D; }; DA5663E71A4C8D8500193C88 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; DA9876B11A4C70EB0004AA17 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; DAEB6B8D1943873100289F44 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; DAEB6B981943873100289F44 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; TestTargetID = DAEB6B8D1943873100289F44; }; }; }; buildConfigurationList = DAEB6B881943873100289F44 /* Build configuration list for PBXProject "Quick" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = DAEB6B841943873100289F44; productRefGroup = DAEB6B8F1943873100289F44 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( DAEB6B8D1943873100289F44 /* Quick-OSX */, DAEB6B981943873100289F44 /* Quick-OSXTests */, DA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */, 5A5D117B19473F2100F6D13D /* Quick-iOS */, 5A5D118519473F2100F6D13D /* Quick-iOSTests */, DA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */, 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */, 1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */, 1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 1F118CD31BDCA4AB005013A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CDC1BDCA4AB005013A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CEE1BDCA4BB005013A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117A19473F2100F6D13D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D118419473F2100F6D13D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DA5663E61A4C8D8500193C88 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DA9876B01A4C70EB0004AA17 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B8C1943873100289F44 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B971943873100289F44 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 1F118CD01BDCA4AB005013A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 96327C681C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, 1F118D031BDCA536005013A2 /* World.swift in Sources */, CE590E201C431FE400253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */, 1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */, 1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */, 1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */, 34C5860A1C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, 1F118D041BDCA536005013A2 /* Example.swift in Sources */, 1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */, CE590E211C431FE400253D19 /* NSBundle+CurrentTestBundle.swift in Sources */, 1F118D071BDCA536005013A2 /* Callsite.swift in Sources */, CE590E231C431FE400253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, 1F118D081BDCA536005013A2 /* Filter.swift in Sources */, 1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */, CE590E221C431FE400253D19 /* String+FileName.swift in Sources */, 1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */, 1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */, 7B44ADC01C5444940007AF2E /* HooksPhase.swift in Sources */, 1F118D001BDCA536005013A2 /* Closures.swift in Sources */, 1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */, 1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */, CE590E1F1C431FE400253D19 /* QuickTestSuite.swift in Sources */, 1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */, 1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CDA1BDCA4AB005013A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */, 1F118D121BDCA556005013A2 /* ItTests.swift in Sources */, 1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */, 1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */, 1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */, 1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */, 1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, 1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */, 1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */, 1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */, 1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */, 1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, 1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, 1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */, 1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */, 1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */, AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, 1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */, 1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */, 1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */, 1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */, 1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */, 1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */, 34C586051C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */, 8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */, 1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */, 1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */, 1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */, 7B5358D01C3D4FC000A23FAA /* ContextTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 1F118CEC1BDCA4BB005013A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */, 34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */, 1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */, 1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */, AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D117719473F2100F6D13D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 96327C671C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, 34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */, CE590E1B1C431FE300253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */, DA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */, DA408BE319FF5599005DF92A /* Closures.swift in Sources */, DA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */, 34C586091C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, DA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */, 34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */, CE590E1C1C431FE300253D19 /* NSBundle+CurrentTestBundle.swift in Sources */, DAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */, CE590E1E1C431FE300253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, 34F375A819515CA700CE1B99 /* Callsite.swift in Sources */, 34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */, CE590E1D1C431FE300253D19 /* String+FileName.swift in Sources */, 34F375BC19515CA700CE1B99 /* World.swift in Sources */, DA169E4919FF5DF100619816 /* Configuration.swift in Sources */, 7B44ADBF1C5444940007AF2E /* HooksPhase.swift in Sources */, DA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */, DA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */, 34F375AC19515CA700CE1B99 /* Example.swift in Sources */, CE590E1A1C431FE300253D19 /* QuickTestSuite.swift in Sources */, DA3124E719FCAEE8002858A7 /* DSL.swift in Sources */, DA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 5A5D118219473F2100F6D13D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */, DAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */, DA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */, DA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, 4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */, DAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */, DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */, DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */, DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */, DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */, DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */, DA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */, DA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */, 4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */, AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, 471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */, DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */, DAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */, DA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */, 4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */, 479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */, 34C586031C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */, 8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */, 47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */, 470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */, 47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */, 7B5358CF1C3D4FBE00A23FAA /* ContextTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DA5663E41A4C8D8500193C88 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */, 34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */, DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */, DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */, AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DA9876AE1A4C70EB0004AA17 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */, 34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */, DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */, DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */, AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B891943873100289F44 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 96327C661C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, 34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */, CE57CEDE1C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift in Sources */, DA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */, DA408BE219FF5599005DF92A /* Closures.swift in Sources */, CE57CEDD1C430BD200D63004 /* NSBundle+CurrentTestBundle.swift in Sources */, DA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */, CE57CEDF1C430BD200D63004 /* QuickTestSuite.swift in Sources */, 34C586081C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, DA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */, 34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */, CE57CEE11C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, DAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */, 34F375A719515CA700CE1B99 /* Callsite.swift in Sources */, CE57CEE01C430BD200D63004 /* String+FileName.swift in Sources */, 34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */, 34F375BB19515CA700CE1B99 /* World.swift in Sources */, DA169E4819FF5DF100619816 /* Configuration.swift in Sources */, 7B44ADBE1C5444940007AF2E /* HooksPhase.swift in Sources */, DA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */, DA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */, 34F375AB19515CA700CE1B99 /* Example.swift in Sources */, DA3124E619FCAEE8002858A7 /* DSL.swift in Sources */, DA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; DAEB6B951943873100289F44 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( DAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */, DAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */, DA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */, DA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, 4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */, DAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */, DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */, DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */, DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */, DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */, DAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */, DA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */, DA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */, 4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */, AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, 471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */, DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */, DAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */, DA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */, 4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */, 479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */, 34C586011C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */, 8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */, 47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */, 470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */, 47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */, 7B5358CE1C3D4FBC00A23FAA /* ContextTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 047655521949F4CB00B288BB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 047655511949F4CB00B288BB /* PBXContainerItemProxy */; }; 047655541949F4CB00B288BB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 047655531949F4CB00B288BB /* PBXContainerItemProxy */; }; 04765556194A327000B288BB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04765555194A327000B288BB /* PBXContainerItemProxy */; }; 04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */; }; 04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */; }; 04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */; }; 04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */; }; 04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */; }; 04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */; }; 04DC97F7194B831200CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */; }; 04DC97F9194B834000CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */; }; 04DC97FB194B834100CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */; }; 04DC97FD194B834B00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */; }; 04DC97FF194B835E00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */; }; 04DC9801194B836100CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */; }; 04DC9803194B836300CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */; }; 04DC9805194B838400CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */; }; 04DC9807194B838700CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */; }; 04DC9809194B838B00CE00B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */; }; 1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */; targetProxy = 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */; }; 1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */; targetProxy = 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */; }; 5A5D118919473F2100F6D13D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */; }; 5A5D11F0194741B500F6D13D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */; }; 5A5D11F2194741B500F6D13D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */; }; 93625F391951DDC8006B1FE1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */; }; DA5663F01A4C8D8500193C88 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */; }; DA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; targetProxy = DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */; }; DAEB6B9C1943873100289F44 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DAEB6B8D1943873100289F44 /* Quick-OSX */; targetProxy = DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1F118CE71BDCA4AB005013A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Quick; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F118CE81BDCA4AB005013A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = Quick; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 1F118CEA1BDCA4AB005013A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F118CEB1BDCA4AB005013A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 1F118CF91BDCA4BC005013A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 1F118CFA1BDCA4BC005013A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", ); GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 5A5D118F19473F2100F6D13D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SDKROOT = iphoneos; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; 5A5D119019473F2100F6D13D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SDKROOT = iphoneos; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; }; name = Release; }; 5A5D119119473F2100F6D13D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 5A5D119219473F2100F6D13D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; VALIDATE_PRODUCT = YES; }; name = Release; }; DA5663F11A4C8D8500193C88 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; DA5663F21A4C8D8500193C88 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; }; name = Release; }; DA9876BB1A4C70EB0004AA17 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; DA9876BC1A4C70EB0004AA17 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; VALIDATE_PRODUCT = YES; }; name = Release; }; DAEB6BA21943873200289F44 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; 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_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_MISSING_NEWLINE = 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; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; DAEB6BA31943873200289F44 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = 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; MACOSX_DEPLOYMENT_TARGET = 10.9; METAL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; DAEB6BA51943873200289F44 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; DAEB6BA61943873200289F44 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = Sources/Quick/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_MODULE_NAME = Quick; PRODUCT_NAME = Quick; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; DAEB6BA81943873200289F44 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; METAL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; DAEB6BA91943873200289F44 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Sources/QuickTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; METAL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F118CE71BDCA4AB005013A2 /* Debug */, 1F118CE81BDCA4AB005013A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F118CEA1BDCA4AB005013A2 /* Debug */, 1F118CEB1BDCA4AB005013A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget "QuickFocused-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 1F118CF91BDCA4BC005013A2 /* Debug */, 1F118CFA1BDCA4BC005013A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 5A5D118F19473F2100F6D13D /* Debug */, 5A5D119019473F2100F6D13D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 5A5D119119473F2100F6D13D /* Debug */, 5A5D119219473F2100F6D13D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget "QuickFocused-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( DA5663F11A4C8D8500193C88 /* Debug */, DA5663F21A4C8D8500193C88 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget "QuickFocused-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( DA9876BB1A4C70EB0004AA17 /* Debug */, DA9876BC1A4C70EB0004AA17 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DAEB6B881943873100289F44 /* Build configuration list for PBXProject "Quick" */ = { isa = XCConfigurationList; buildConfigurations = ( DAEB6BA21943873200289F44 /* Debug */, DAEB6BA31943873200289F44 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( DAEB6BA51943873200289F44 /* Debug */, DAEB6BA61943873200289F44 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSXTests" */ = { isa = XCConfigurationList; buildConfigurations = ( DAEB6BA81943873200289F44 /* Debug */, DAEB6BA91943873200289F44 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = DAEB6B851943873100289F44 /* Project object */; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/README.md ================================================ ![](http://f.cl.ly/items/0r1E192C1R0b2g2Q3h2w/QuickLogo_Color.png) Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by [RSpec](https://github.com/rspec/rspec), [Specta](https://github.com/specta/specta), and [Ginkgo](https://github.com/onsi/ginkgo). ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/QuickSpec%20screenshot.png) ```swift // Swift import Quick import Nimble class TableOfContentsSpec: QuickSpec { override func spec() { describe("the 'Documentation' directory") { it("has everything you need to get started") { let sections = Directory("Documentation").sections expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups")) expect(sections).to(contain("Installing Quick")) } context("if it doesn't have what you're looking for") { it("needs to be updated") { let you = You(awesome: true) expect{you.submittedAnIssue}.toEventually(beTruthy()) } } } } } ``` #### Nimble Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/en-us/NimbleAssertions.md). ## Documentation All documentation can be found in the [Documentation folder](./Documentation), including [detailed installation instructions](./Documentation/en-us/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your Podfile: ```rb # Podfile use_frameworks! def testing_pods pod 'Quick' pod 'Nimble' end target 'MyTests' do testing_pods end target 'MyUITests' do testing_pods end ``` ## License Apache 2.0 license. See the `LICENSE` file for details. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Rakefile ================================================ def run(command) system(command) or raise "RAKE TASK FAILED: #{command}" end def has_xcodebuild system "which xcodebuild >/dev/null" end namespace "podspec" do desc "Run lint for podspec" task :lint do run "bundle exec pod lib lint" end end namespace "test" do desc "Run unit tests for all iOS targets" task :ios do |t| run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-iOS -destination 'platform=iOS Simulator,name=iPhone 6' clean test" end desc "Run unit tests for all tvOS targets" task :tvos do |t| run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-tvOS -destination 'platform=tvOS Simulator,name=Apple TV 1080p' clean test" end desc "Run unit tests for all OS X targets" task :osx do |t| run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-OSX clean test" end desc "Run unit tests for all iOS, tvOS and OS X targets using xctool" task xctool: %w[test:xctool:version test:xctool:ios test:xctool:tvos test:xctool:osx] namespace :xctool do desc "Run unit tests for all iOS targets using xctool" task :ios do |t| Rake::Task["test:xctool:version"].invoke run "xctool -workspace Quick.xcworkspace -scheme Quick-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' clean test" end desc "Run unit tests for all tvOS targets using xctool" task :tvos do |t| Rake::Task["test:xctool:version"].invoke run "xctool -workspace Quick.xcworkspace -scheme Quick-tvOS -sdk appletvsimulator -destination 'platform=tvOS Simulator,name=Apple TV 1080p' clean test" end desc "Run unit tests for all OS X targets using xctool" task :osx do |t| Rake::Task["test:xctool:version"].invoke run "xctool -workspace Quick.xcworkspace -scheme Quick-OSX clean test" end desc "Print the version of xctool being used" task :version do run "echo Using xctool v`xctool -v`..." end end desc "Run unit tests for the current platform built by the Swift Package Manager" task :swiftpm do |t| run "swift build --clean && swift build" run ".build/debug/QuickTests" run ".build/debug/QuickFocusedTests" end end namespace "templates" do install_dir = File.expand_path("~/Library/Developer/Xcode/Templates/File Templates/Quick") src_dir = File.expand_path("../Quick Templates", __FILE__) desc "Install Quick templates" task :install do if File.exists? install_dir raise "RAKE TASK FAILED: Quick templates are already installed at #{install_dir}" else mkdir_p install_dir cp_r src_dir, install_dir end end desc "Uninstall Quick templates" task :uninstall do rm_rf install_dir end end if has_xcodebuild then task default: ["test:ios", "test:tvos", "test:osx"] else task default: ["test:swiftpm"] end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Callsite.swift ================================================ import Foundation /** An object encapsulating the file and line number at which a particular example is defined. */ final public class Callsite: NSObject { /** The absolute path of the file in which an example is defined. */ public let file: String /** The line number on which an example is defined. */ public let line: UInt internal init(file: String, line: UInt) { self.file = file self.line = line } } /** Returns a boolean indicating whether two Callsite objects are equal. If two callsites are in the same file and on the same line, they must be equal. */ public func ==(lhs: Callsite, rhs: Callsite) -> Bool { return lhs.file == rhs.file && lhs.line == rhs.line } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Configuration/Configuration.swift ================================================ import Foundation /** A closure that temporarily exposes a Configuration object within the scope of the closure. */ public typealias QuickConfigurer = (configuration: Configuration) -> () /** A closure that, given metadata about an example, returns a boolean value indicating whether that example should be run. */ public typealias ExampleFilter = (example: Example) -> Bool /** A configuration encapsulates various options you can use to configure Quick's behavior. */ final public class Configuration: NSObject { internal let exampleHooks = ExampleHooks() internal let suiteHooks = SuiteHooks() internal var exclusionFilters: [ExampleFilter] = [{ example in if let pending = example.filterFlags[Filter.pending] { return pending } else { return false } }] internal var inclusionFilters: [ExampleFilter] = [{ example in if let focused = example.filterFlags[Filter.focused] { return focused } else { return false } }] /** Run all examples if none match the configured filters. True by default. */ public var runAllWhenEverythingFiltered = true /** Registers an inclusion filter. All examples are filtered using all inclusion filters. The remaining examples are run. If no examples remain, all examples are run. - parameter filter: A filter that, given an example, returns a value indicating whether that example should be included in the examples that are run. */ public func include(filter: ExampleFilter) { inclusionFilters.append(filter) } /** Registers an exclusion filter. All examples that remain after being filtered by the inclusion filters are then filtered via all exclusion filters. - parameter filter: A filter that, given an example, returns a value indicating whether that example should be excluded from the examples that are run. */ public func exclude(filter: ExampleFilter) { exclusionFilters.append(filter) } /** Identical to Quick.Configuration.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. */ #if _runtime(_ObjC) @objc(beforeEachWithMetadata:) public func beforeEach(closure: BeforeExampleWithMetadataClosure) { exampleHooks.appendBefore(closure) } #else public func beforeEach(closure: BeforeExampleWithMetadataClosure) { exampleHooks.appendBefore(closure) } #endif /** Like Quick.DSL.beforeEach, this configures Quick to execute the given closure before each example that is run. The closure passed to this method is executed before each example Quick runs, globally across the test suite. You may call this method multiple times across mulitple +[QuickConfigure configure:] methods in order to define several closures to run before each example. Note that, since Quick makes no guarantee as to the order in which +[QuickConfiguration configure:] methods are evaluated, there is no guarantee as to the order in which beforeEach closures are evaluated either. Mulitple beforeEach defined on a single configuration, however, will be executed in the order they're defined. - parameter closure: The closure to be executed before each example in the test suite. */ public func beforeEach(closure: BeforeExampleClosure) { exampleHooks.appendBefore(closure) } /** Identical to Quick.Configuration.afterEach, except the closure is provided with metadata on the example that the closure is being run after. */ #if _runtime(_ObjC) @objc(afterEachWithMetadata:) public func afterEach(closure: AfterExampleWithMetadataClosure) { exampleHooks.appendAfter(closure) } #else public func afterEach(closure: AfterExampleWithMetadataClosure) { exampleHooks.appendAfter(closure) } #endif /** Like Quick.DSL.afterEach, this configures Quick to execute the given closure after each example that is run. The closure passed to this method is executed after each example Quick runs, globally across the test suite. You may call this method multiple times across mulitple +[QuickConfigure configure:] methods in order to define several closures to run after each example. Note that, since Quick makes no guarantee as to the order in which +[QuickConfiguration configure:] methods are evaluated, there is no guarantee as to the order in which afterEach closures are evaluated either. Mulitple afterEach defined on a single configuration, however, will be executed in the order they're defined. - parameter closure: The closure to be executed before each example in the test suite. */ public func afterEach(closure: AfterExampleClosure) { exampleHooks.appendAfter(closure) } /** Like Quick.DSL.beforeSuite, this configures Quick to execute the given closure prior to any and all examples that are run. The two methods are functionally equivalent. */ public func beforeSuite(closure: BeforeSuiteClosure) { suiteHooks.appendBefore(closure) } /** Like Quick.DSL.afterSuite, this configures Quick to execute the given closure after all examples have been run. The two methods are functionally equivalent. */ public func afterSuite(closure: AfterSuiteClosure) { suiteHooks.appendAfter(closure) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.h ================================================ #import @class Configuration; /** Subclass QuickConfiguration and override the +[QuickConfiguration configure:] method in order to configure how Quick behaves when running specs, or to define shared examples that are used across spec files. */ @interface QuickConfiguration : NSObject /** This method is executed on each subclass of this class before Quick runs any examples. You may override this method on as many subclasses as you like, but there is no guarantee as to the order in which these methods are executed. You can override this method in order to: 1. Configure how Quick behaves, by modifying properties on the Configuration object. Setting the same properties in several methods has undefined behavior. 2. Define shared examples using `sharedExamples`. @param configuration A mutable object that is used to configure how Quick behaves on a framework level. For details on all the options, see the documentation in Configuration.swift. */ + (void)configure:(Configuration *)configuration; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.m ================================================ #import "QuickConfiguration.h" #import "World.h" #import typedef void (^QCKClassEnumerationBlock)(Class klass); /** Finds all direct subclasses of the given class and passes them to the block provided. The classes are iterated over in the order that objc_getClassList returns them. @param klass The base class to find subclasses of. @param block A block that takes a Class. This block will be executed once for each subclass of klass. */ void qck_enumerateSubclasses(Class klass, QCKClassEnumerationBlock block) { Class *classes = NULL; int classesCount = objc_getClassList(NULL, 0); if (classesCount > 0) { classes = (Class *)calloc(sizeof(Class), classesCount); classesCount = objc_getClassList(classes, classesCount); Class subclass, superclass; for(int i = 0; i < classesCount; i++) { subclass = classes[i]; superclass = class_getSuperclass(subclass); if (superclass == klass && block) { block(subclass); } } free(classes); } } @implementation QuickConfiguration #pragma mark - Object Lifecycle /** QuickConfiguration is not meant to be instantiated; it merely provides a hook for users to configure how Quick behaves. Raise an exception if an instance of QuickConfiguration is created. */ - (instancetype)init { NSString *className = NSStringFromClass([self class]); NSString *selectorName = NSStringFromSelector(@selector(configure:)); [NSException raise:NSInternalInconsistencyException format:@"%@ is not meant to be instantiated; " @"subclass %@ and override %@ to configure Quick.", className, className, selectorName]; return nil; } #pragma mark - NSObject Overrides /** Hook into when QuickConfiguration is initialized in the runtime in order to call +[QuickConfiguration configure:] on each of its subclasses. */ + (void)initialize { // Only enumerate over the subclasses of QuickConfiguration, not any of its subclasses. if ([self class] == [QuickConfiguration class]) { // Only enumerate over subclasses once, even if +[QuickConfiguration initialize] // were to be called several times. This is necessary because +[QuickSpec initialize] // manually calls +[QuickConfiguration initialize]. static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ qck_enumerateSubclasses([QuickConfiguration class], ^(__unsafe_unretained Class klass) { [[World sharedWorld] configure:^(Configuration *configuration) { [klass configure:configuration]; }]; }); [[World sharedWorld] finalizeConfiguration]; }); } } #pragma mark - Public Interface + (void)configure:(Configuration *)configuration { } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.swift ================================================ import XCTest // NOTE: This file is not intended to be included in the Xcode project or CocoaPods. // It is picked up by the Swift Package Manager during its build process. public class QuickConfiguration { public class func configure(configuration: Configuration) {} } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/DSL/DSL.swift ================================================ /** Defines a closure to be run prior to any examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before the first example is run, this closure will not be executed. - parameter closure: The closure to be run prior to any examples in the test suite. */ public func beforeSuite(closure: BeforeSuiteClosure) { World.sharedWorld.beforeSuite(closure) } /** Defines a closure to be run after all of the examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before all examples are run, this closure will not be executed. - parameter closure: The closure to be run after all of the examples in the test suite. */ public func afterSuite(closure: AfterSuiteClosure) { World.sharedWorld.afterSuite(closure) } /** Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. - parameter name: The name of the shared example group. This must be unique across all shared example groups defined in a test suite. - parameter closure: A closure containing the examples. This behaves just like an example group defined using `describe` or `context`--the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). */ public func sharedExamples(name: String, closure: () -> ()) { World.sharedWorld.sharedExamples(name, closure: { (NSDictionary) in closure() }) } /** Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. - parameter name: The name of the shared example group. This must be unique across all shared example groups defined in a test suite. - parameter closure: A closure containing the examples. This behaves just like an example group defined using `describe` or `context`--the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). The closure takes a SharedExampleContext as an argument. This context is a function that can be executed to retrieve parameters passed in via an `itBehavesLike` function. */ public func sharedExamples(name: String, closure: SharedExampleClosure) { World.sharedWorld.sharedExamples(name, closure: closure) } /** Defines an example group. Example groups are logical groupings of examples. Example groups can share setup and teardown code. - parameter description: An arbitrary string describing the example group. - parameter closure: A closure that can contain other examples. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. */ public func describe(description: String, flags: FilterFlags = [:], closure: () -> ()) { World.sharedWorld.describe(description, flags: flags, closure: closure) } /** Defines an example group. Equivalent to `describe`. */ public func context(description: String, flags: FilterFlags = [:], closure: () -> ()) { World.sharedWorld.context(description, flags: flags, closure: closure) } /** Defines a closure to be run prior to each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of beforeEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. - parameter closure: The closure to be run prior to each example. */ public func beforeEach(closure: BeforeExampleClosure) { World.sharedWorld.beforeEach(closure) } /** Identical to Quick.DSL.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. */ public func beforeEach(closure: BeforeExampleWithMetadataClosure) { World.sharedWorld.beforeEach(closure: closure) } /** Defines a closure to be run after each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of afterEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. - parameter closure: The closure to be run after each example. */ public func afterEach(closure: AfterExampleClosure) { World.sharedWorld.afterEach(closure) } /** Identical to Quick.DSL.afterEach, except the closure is provided with metadata on the example that the closure is being run after. */ public func afterEach(closure: AfterExampleWithMetadataClosure) { World.sharedWorld.afterEach(closure: closure) } /** Defines an example. Examples use assertions to demonstrate how code should behave. These are like "tests" in XCTest. - parameter description: An arbitrary string describing what the example is meant to specify. - parameter closure: A closure that can contain assertions. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. Empty by default. - parameter file: The absolute path to the file containing the example. A sensible default is provided. - parameter line: The line containing the example. A sensible default is provided. */ public func it(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { World.sharedWorld.it(description, flags: flags, file: file, line: line, closure: closure) } /** Inserts the examples defined using a `sharedExamples` function into the current example group. The shared examples are executed at this location, as if they were written out manually. - parameter name: The name of the shared examples group to be executed. This must be identical to the name of a shared examples group defined using `sharedExamples`. If there are no shared examples that match the name given, an exception is thrown and the test suite will crash. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. Empty by default. - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line) { itBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] }) } /** Inserts the examples defined using a `sharedExamples` function into the current example group. The shared examples are executed at this location, as if they were written out manually. This function also passes those shared examples a context that can be evaluated to give the shared examples extra information on the subject of the example. - parameter name: The name of the shared examples group to be executed. This must be identical to the name of a shared examples group defined using `sharedExamples`. If there are no shared examples that match the name given, an exception is thrown and the test suite will crash. - parameter sharedExampleContext: A closure that, when evaluated, returns key-value pairs that provide the shared examples with extra information on the subject of the example. - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. Empty by default. - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, sharedExampleContext: SharedExampleContext) { World.sharedWorld.itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } /** Defines an example or example group that should not be executed. Use `pending` to temporarily disable examples or groups that should not be run yet. - parameter description: An arbitrary string describing the example or example group. - parameter closure: A closure that will not be evaluated. */ public func pending(description: String, closure: () -> ()) { World.sharedWorld.pending(description, closure: closure) } /** Use this to quickly mark a `describe` closure as pending. This disables all examples within the closure. */ public func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { World.sharedWorld.xdescribe(description, flags: flags, closure: closure) } /** Use this to quickly mark a `context` closure as pending. This disables all examples within the closure. */ public func xcontext(description: String, flags: FilterFlags, closure: () -> ()) { xdescribe(description, flags: flags, closure: closure) } /** Use this to quickly mark an `it` closure as pending. This disables the example and ensures the code within the closure is never run. */ public func xit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { World.sharedWorld.xit(description, flags: flags, file: file, line: line, closure: closure) } /** Use this to quickly focus a `describe` closure, focusing the examples in the closure. If any examples in the test suite are focused, only those examples are executed. This trumps any explicitly focused or unfocused examples within the closure--they are all treated as focused. */ public func fdescribe(description: String, flags: FilterFlags = [:], closure: () -> ()) { World.sharedWorld.fdescribe(description, flags: flags, closure: closure) } /** Use this to quickly focus a `context` closure. Equivalent to `fdescribe`. */ public func fcontext(description: String, flags: FilterFlags = [:], closure: () -> ()) { fdescribe(description, flags: flags, closure: closure) } /** Use this to quickly focus an `it` closure, focusing the example. If any examples in the test suite are focused, only those examples are executed. */ public func fit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { World.sharedWorld.fit(description, flags: flags, file: file, line: line, closure: closure) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.h ================================================ #import @class ExampleMetadata; /** Provides a hook for Quick to be configured before any examples are run. Within this scope, override the +[QuickConfiguration configure:] method to set properties on a configuration object to customize Quick behavior. For details, see the documentation for Configuraiton.swift. @param name The name of the configuration class. Like any Objective-C class name, this must be unique to the current runtime environment. */ #define QuickConfigurationBegin(name) \ @interface name : QuickConfiguration; @end \ @implementation name \ /** Marks the end of a Quick configuration. Make sure you put this after `QuickConfigurationBegin`. */ #define QuickConfigurationEnd \ @end \ /** Defines a new QuickSpec. Define examples and example groups within the space between this and `QuickSpecEnd`. @param name The name of the spec class. Like any Objective-C class name, this must be unique to the current runtime environment. */ #define QuickSpecBegin(name) \ @interface name : QuickSpec; @end \ @implementation name \ - (void)spec { \ /** Marks the end of a QuickSpec. Make sure you put this after `QuickSpecBegin`. */ #define QuickSpecEnd \ } \ @end \ typedef NSDictionary *(^QCKDSLSharedExampleContext)(void); typedef void (^QCKDSLSharedExampleBlock)(QCKDSLSharedExampleContext); typedef void (^QCKDSLEmptyBlock)(void); typedef void (^QCKDSLExampleMetadataBlock)(ExampleMetadata *exampleMetadata); #define QUICK_EXPORT FOUNDATION_EXPORT QUICK_EXPORT void qck_beforeSuite(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_afterSuite(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure); QUICK_EXPORT void qck_describe(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_context(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_beforeEach(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure); QUICK_EXPORT void qck_afterEach(QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure); QUICK_EXPORT void qck_pending(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure); QUICK_EXPORT void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure); #ifndef QUICK_DISABLE_SHORT_SYNTAX /** Defines a closure to be run prior to any examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before the first example is run, this closure will not be executed. @param closure The closure to be run prior to any examples in the test suite. */ static inline void beforeSuite(QCKDSLEmptyBlock closure) { qck_beforeSuite(closure); } /** Defines a closure to be run after all of the examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they're run. If the test suite crashes before all examples are run, this closure will not be executed. @param closure The closure to be run after all of the examples in the test suite. */ static inline void afterSuite(QCKDSLEmptyBlock closure) { qck_afterSuite(closure); } /** Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. @param name The name of the shared example group. This must be unique across all shared example groups defined in a test suite. @param closure A closure containing the examples. This behaves just like an example group defined using `describe` or `context`--the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). */ static inline void sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) { qck_sharedExamples(name, closure); } /** Defines an example group. Example groups are logical groupings of examples. Example groups can share setup and teardown code. @param description An arbitrary string describing the example group. @param closure A closure that can contain other examples. */ static inline void describe(NSString *description, QCKDSLEmptyBlock closure) { qck_describe(description, closure); } /** Defines an example group. Equivalent to `describe`. */ static inline void context(NSString *description, QCKDSLEmptyBlock closure) { qck_context(description, closure); } /** Defines a closure to be run prior to each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of beforeEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. @param closure The closure to be run prior to each example. */ static inline void beforeEach(QCKDSLEmptyBlock closure) { qck_beforeEach(closure); } /** Identical to QCKDSL.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. */ static inline void beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) { qck_beforeEachWithMetadata(closure); } /** Defines a closure to be run after each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of afterEach. They'll be run in the order they're defined, but you shouldn't rely on that behavior. @param closure The closure to be run after each example. */ static inline void afterEach(QCKDSLEmptyBlock closure) { qck_afterEach(closure); } /** Identical to QCKDSL.afterEach, except the closure is provided with metadata on the example that the closure is being run after. */ static inline void afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) { qck_afterEachWithMetadata(closure); } /** Defines an example or example group that should not be executed. Use `pending` to temporarily disable examples or groups that should not be run yet. @param description An arbitrary string describing the example or example group. @param closure A closure that will not be evaluated. */ static inline void pending(NSString *description, QCKDSLEmptyBlock closure) { qck_pending(description, closure); } /** Use this to quickly mark a `describe` block as pending. This disables all examples within the block. */ static inline void xdescribe(NSString *description, QCKDSLEmptyBlock closure) { qck_xdescribe(description, closure); } /** Use this to quickly mark a `context` block as pending. This disables all examples within the block. */ static inline void xcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_xcontext(description, closure); } /** Use this to quickly focus a `describe` block, focusing the examples in the block. If any examples in the test suite are focused, only those examples are executed. This trumps any explicitly focused or unfocused examples within the block--they are all treated as focused. */ static inline void fdescribe(NSString *description, QCKDSLEmptyBlock closure) { qck_fdescribe(description, closure); } /** Use this to quickly focus a `context` block. Equivalent to `fdescribe`. */ static inline void fcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_fcontext(description, closure); } #define it qck_it #define xit qck_xit #define fit qck_fit #define itBehavesLike qck_itBehavesLike #define xitBehavesLike qck_xitBehavesLike #define fitBehavesLike qck_fitBehavesLike #endif #define qck_it qck_it_builder(@{}, @(__FILE__), __LINE__) #define qck_xit qck_it_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__) #define qck_fit qck_it_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__) #define qck_itBehavesLike qck_itBehavesLike_builder(@{}, @(__FILE__), __LINE__) #define qck_xitBehavesLike qck_itBehavesLike_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__) #define qck_fitBehavesLike qck_itBehavesLike_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__) typedef void (^QCKItBlock)(NSString *description, QCKDSLEmptyBlock closure); typedef void (^QCKItBehavesLikeBlock)(NSString *description, QCKDSLSharedExampleContext context); QUICK_EXPORT QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line); QUICK_EXPORT QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.m ================================================ #import "QCKDSL.h" #import "World.h" #import "World+DSL.h" void qck_beforeSuite(QCKDSLEmptyBlock closure) { [[World sharedWorld] beforeSuite:closure]; } void qck_afterSuite(QCKDSLEmptyBlock closure) { [[World sharedWorld] afterSuite:closure]; } void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) { [[World sharedWorld] sharedExamples:name closure:closure]; } void qck_describe(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] describe:description flags:@{} closure:closure]; } void qck_context(NSString *description, QCKDSLEmptyBlock closure) { qck_describe(description, closure); } void qck_beforeEach(QCKDSLEmptyBlock closure) { [[World sharedWorld] beforeEach:closure]; } void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) { [[World sharedWorld] beforeEachWithMetadata:closure]; } void qck_afterEach(QCKDSLEmptyBlock closure) { [[World sharedWorld] afterEach:closure]; } void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) { [[World sharedWorld] afterEachWithMetadata:closure]; } QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line) { return ^(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] itWithDescription:description flags:flags file:file line:line closure:closure]; }; } QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line) { return ^(NSString *name, QCKDSLSharedExampleContext context) { [[World sharedWorld] itBehavesLikeSharedExampleNamed:name sharedExampleContext:context flags:flags file:file line:line]; }; } void qck_pending(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] pending:description closure:closure]; } void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] xdescribe:description flags:@{} closure:closure]; } void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_xdescribe(description, closure); } void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure) { [[World sharedWorld] fdescribe:description flags:@{} closure:closure]; } void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure) { qck_fdescribe(description, closure); } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.h ================================================ #import @interface World (SWIFT_EXTENSION(Quick)) - (void)beforeSuite:(void (^ __nonnull)(void))closure; - (void)afterSuite:(void (^ __nonnull)(void))closure; - (void)sharedExamples:(NSString * __nonnull)name closure:(void (^ __nonnull)(NSDictionary * __nonnull (^ __nonnull)(void)))closure; - (void)describe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)context:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)fdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)xdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; - (void)beforeEach:(void (^ __nonnull)(void))closure; - (void)beforeEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; - (void)afterEach:(void (^ __nonnull)(void))closure; - (void)afterEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; - (void)itWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; - (void)fitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; - (void)xitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; - (void)itBehavesLikeSharedExampleNamed:(NSString * __nonnull)name sharedExampleContext:(NSDictionary * __nonnull (^ __nonnull)(void))sharedExampleContext flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line; - (void)pending:(NSString * __nonnull)description closure:(void (^ __nonnull)(void))closure; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.swift ================================================ import Foundation /** Adds methods to World to support top-level DSL functions (Swift) and macros (Objective-C). These functions map directly to the DSL that test writers use in their specs. */ extension World { internal func beforeSuite(closure: BeforeSuiteClosure) { suiteHooks.appendBefore(closure) } internal func afterSuite(closure: AfterSuiteClosure) { suiteHooks.appendAfter(closure) } internal func sharedExamples(name: String, closure: SharedExampleClosure) { registerSharedExample(name, closure: closure) } internal func describe(description: String, flags: FilterFlags, closure: () -> ()) { guard currentExampleMetadata == nil else { raiseError("'describe' cannot be used inside '\(currentPhase)', 'describe' may only be used inside 'context' or 'describe'. ") } guard currentExampleGroup != nil else { raiseError("Error: example group was not created by its parent QuickSpec spec. Check that describe() or context() was used in QuickSpec.spec() and not a more general context (i.e. an XCTestCase test)") } let group = ExampleGroup(description: description, flags: flags) currentExampleGroup.appendExampleGroup(group) performWithCurrentExampleGroup(group, closure: closure) } internal func context(description: String, flags: FilterFlags, closure: () -> ()) { guard currentExampleMetadata == nil else { raiseError("'context' cannot be used inside '\(currentPhase)', 'context' may only be used inside 'context' or 'describe'. ") } self.describe(description, flags: flags, closure: closure) } internal func fdescribe(description: String, flags: FilterFlags, closure: () -> ()) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.describe(description, flags: focusedFlags, closure: closure) } internal func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { var pendingFlags = flags pendingFlags[Filter.pending] = true self.describe(description, flags: pendingFlags, closure: closure) } internal func beforeEach(closure: BeforeExampleClosure) { guard currentExampleMetadata == nil else { raiseError("'beforeEach' cannot be used inside '\(currentPhase)', 'beforeEach' may only be used inside 'context' or 'describe'. ") } currentExampleGroup.hooks.appendBefore(closure) } #if _runtime(_ObjC) @objc(beforeEachWithMetadata:) internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { currentExampleGroup.hooks.appendBefore(closure) } #else internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { currentExampleGroup.hooks.appendBefore(closure) } #endif internal func afterEach(closure: AfterExampleClosure) { guard currentExampleMetadata == nil else { raiseError("'afterEach' cannot be used inside '\(currentPhase)', 'afterEach' may only be used inside 'context' or 'describe'. ") } currentExampleGroup.hooks.appendAfter(closure) } #if _runtime(_ObjC) @objc(afterEachWithMetadata:) internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { currentExampleGroup.hooks.appendAfter(closure) } #else internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { currentExampleGroup.hooks.appendAfter(closure) } #endif internal func it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { if beforesCurrentlyExecuting { raiseError("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ") } if aftersCurrentlyExecuting { raiseError("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ") } guard currentExampleMetadata == nil else { raiseError("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ") } let callsite = Callsite(file: file, line: line) let example = Example(description: description, callsite: callsite, flags: flags, closure: closure) currentExampleGroup.appendExample(example) } internal func fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.it(description, flags: focusedFlags, file: file, line: line, closure: closure) } internal func xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { var pendingFlags = flags pendingFlags[Filter.pending] = true self.it(description, flags: pendingFlags, file: file, line: line, closure: closure) } internal func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { guard currentExampleMetadata == nil else { raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'. ") } let callsite = Callsite(file: file, line: line) let closure = World.sharedWorld.sharedExample(name) let group = ExampleGroup(description: name, flags: flags) currentExampleGroup.appendExampleGroup(group) performWithCurrentExampleGroup(group) { closure(sharedExampleContext) } group.walkDownExamples { (example: Example) in example.isSharedExample = true example.callsite = callsite } } #if _runtime(_ObjC) @objc(itWithDescription:flags:file:line:closure:) private func objc_it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { it(description, flags: flags, file: file, line: line, closure: closure) } @objc(fitWithDescription:flags:file:line:closure:) private func objc_fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { fit(description, flags: flags, file: file, line: line, closure: closure) } @objc(xitWithDescription:flags:file:line:closure:) private func objc_xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { xit(description, flags: flags, file: file, line: line, closure: closure) } @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:) private func objc_itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } #endif internal func pending(description: String, closure: () -> ()) { print("Pending: \(description)") } private var currentPhase: String { if beforesCurrentlyExecuting { return "beforeEach" } else if aftersCurrentlyExecuting { return "afterEach" } return "it" } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/ErrorUtility.swift ================================================ import Foundation @noreturn internal func raiseError(message: String) { #if _runtime(_ObjC) NSException(name: NSInternalInconsistencyException, reason: message, userInfo: nil).raise() #endif // This won't be reached when ObjC is available and the exception above is raisd fatalError(message) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Example.swift ================================================ import Foundation private var numberOfExamplesRun = 0 /** Examples, defined with the `it` function, use assertions to demonstrate how code should behave. These are like "tests" in XCTest. */ final public class Example: NSObject { /** A boolean indicating whether the example is a shared example; i.e.: whether it is an example defined with `itBehavesLike`. */ public var isSharedExample = false /** The site at which the example is defined. This must be set correctly in order for Xcode to highlight the correct line in red when reporting a failure. */ public var callsite: Callsite weak internal var group: ExampleGroup? private let internalDescription: String private let closure: () -> () private let flags: FilterFlags internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: () -> ()) { self.internalDescription = description self.closure = closure self.callsite = callsite self.flags = flags } public override var description: String { return internalDescription } /** The example name. A name is a concatenation of the name of the example group the example belongs to, followed by the description of the example itself. The example name is used to generate a test method selector to be displayed in Xcode's test navigator. */ public var name: String { switch group!.name { case .Some(let groupName): return "\(groupName), \(description)" case .None: return description } } /** Executes the example closure, as well as all before and after closures defined in the its surrounding example groups. */ public func run() { let world = World.sharedWorld if numberOfExamplesRun == 0 { world.suiteHooks.executeBefores() } let exampleMetadata = ExampleMetadata(example: self, exampleIndex: numberOfExamplesRun) world.currentExampleMetadata = exampleMetadata world.exampleHooks.executeBefores(exampleMetadata) group!.phase = .BeforesExecuting for before in group!.befores { before(exampleMetadata: exampleMetadata) } group!.phase = .BeforesFinished closure() group!.phase = .AftersExecuting for after in group!.afters { after(exampleMetadata: exampleMetadata) } group!.phase = .AftersFinished world.exampleHooks.executeAfters(exampleMetadata) numberOfExamplesRun += 1 if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.includedExampleCount { world.suiteHooks.executeAfters() } } /** Evaluates the filter flags set on this example and on the example groups this example belongs to. Flags set on the example are trumped by flags on the example group it belongs to. Flags on inner example groups are trumped by flags on outer example groups. */ internal var filterFlags: FilterFlags { var aggregateFlags = flags for (key, value) in group!.filterFlags { aggregateFlags[key] = value } return aggregateFlags } } /** Returns a boolean indicating whether two Example objects are equal. If two examples are defined at the exact same callsite, they must be equal. */ public func ==(lhs: Example, rhs: Example) -> Bool { return lhs.callsite == rhs.callsite } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/ExampleGroup.swift ================================================ import Foundation /** Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share setup and teardown code. */ final public class ExampleGroup: NSObject { weak internal var parent: ExampleGroup? internal let hooks = ExampleHooks() internal var phase: HooksPhase = .NothingExecuted private let internalDescription: String private let flags: FilterFlags private let isInternalRootExampleGroup: Bool private var childGroups = [ExampleGroup]() private var childExamples = [Example]() internal init(description: String, flags: FilterFlags, isInternalRootExampleGroup: Bool = false) { self.internalDescription = description self.flags = flags self.isInternalRootExampleGroup = isInternalRootExampleGroup } public override var description: String { return internalDescription } /** Returns a list of examples that belong to this example group, or to any of its descendant example groups. */ public var examples: [Example] { var examples = childExamples for group in childGroups { examples.appendContentsOf(group.examples) } return examples } internal var name: String? { if let parent = parent { switch(parent.name) { case .Some(let name): return "\(name), \(description)" case .None: return description } } else { return isInternalRootExampleGroup ? nil : description } } internal var filterFlags: FilterFlags { var aggregateFlags = flags walkUp() { (group: ExampleGroup) -> () in for (key, value) in group.flags { aggregateFlags[key] = value } } return aggregateFlags } internal var befores: [BeforeExampleWithMetadataClosure] { var closures = Array(hooks.befores.reverse()) walkUp() { (group: ExampleGroup) -> () in closures.appendContentsOf(Array(group.hooks.befores.reverse())) } return Array(closures.reverse()) } internal var afters: [AfterExampleWithMetadataClosure] { var closures = hooks.afters walkUp() { (group: ExampleGroup) -> () in closures.appendContentsOf(group.hooks.afters) } return closures } internal func walkDownExamples(callback: (example: Example) -> ()) { for example in childExamples { callback(example: example) } for group in childGroups { group.walkDownExamples(callback) } } internal func appendExampleGroup(group: ExampleGroup) { group.parent = self childGroups.append(group) } internal func appendExample(example: Example) { example.group = self childExamples.append(example) } private func walkUp(callback: (group: ExampleGroup) -> ()) { var group = self while let parent = group.parent { callback(group: parent) group = parent } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/ExampleMetadata.swift ================================================ import Foundation /** A class that encapsulates information about an example, including the index at which the example was executed, as well as the example itself. */ final public class ExampleMetadata: NSObject { /** The example for which this metadata was collected. */ public let example: Example /** The index at which this example was executed in the test suite. */ public let exampleIndex: Int internal init(example: Example, exampleIndex: Int) { self.example = example self.exampleIndex = exampleIndex } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Filter.swift ================================================ import Foundation /** A mapping of string keys to booleans that can be used to filter examples or example groups. For example, a "focused" example would have the flags [Focused: true]. */ public typealias FilterFlags = [String: Bool] /** A namespace for filter flag keys, defined primarily to make the keys available in Objective-C. */ final public class Filter: NSObject { /** Example and example groups with [Focused: true] are included in test runs, excluding all other examples without this flag. Use this to only run one or two tests that you're currently focusing on. */ public class var focused: String { return "focused" } /** Example and example groups with [Pending: true] are excluded from test runs. Use this to temporarily suspend examples that you know do not pass yet. */ public class var pending: String { return "pending" } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Hooks/Closures.swift ================================================ // MARK: Example Hooks /** A closure executed before an example is run. */ public typealias BeforeExampleClosure = () -> () /** A closure executed before an example is run. The closure is given example metadata, which contains information about the example that is about to be run. */ public typealias BeforeExampleWithMetadataClosure = (exampleMetadata: ExampleMetadata) -> () /** A closure executed after an example is run. */ public typealias AfterExampleClosure = BeforeExampleClosure /** A closure executed after an example is run. The closure is given example metadata, which contains information about the example that has just finished running. */ public typealias AfterExampleWithMetadataClosure = BeforeExampleWithMetadataClosure // MARK: Suite Hooks /** A closure executed before any examples are run. */ public typealias BeforeSuiteClosure = () -> () /** A closure executed after all examples have finished running. */ public typealias AfterSuiteClosure = BeforeSuiteClosure ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Hooks/ExampleHooks.swift ================================================ /** A container for closures to be executed before and after each example. */ final internal class ExampleHooks { internal var befores: [BeforeExampleWithMetadataClosure] = [] internal var afters: [AfterExampleWithMetadataClosure] = [] internal var phase: HooksPhase = .NothingExecuted internal func appendBefore(closure: BeforeExampleWithMetadataClosure) { befores.append(closure) } internal func appendBefore(closure: BeforeExampleClosure) { befores.append { (exampleMetadata: ExampleMetadata) in closure() } } internal func appendAfter(closure: AfterExampleWithMetadataClosure) { afters.append(closure) } internal func appendAfter(closure: AfterExampleClosure) { afters.append { (exampleMetadata: ExampleMetadata) in closure() } } internal func executeBefores(exampleMetadata: ExampleMetadata) { phase = .BeforesExecuting for before in befores { before(exampleMetadata: exampleMetadata) } phase = .BeforesFinished } internal func executeAfters(exampleMetadata: ExampleMetadata) { phase = .AftersExecuting for after in afters { after(exampleMetadata: exampleMetadata) } phase = .AftersFinished } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Hooks/HooksPhase.swift ================================================ /** A description of the execution cycle of the current example with respect to the hooks of that example. */ internal enum HooksPhase: Int { case NothingExecuted = 0 case BeforesExecuting case BeforesFinished case AftersExecuting case AftersFinished } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Hooks/SuiteHooks.swift ================================================ /** A container for closures to be executed before and after all examples. */ final internal class SuiteHooks { internal var befores: [BeforeSuiteClosure] = [] internal var afters: [AfterSuiteClosure] = [] internal var phase: HooksPhase = .NothingExecuted internal func appendBefore(closure: BeforeSuiteClosure) { befores.append(closure) } internal func appendAfter(closure: AfterSuiteClosure) { afters.append(closure) } internal func executeBefores() { phase = .BeforesExecuting for before in befores { before() } phase = .BeforesFinished } internal func executeAfters() { phase = .AftersExecuting for after in afters { after() } phase = .AftersFinished } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSHumanReadableCopyright Copyright © 2014 - present, Quick Team. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift ================================================ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Foundation extension NSBundle { /** Locates the first bundle with a '.xctest' file extension. */ internal static var currentTestBundle: NSBundle? { return allBundles().lazy .filter { $0.bundlePath.hasSuffix(".xctest") } .first } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.h ================================================ #import /** QuickSpec converts example names into test methods. Those test methods need valid selector names, which means no whitespace, control characters, etc. This category gives NSString objects an easy way to replace those illegal characters with underscores. */ @interface NSString (QCKSelectorName) /** Returns a string with underscores in place of all characters that cannot be included in a selector (SEL) name. */ @property (nonatomic, readonly) NSString *qck_selectorName; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.m ================================================ #import "NSString+QCKSelectorName.h" @implementation NSString (QCKSelectorName) - (NSString *)qck_selectorName { static NSMutableCharacterSet *invalidCharacters = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ invalidCharacters = [NSMutableCharacterSet new]; NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet]; NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet]; NSCharacterSet *illegalCharacterSet = [NSCharacterSet illegalCharacterSet]; NSCharacterSet *controlCharacterSet = [NSCharacterSet controlCharacterSet]; NSCharacterSet *punctuationCharacterSet = [NSCharacterSet punctuationCharacterSet]; NSCharacterSet *nonBaseCharacterSet = [NSCharacterSet nonBaseCharacterSet]; NSCharacterSet *symbolCharacterSet = [NSCharacterSet symbolCharacterSet]; [invalidCharacters formUnionWithCharacterSet:whitespaceCharacterSet]; [invalidCharacters formUnionWithCharacterSet:newlineCharacterSet]; [invalidCharacters formUnionWithCharacterSet:illegalCharacterSet]; [invalidCharacters formUnionWithCharacterSet:controlCharacterSet]; [invalidCharacters formUnionWithCharacterSet:punctuationCharacterSet]; [invalidCharacters formUnionWithCharacterSet:nonBaseCharacterSet]; [invalidCharacters formUnionWithCharacterSet:symbolCharacterSet]; }); NSArray *validComponents = [self componentsSeparatedByCharactersInSet:invalidCharacters]; NSString *result = [validComponents componentsJoinedByString:@"_"]; return ([result length] == 0 ? @"_" : result); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/Quick.h ================================================ #import //! Project version number for Quick. FOUNDATION_EXPORT double QuickVersionNumber; //! Project version string for Quick. FOUNDATION_EXPORT const unsigned char QuickVersionString[]; #import "QuickSpec.h" #import "QCKDSL.h" #import "QuickConfiguration.h" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/QuickMain.swift ================================================ import XCTest // NOTE: This file is not intended to be included in the Xcode project or CocoaPods. // It is picked up by the Swift Package Manager during its build process. /// When using Quick with swift-corelibs-xctest, automatic discovery of specs and /// configurations is not available. Instead, you should create a standalone /// executable and call this function from its main.swift file. This will execute /// the specs and then terminate the process with an exit code of 0 if the tests /// passed, or 1 if there were any failures. /// /// Quick is known to work with the DEVELOPMENT-SNAPSHOT-2016-02-08-a Swift toolchain. @noreturn public func QCKMain(specs: [XCTestCase], configurations: [QuickConfiguration.Type] = []) { // Perform all configuration (ensures that shared examples have been discovered) World.sharedWorld.configure { configuration in for configurationClass in configurations { configurationClass.configure(configuration) } } World.sharedWorld.finalizeConfiguration() // Gather all examples (ensures suite hooks have been discovered) for case let spec as QuickSpec in specs { spec.gatherExamplesIfNeeded() } XCTMain(specs) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift ================================================ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) /** Responsible for building a "Selected tests" suite. This corresponds to a single spec, and all its examples. */ internal class QuickSelectedTestSuiteBuilder: QuickTestSuiteBuilder { /** The test spec class to run. */ let testCaseClass: AnyClass! /** For Objective-C classes, returns the class name. For Swift classes without, an explicit Objective-C name, returns a module-namespaced class name (e.g., "FooTests.FooSpec"). */ var testSuiteClassName: String { return NSStringFromClass(testCaseClass) } /** Given a test case name: FooSpec/testFoo Optionally constructs a test suite builder for the named test case class in the running test bundle. If no test bundle can be found, or the test case class can't be found, initialization fails and returns `nil`. */ init?(forTestCaseWithName name: String) { guard let testCaseClass = testCaseClassForTestCaseWithName(name) else { self.testCaseClass = nil return nil } self.testCaseClass = testCaseClass } /** Returns a `QuickTestSuite` that runs the associated test case class. */ func buildTestSuite() -> QuickTestSuite { return QuickTestSuite(forTestCaseClass: testCaseClass) } } /** Searches `NSBundle.allBundles()` for an xctest bundle, then looks up the named test case class in that bundle. Returns `nil` if a bundle or test case class cannot be found. */ private func testCaseClassForTestCaseWithName(name: String) -> AnyClass? { func extractClassName(name: String) -> String? { return name.characters.split("/").first.map(String.init) } guard let className = extractClassName(name) else { return nil } guard let bundle = NSBundle.currentTestBundle else { return nil } if let testCaseClass = bundle.classNamed(className) { return testCaseClass } guard let moduleName = bundle.bundlePath.fileName else { return nil } return NSClassFromString("\(moduleName).\(className)") } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.h ================================================ #import /** QuickSpec is a base class all specs written in Quick inherit from. They need to inherit from QuickSpec, a subclass of XCTestCase, in order to be discovered by the XCTest framework. XCTest automatically compiles a list of XCTestCase subclasses included in the test target. It iterates over each class in that list, and creates a new instance of that class for each test method. It then creates an "invocation" to execute that test method. The invocation is an instance of NSInvocation, which represents a single message send in Objective-C. The invocation is set on the XCTestCase instance, and the test is run. Most of the code in QuickSpec is dedicated to hooking into XCTest events. First, when the spec is first loaded and before it is sent any messages, the +[NSObject initialize] method is called. QuickSpec overrides this method to call +[QuickSpec spec]. This builds the example group stacks and registers them with Quick.World, a global register of examples. Then, XCTest queries QuickSpec for a list of test methods. Normally, XCTest automatically finds all methods whose selectors begin with the string "test". However, QuickSpec overrides this default behavior by implementing the +[XCTestCase testInvocations] method. This method iterates over each example registered in Quick.World, defines a new method for that example, and returns an invocation to call that method to XCTest. Those invocations are the tests that are run by XCTest. Their selector names are displayed in the Xcode test navigation bar. */ @interface QuickSpec : XCTestCase /** Override this method in your spec to define a set of example groups and examples. @code override func spec() { describe("winter") { it("is coming") { // ... } } } @endcode See DSL.swift for more information on what syntax is available. */ - (void)spec; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.m ================================================ #import "QuickSpec.h" #import "QuickConfiguration.h" #import "NSString+QCKSelectorName.h" #import "World.h" #import static QuickSpec *currentSpec = nil; const void * const QCKExampleKey = &QCKExampleKey; @interface QuickSpec () @property (nonatomic, strong) Example *example; @end @implementation QuickSpec #pragma mark - XCTestCase Overrides /** The runtime sends initialize to each class in a program just before the class, or any class that inherits from it, is sent its first message from within the program. QuickSpec hooks into this event to compile the example groups for this spec subclass. If an exception occurs when compiling the examples, report it to the user. Chances are they included an expectation outside of a "it", "describe", or "context" block. */ + (void)initialize { [QuickConfiguration initialize]; World *world = [World sharedWorld]; [world performWithCurrentExampleGroup:[world rootExampleGroupForSpecClass:self] closure:^{ QuickSpec *spec = [self new]; @try { [spec spec]; } @catch (NSException *exception) { [NSException raise:NSInternalInconsistencyException format:@"An exception occurred when building Quick's example groups.\n" @"Some possible reasons this might happen include:\n\n" @"- An 'expect(...).to' expectation was evaluated outside of " @"an 'it', 'context', or 'describe' block\n" @"- 'sharedExamples' was called twice with the same name\n" @"- 'itBehavesLike' was called with a name that is not registered as a shared example\n\n" @"Here's the original exception: '%@', reason: '%@', userInfo: '%@'", exception.name, exception.reason, exception.userInfo]; } [self testInvocations]; }]; } /** Invocations for each test method in the test case. QuickSpec overrides this method to define a new method for each example defined in +[QuickSpec spec]. @return An array of invocations that execute the newly defined example methods. */ + (NSArray *)testInvocations { NSArray *examples = [[World sharedWorld] examplesForSpecClass:[self class]]; NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:[examples count]]; NSMutableSet *selectorNames = [NSMutableSet set]; for (Example *example in examples) { SEL selector = [self addInstanceMethodForExample:example classSelectorNames:selectorNames]; NSInvocation *invocation = [self invocationForInstanceMethodWithSelector:selector example:example]; [invocations addObject:invocation]; } return invocations; } /** XCTest sets the invocation for the current test case instance using this setter. QuickSpec hooks into this event to give the test case a reference to the current example. It will need this reference to correctly report its name to XCTest. */ - (void)setInvocation:(NSInvocation *)invocation { self.example = objc_getAssociatedObject(invocation, QCKExampleKey); [super setInvocation:invocation]; } #pragma mark - Public Interface - (void)spec { } #pragma mark - Internal Methods /** QuickSpec uses this method to dynamically define a new instance method for the given example. The instance method runs the example, catching any exceptions. The exceptions are then reported as test failures. In order to report the correct file and line number, examples must raise exceptions containing following keys in their userInfo: - "SenTestFilenameKey": A String representing the file name - "SenTestLineNumberKey": An Int representing the line number These keys used to be used by SenTestingKit, and are still used by some testing tools in the wild. See: https://github.com/Quick/Quick/pull/41 @return The selector of the newly defined instance method. */ + (SEL)addInstanceMethodForExample:(Example *)example classSelectorNames:(NSMutableSet *)selectorNames { IMP implementation = imp_implementationWithBlock(^(QuickSpec *self){ currentSpec = self; [example run]; }); NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet]; NSMutableString *sanitizedFileName = [NSMutableString string]; for (NSUInteger i = 0; i < example.callsite.file.length; i++) { unichar ch = [example.callsite.file characterAtIndex:i]; if ([characterSet characterIsMember:ch]) { [sanitizedFileName appendFormat:@"%c", ch]; } } const char *types = [[NSString stringWithFormat:@"%s%s%s", @encode(id), @encode(id), @encode(SEL)] UTF8String]; NSString *originalName = example.name.qck_selectorName; NSString *selectorName = originalName; NSUInteger i = 2; while ([selectorNames containsObject:selectorName]) { selectorName = [NSString stringWithFormat:@"%@_%tu", originalName, i++]; } [selectorNames addObject:selectorName]; SEL selector = NSSelectorFromString(selectorName); class_addMethod(self, selector, implementation, types); return selector; } + (NSInvocation *)invocationForInstanceMethodWithSelector:(SEL)selector example:(Example *)example { NSMethodSignature *signature = [self instanceMethodSignatureForSelector:selector]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; invocation.selector = selector; objc_setAssociatedObject(invocation, QCKExampleKey, example, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return invocation; } /** This method is used to record failures, whether they represent example expectations that were not met, or exceptions raised during test setup and teardown. By default, the failure will be reported as an XCTest failure, and the example will be highlighted in Xcode. */ - (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filePath atLine:(NSUInteger)lineNumber expected:(BOOL)expected { if (self.example.isSharedExample) { filePath = self.example.callsite.file; lineNumber = self.example.callsite.line; } [currentSpec.testRun recordFailureWithDescription:description inFile:filePath atLine:lineNumber expected:expected]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.swift ================================================ import XCTest // NOTE: This file is not intended to be included in the Xcode project or CocoaPods. // It is picked up by the Swift Package Manager during its build process. public class QuickSpec: XCTestCase, XCTestCaseProvider { public func spec() {} public required init() {} public var allTests : [(String, () throws -> Void)] { gatherExamplesIfNeeded() let examples = World.sharedWorld.examples(self.dynamicType) return examples.map({ example -> (String, () -> Void) in return (example.name, { example.run() }) }) } internal func gatherExamplesIfNeeded() { let world = World.sharedWorld let rootExampleGroup = world.rootExampleGroupForSpecClass(self.dynamicType) if rootExampleGroup.examples.isEmpty { world.currentExampleGroup = rootExampleGroup spec() world.currentExampleGroup = nil } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/QuickTestSuite.swift ================================================ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import XCTest /** This protocol defines the role of an object that builds test suites. */ internal protocol QuickTestSuiteBuilder { /** Construct a `QuickTestSuite` instance with the appropriate test cases added as tests. Subsequent calls to this method should return equivalent test suites. */ func buildTestSuite() -> QuickTestSuite } /** A base class for a class cluster of Quick test suites, that should correctly build dynamic test suites for XCTest to execute. */ public class QuickTestSuite: XCTestSuite { private static var builtTestSuites: Set = Set() /** Construct a test suite for a specific, selected subset of test cases (rather than the default, which as all test cases). If this method is called multiple times for the same test case class, e.g.. FooSpec/testFoo FooSpec/testBar It is expected that the first call should return a valid test suite, and all subsequent calls should return `nil`. */ public static func selectedTestSuite(forTestCaseWithName name: String) -> QuickTestSuite? { guard let builder = QuickSelectedTestSuiteBuilder(forTestCaseWithName: name) else { return nil } if builtTestSuites.contains(builder.testSuiteClassName) { return nil } else { builtTestSuites.insert(builder.testSuiteClassName) return builder.buildTestSuite() } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/String+FileName.swift ================================================ import Foundation extension String { /** If the receiver represents a path, returns its file name with a file extension. */ var fileName: String? { return NSURL(string: self)?.URLByDeletingPathExtension?.lastPathComponent } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/World.h ================================================ #import @class ExampleGroup; @class ExampleMetadata; SWIFT_CLASS("_TtC5Quick5World") @interface World @property (nonatomic) ExampleGroup * __nullable currentExampleGroup; @property (nonatomic) ExampleMetadata * __nullable currentExampleMetadata; @property (nonatomic) BOOL isRunningAdditionalSuites; + (World * __nonnull)sharedWorld; - (void)configure:(void (^ __nonnull)(Configuration * __nonnull))closure; - (void)finalizeConfiguration; - (ExampleGroup * __nonnull)rootExampleGroupForSpecClass:(Class __nonnull)cls; - (NSArray * __nonnull)examplesForSpecClass:(Class __nonnull)specClass; - (void)performWithCurrentExampleGroup:(ExampleGroup * __nonnull)group closure:(void (^ __nonnull)(void))closure; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/World.swift ================================================ import Foundation /** A closure that, when evaluated, returns a dictionary of key-value pairs that can be accessed from within a group of shared examples. */ public typealias SharedExampleContext = () -> (NSDictionary) /** A closure that is used to define a group of shared examples. This closure may contain any number of example and example groups. */ public typealias SharedExampleClosure = (SharedExampleContext) -> () /** A collection of state Quick builds up in order to work its magic. World is primarily responsible for maintaining a mapping of QuickSpec classes to root example groups for those classes. It also maintains a mapping of shared example names to shared example closures. You may configure how Quick behaves by calling the -[World configure:] method from within an overridden +[QuickConfiguration configure:] method. */ final internal class World: NSObject { /** The example group that is currently being run. The DSL requires that this group is correctly set in order to build a correct hierarchy of example groups and their examples. */ internal var currentExampleGroup: ExampleGroup! /** The example metadata of the test that is currently being run. This is useful for using the Quick test metadata (like its name) at runtime. */ internal var currentExampleMetadata: ExampleMetadata? /** A flag that indicates whether additional test suites are being run within this test suite. This is only true within the context of Quick functional tests. */ internal var isRunningAdditionalSuites = false private var specs: Dictionary = [:] private var sharedExamples: [String: SharedExampleClosure] = [:] private let configuration = Configuration() private var isConfigurationFinalized = false internal var exampleHooks: ExampleHooks {return configuration.exampleHooks } internal var suiteHooks: SuiteHooks { return configuration.suiteHooks } // MARK: Singleton Constructor private override init() {} static let sharedWorld = World() // MARK: Public Interface /** Exposes the World's Configuration object within the scope of the closure so that it may be configured. This method must not be called outside of an overridden +[QuickConfiguration configure:] method. - parameter closure: A closure that takes a Configuration object that can be mutated to change Quick's behavior. */ internal func configure(closure: QuickConfigurer) { assert(!isConfigurationFinalized, "Quick cannot be configured outside of a +[QuickConfiguration configure:] method. You should not call -[World configure:] directly. Instead, subclass QuickConfiguration and override the +[QuickConfiguration configure:] method.") closure(configuration: configuration) } /** Finalizes the World's configuration. Any subsequent calls to World.configure() will raise. */ internal func finalizeConfiguration() { isConfigurationFinalized = true } /** Returns an internally constructed root example group for the given QuickSpec class. A root example group with the description "root example group" is lazily initialized for each QuickSpec class. This root example group wraps the top level of a -[QuickSpec spec] method--it's thanks to this group that users can define beforeEach and it closures at the top level, like so: override func spec() { // These belong to the root example group beforeEach {} it("is at the top level") {} } - parameter cls: The QuickSpec class for which to retrieve the root example group. - returns: The root example group for the class. */ internal func rootExampleGroupForSpecClass(cls: AnyClass) -> ExampleGroup { #if _runtime(_ObjC) let name = NSStringFromClass(cls) #else let name = String(cls) #endif if let group = specs[name] { return group } else { let group = ExampleGroup( description: "root example group", flags: [:], isInternalRootExampleGroup: true ) specs[name] = group return group } } /** Returns all examples that should be run for a given spec class. There are two filtering passes that occur when determining which examples should be run. That is, these examples are the ones that are included by inclusion filters, and are not excluded by exclusion filters. - parameter specClass: The QuickSpec subclass for which examples are to be returned. - returns: A list of examples to be run as test invocations. */ internal func examples(specClass: AnyClass) -> [Example] { // 1. Grab all included examples. let included = includedExamples // 2. Grab the intersection of (a) examples for this spec, and (b) included examples. let spec = rootExampleGroupForSpecClass(specClass).examples.filter { included.contains($0) } // 3. Remove all excluded examples. return spec.filter { example in !self.configuration.exclusionFilters.reduce(false) { $0 || $1(example: example) } } } #if _runtime(_ObjC) @objc(examplesForSpecClass:) private func objc_examples(specClass: AnyClass) -> [Example] { return examples(specClass) } #endif // MARK: Internal internal func registerSharedExample(name: String, closure: SharedExampleClosure) { raiseIfSharedExampleAlreadyRegistered(name) sharedExamples[name] = closure } internal func sharedExample(name: String) -> SharedExampleClosure { raiseIfSharedExampleNotRegistered(name) return sharedExamples[name]! } internal var includedExampleCount: Int { return includedExamples.count } internal var beforesCurrentlyExecuting: Bool { let suiteBeforesExecuting = suiteHooks.phase == .BeforesExecuting let exampleBeforesExecuting = exampleHooks.phase == .BeforesExecuting var groupBeforesExecuting = false if let runningExampleGroup = currentExampleMetadata?.example.group { groupBeforesExecuting = runningExampleGroup.phase == .BeforesExecuting } return suiteBeforesExecuting || exampleBeforesExecuting || groupBeforesExecuting } internal var aftersCurrentlyExecuting: Bool { let suiteAftersExecuting = suiteHooks.phase == .AftersExecuting let exampleAftersExecuting = exampleHooks.phase == .AftersExecuting var groupAftersExecuting = false if let runningExampleGroup = currentExampleMetadata?.example.group { groupAftersExecuting = runningExampleGroup.phase == .AftersExecuting } return suiteAftersExecuting || exampleAftersExecuting || groupAftersExecuting } internal func performWithCurrentExampleGroup(group: ExampleGroup, closure: () -> Void) { let previousExampleGroup = currentExampleGroup currentExampleGroup = group closure() currentExampleGroup = previousExampleGroup } private var allExamples: [Example] { var all: [Example] = [] for (_, group) in specs { group.walkDownExamples { all.append($0) } } return all } private var includedExamples: [Example] { let all = allExamples let included = all.filter { example in return self.configuration.inclusionFilters.reduce(false) { $0 || $1(example: example) } } if included.isEmpty && configuration.runAllWhenEverythingFiltered { return all } else { return included } } private func raiseIfSharedExampleAlreadyRegistered(name: String) { if sharedExamples[name] != nil { raiseError("A shared example named '\(name)' has already been registered.") } } private func raiseIfSharedExampleNotRegistered(name: String) { if sharedExamples[name] == nil { raiseError("No shared example named '\(name)' has been registered. Registered shared examples: '\(Array(sharedExamples.keys))'") } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m ================================================ #import #import #import @interface XCTestSuite (QuickTestSuiteBuilder) @end @implementation XCTestSuite (QuickTestSuiteBuilder) /** In order to ensure we can correctly build dynamic test suites, we need to replace some of the default test suite constructors. */ + (void)load { Method testCaseWithName = class_getClassMethod(self, @selector(testSuiteForTestCaseWithName:)); Method hooked_testCaseWithName = class_getClassMethod(self, @selector(qck_hooked_testSuiteForTestCaseWithName:)); method_exchangeImplementations(testCaseWithName, hooked_testCaseWithName); } /** The `+testSuiteForTestCaseWithName:` method is called when a specific test case class is run from the Xcode test navigator. If the built test suite is `nil`, Xcode will not run any tests for that test case. Given if the following test case class is run from the Xcode test navigator: FooSpec testFoo testBar XCTest will invoke this once per test case, with test case names following this format: FooSpec/testFoo FooSpec/testBar */ + (nullable instancetype)qck_hooked_testSuiteForTestCaseWithName:(nonnull NSString *)name { return [QuickTestSuite selectedTestSuiteForTestCaseWithName:name]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests+ObjC.m ================================================ @import Quick; @import Nimble; @import XCTest; #import "QCKSpecRunner.h" QuickConfigurationBegin(FunctionalTests_SharedExamplesConfiguration_ObjC) + (void)configure:(Configuration *)configuration { sharedExamples(@"two passing shared examples (Objective-C)", ^(QCKDSLSharedExampleContext exampleContext) { it(@"has an example that passes (4)", ^{}); it(@"has another example that passes (5)", ^{}); }); } QuickConfigurationEnd QuickSpecBegin(FunctionalTests_FocusedSpec_Focused_ObjC) it(@"has an unfocused example that fails, but is never run", ^{ XCTFail(); }); fit(@"has a focused example that passes (1)", ^{}); fdescribe(@"a focused example group", ^{ it(@"has an example that is not focused, but will be run, and passes (2)", ^{}); fit(@"has a focused example that passes (3)", ^{}); }); fitBehavesLike(@"two passing shared examples (Objective-C)", ^NSDictionary *{ return @{}; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_FocusedSpec_Unfocused_ObjC) it(@"has an unfocused example thay fails, but is never run", ^{ XCTFail(); }); describe(@"an unfocused example group that is never run", ^{ beforeEach(^{ [NSException raise:NSInternalInconsistencyException format:@""]; }); it(@"has an example that fails, but is never run", ^{ XCTFail(); }); }); QuickSpecEnd @interface FocusedTests_ObjC: XCTestCase @end @implementation FocusedTests_ObjC - (void)testOnlyFocusedExamplesAreExecuted { XCTestRun *result = qck_runSpecs(@[ [FunctionalTests_FocusedSpec_Focused_ObjC class], [FunctionalTests_FocusedSpec_Unfocused_ObjC class] ]); XCTAssertEqual(result.executionCount, 5); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests.swift ================================================ import Quick import Nimble import XCTest #if SWIFT_PACKAGE import QuickTestHelpers #endif class FunctionalTests_FocusedSpec_SharedExamplesConfiguration: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("two passing shared examples") { it("has an example that passes (4)") {} it("has another example that passes (5)") {} } } } class FunctionalTests_FocusedSpec_Focused: QuickSpec { override func spec() { it("has an unfocused example that fails, but is never run") { fail() } fit("has a focused example that passes (1)") {} fdescribe("a focused example group") { it("has an example that is not focused, but will be run, and passes (2)") {} fit("has a focused example that passes (3)") {} } // TODO: Port fitBehavesLike to Swift. itBehavesLike("two passing shared examples", flags: [Filter.focused: true]) } } class FunctionalTests_FocusedSpec_Unfocused: QuickSpec { override func spec() { it("has an unfocused example that fails, but is never run") { fail() } describe("an unfocused example group that is never run") { beforeEach { assert(false) } it("has an example that fails, but is never run") { fail() } } } } class FocusedTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testOnlyFocusedExamplesAreExecuted", testOnlyFocusedExamplesAreExecuted), ] } func testOnlyFocusedExamplesAreExecuted() { let result = qck_runSpecs([ FunctionalTests_FocusedSpec_Focused.self, FunctionalTests_FocusedSpec_Unfocused.self ]) XCTAssertEqual(result.executionCount, 5 as UInt) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/main.swift ================================================ import Quick QCKMain([ FunctionalTests_FocusedSpec_Focused(), FunctionalTests_FocusedSpec_Unfocused(), FocusedTests(), ], configurations: [FunctionalTests_FocusedSpec_SharedExamplesConfiguration.self] ) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/SpecRunner.swift ================================================ @testable import Quick import Nimble public func qck_runSpec(specClass: QuickSpec.Type) -> TestRun { return qck_runSpecs([specClass]) } public func qck_runSpecs(specClasses: [QuickSpec.Type]) -> TestRun { World.sharedWorld.isRunningAdditionalSuites = true var executionCount: UInt = 0 var hadUnexpectedFailure = false let fails = gatherFailingExpectations(silently: true) { for specClass in specClasses { let spec = specClass.init() for (_, test) in spec.allTests { do { try test() } catch { hadUnexpectedFailure = true } executionCount += 1 } } } return TestRun(executionCount: executionCount, hasSucceeded: fails.isEmpty && !hadUnexpectedFailure) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/TestRun.swift ================================================ public struct TestRun { public var executionCount: UInt public var hasSucceeded: Bool public init(executionCount: UInt, hasSucceeded: Bool) { self.executionCount = executionCount self.hasSucceeded = hasSucceeded } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Fixtures/FunctionalTests_SharedExamplesTests_SharedExamples.swift ================================================ import Foundation import Quick import Nimble class FunctionalTests_SharedExamplesTests_SharedExamples: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("a group of three shared examples") { it("passes once") { expect(true).to(beTruthy()) } it("passes twice") { expect(true).to(beTruthy()) } it("passes three times") { expect(true).to(beTruthy()) } } sharedExamples("shared examples that take a context") { (sharedExampleContext: SharedExampleContext) in it("is passed the correct parameters via the context") { let callsite = sharedExampleContext()[NSString(string: "callsite")] as! NSString expect(callsite).to(equal("SharedExamplesSpec")) } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" typedef NS_ENUM(NSUInteger, AfterEachType) { OuterOne, OuterTwo, OuterThree, InnerOne, InnerTwo, NoExamples, }; static NSMutableArray *afterEachOrder; QuickSpecBegin(FunctionalTests_AfterEachSpec_ObjC) afterEach(^{ [afterEachOrder addObject:@(OuterOne)]; }); afterEach(^{ [afterEachOrder addObject:@(OuterTwo)]; }); afterEach(^{ [afterEachOrder addObject:@(OuterThree)]; }); it(@"executes the outer afterEach closures once, but not before this closure [1]", ^{ expect(afterEachOrder).to(equal(@[])); }); it(@"executes the outer afterEach closures a second time, but not before this closure [2]", ^{ expect(afterEachOrder).to(equal(@[@(OuterOne), @(OuterTwo), @(OuterThree)])); }); context(@"when there are nested afterEach", ^{ afterEach(^{ [afterEachOrder addObject:@(InnerOne)]; }); afterEach(^{ [afterEachOrder addObject:@(InnerTwo)]; }); it(@"executes the outer and inner afterEach closures, but not before this closure [3]", ^{ // The afterEach for the previous two examples should have been run. // The list should contain the afterEach for those example, executed from top to bottom. expect(afterEachOrder).to(equal(@[ @(OuterOne), @(OuterTwo), @(OuterThree), @(OuterOne), @(OuterTwo), @(OuterThree), ])); }); }); context(@"when there are nested afterEach without examples", ^{ afterEach(^{ [afterEachOrder addObject:@(NoExamples)]; }); }); QuickSpecEnd @interface AfterEachTests_ObjC : XCTestCase; @end @implementation AfterEachTests_ObjC - (void)setUp { [super setUp]; afterEachOrder = [NSMutableArray array]; } - (void)tearDown { afterEachOrder = [NSMutableArray array]; [super tearDown]; } - (void)testAfterEachIsExecutedInTheCorrectOrder { qck_runSpec([FunctionalTests_AfterEachSpec_ObjC class]); NSArray *expectedOrder = @[ // [1] The outer afterEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), @(OuterThree), // [2] The outer afterEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), @(OuterThree), // [3] The outer afterEach closures are executed from top to bottom, // then the outer afterEach closures are executed from top to bottom. @(InnerOne), @(InnerTwo), @(OuterOne), @(OuterTwo), @(OuterThree), ]; XCTAssertEqualObjects(afterEachOrder, expectedOrder); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif private enum AfterEachType { case OuterOne case OuterTwo case OuterThree case InnerOne case InnerTwo case NoExamples } private var afterEachOrder = [AfterEachType]() class FunctionalTests_AfterEachSpec: QuickSpec { override func spec() { describe("afterEach ordering") { afterEach { afterEachOrder.append(AfterEachType.OuterOne) } afterEach { afterEachOrder.append(AfterEachType.OuterTwo) } afterEach { afterEachOrder.append(AfterEachType.OuterThree) } it("executes the outer afterEach closures once, but not before this closure [1]") { // No examples have been run, so no afterEach will have been run either. // The list should be empty. expect(afterEachOrder).to(beEmpty()) } it("executes the outer afterEach closures a second time, but not before this closure [2]") { // The afterEach for the previous example should have been run. // The list should contain the afterEach for that example, executed from top to bottom. expect(afterEachOrder).to(equal([AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree])) } context("when there are nested afterEach") { afterEach { afterEachOrder.append(AfterEachType.InnerOne) } afterEach { afterEachOrder.append(AfterEachType.InnerTwo) } it("executes the outer and inner afterEach closures, but not before this closure [3]") { // The afterEach for the previous two examples should have been run. // The list should contain the afterEach for those example, executed from top to bottom. expect(afterEachOrder).to(equal([ AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, ])) } } context("when there are nested afterEach without examples") { afterEach { afterEachOrder.append(AfterEachType.NoExamples) } } } #if _runtime(_ObjC) describe("error handling when misusing ordering") { it("should throw an exception when including afterEach in it block") { expect { afterEach { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'afterEach' cannot be used inside 'it', 'afterEach' may only be used inside 'context' or 'describe'. ")) }) } } #endif } } class AfterEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAfterEachIsExecutedInTheCorrectOrder", testAfterEachIsExecutedInTheCorrectOrder), ] } func testAfterEachIsExecutedInTheCorrectOrder() { afterEachOrder = [] qck_runSpec(FunctionalTests_AfterEachSpec.self) let expectedOrder = [ // [1] The outer afterEach closures are executed from top to bottom. AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, // [2] The outer afterEach closures are executed from top to bottom. AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, // [3] The inner afterEach closures are executed from top to bottom, // then the outer afterEach closures are executed from top to bottom. AfterEachType.InnerOne, AfterEachType.InnerTwo, AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, ] XCTAssertEqual(afterEachOrder, expectedOrder) afterEachOrder = [] } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static BOOL afterSuiteWasExecuted = NO; QuickSpecBegin(FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC) afterSuite(^{ afterSuiteWasExecuted = YES; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_AfterSuite_Spec_ObjC) it(@"is executed before afterSuite", ^{ expect(@(afterSuiteWasExecuted)).to(beFalsy()); }); QuickSpecEnd @interface AfterSuiteTests_ObjC : XCTestCase; @end @implementation AfterSuiteTests_ObjC - (void)testAfterSuiteIsNotExecutedBeforeAnyExamples { // Execute the spec with an assertion after the one with an afterSuite. NSArray *specs = @[ [FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC class], [FunctionalTests_AfterSuite_Spec_ObjC class] ]; XCTestRun *result = qck_runSpecs(specs); // Although this ensures that afterSuite is not called before any // examples, it doesn't test that it's ever called in the first place. XCTAssert(result.hasSucceeded); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var afterSuiteWasExecuted = false class FunctionalTests_AfterSuite_AfterSuiteSpec: QuickSpec { override func spec() { afterSuite { afterSuiteWasExecuted = true } } } class FunctionalTests_AfterSuite_Spec: QuickSpec { override func spec() { it("is executed before afterSuite") { expect(afterSuiteWasExecuted).to(beFalsy()) } } } class AfterSuiteTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAfterSuiteIsNotExecutedBeforeAnyExamples", testAfterSuiteIsNotExecutedBeforeAnyExamples), ] } func testAfterSuiteIsNotExecutedBeforeAnyExamples() { // Execute the spec with an assertion after the one with an afterSuite. let result = qck_runSpecs([ FunctionalTests_AfterSuite_AfterSuiteSpec.self, FunctionalTests_AfterSuite_Spec.self ]) // Although this ensures that afterSuite is not called before any // examples, it doesn't test that it's ever called in the first place. XCTAssert(result.hasSucceeded) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests+ObjC.m ================================================ @import XCTest; @import Quick; #import "QCKSpecRunner.h" typedef NS_ENUM(NSUInteger, BeforeEachType) { OuterOne, OuterTwo, InnerOne, InnerTwo, InnerThree, NoExamples, }; static NSMutableArray *beforeEachOrder; QuickSpecBegin(FunctionalTests_BeforeEachSpec_ObjC) beforeEach(^{ [beforeEachOrder addObject:@(OuterOne)]; }); beforeEach(^{ [beforeEachOrder addObject:@(OuterTwo)]; }); it(@"executes the outer beforeEach closures once [1]", ^{}); it(@"executes the outer beforeEach closures a second time [2]", ^{}); context(@"when there are nested beforeEach", ^{ beforeEach(^{ [beforeEachOrder addObject:@(InnerOne)]; }); beforeEach(^{ [beforeEachOrder addObject:@(InnerTwo)]; }); beforeEach(^{ [beforeEachOrder addObject:@(InnerThree)]; }); it(@"executes the outer and inner beforeEach closures [3]", ^{}); }); context(@"when there are nested beforeEach without examples", ^{ beforeEach(^{ [beforeEachOrder addObject:@(NoExamples)]; }); }); QuickSpecEnd @interface BeforeEachTests_ObjC : XCTestCase; @end @implementation BeforeEachTests_ObjC - (void)setUp { beforeEachOrder = [NSMutableArray array]; [super setUp]; } - (void)tearDown { beforeEachOrder = [NSMutableArray array]; [super tearDown]; } - (void)testBeforeEachIsExecutedInTheCorrectOrder { qck_runSpec([FunctionalTests_BeforeEachSpec_ObjC class]); NSArray *expectedOrder = @[ // [1] The outer beforeEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), // [2] The outer beforeEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), // [3] The outer beforeEach closures are executed from top to bottom, // then the inner beforeEach closures are executed from top to bottom. @(OuterOne), @(OuterTwo), @(InnerOne), @(InnerTwo), @(InnerThree), ]; XCTAssertEqualObjects(beforeEachOrder, expectedOrder); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif private enum BeforeEachType { case OuterOne case OuterTwo case InnerOne case InnerTwo case InnerThree case NoExamples } private var beforeEachOrder = [BeforeEachType]() class FunctionalTests_BeforeEachSpec: QuickSpec { override func spec() { describe("beforeEach ordering") { beforeEach { beforeEachOrder.append(BeforeEachType.OuterOne) } beforeEach { beforeEachOrder.append(BeforeEachType.OuterTwo) } it("executes the outer beforeEach closures once [1]") {} it("executes the outer beforeEach closures a second time [2]") {} context("when there are nested beforeEach") { beforeEach { beforeEachOrder.append(BeforeEachType.InnerOne) } beforeEach { beforeEachOrder.append(BeforeEachType.InnerTwo) } beforeEach { beforeEachOrder.append(BeforeEachType.InnerThree) } it("executes the outer and inner beforeEach closures [3]") {} } context("when there are nested beforeEach without examples") { beforeEach { beforeEachOrder.append(BeforeEachType.NoExamples) } } } #if _runtime(_ObjC) describe("error handling when misusing ordering") { it("should throw an exception when including beforeEach in it block") { expect { beforeEach { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'beforeEach' cannot be used inside 'it', 'beforeEach' may only be used inside 'context' or 'describe'. ")) }) } } #endif } } class BeforeEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeforeEachIsExecutedInTheCorrectOrder", testBeforeEachIsExecutedInTheCorrectOrder), ] } func testBeforeEachIsExecutedInTheCorrectOrder() { beforeEachOrder = [] qck_runSpec(FunctionalTests_BeforeEachSpec.self) let expectedOrder = [ // [1] The outer beforeEach closures are executed from top to bottom. BeforeEachType.OuterOne, BeforeEachType.OuterTwo, // [2] The outer beforeEach closures are executed from top to bottom. BeforeEachType.OuterOne, BeforeEachType.OuterTwo, // [3] The outer beforeEach closures are executed from top to bottom, // then the inner beforeEach closures are executed from top to bottom. BeforeEachType.OuterOne, BeforeEachType.OuterTwo, BeforeEachType.InnerOne, BeforeEachType.InnerTwo, BeforeEachType.InnerThree, ] XCTAssertEqual(beforeEachOrder, expectedOrder) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static BOOL beforeSuiteWasExecuted = NO; QuickSpecBegin(FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC) beforeSuite(^{ beforeSuiteWasExecuted = YES; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_BeforeSuite_Spec_ObjC) it(@"is executed after beforeSuite", ^{ expect(@(beforeSuiteWasExecuted)).to(beTruthy()); }); QuickSpecEnd @interface BeforeSuiteTests_ObjC : XCTestCase; @end @implementation BeforeSuiteTests_ObjC - (void)testBeforeSuiteIsExecutedBeforeAnyExamples { // Execute the spec with an assertion before the one with a beforeSuite NSArray *specs = @[ [FunctionalTests_BeforeSuite_Spec_ObjC class], [FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC class] ]; XCTestRun *result = qck_runSpecs(specs); XCTAssert(result.hasSucceeded); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var beforeSuiteWasExecuted = false class FunctionalTests_BeforeSuite_BeforeSuiteSpec: QuickSpec { override func spec() { beforeSuite { beforeSuiteWasExecuted = true } } } class FunctionalTests_BeforeSuite_Spec: QuickSpec { override func spec() { it("is executed after beforeSuite") { expect(beforeSuiteWasExecuted).to(beTruthy()) } } } class BeforeSuiteTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeforeSuiteIsExecutedBeforeAnyExamples", testBeforeSuiteIsExecutedBeforeAnyExamples), ] } func testBeforeSuiteIsExecutedBeforeAnyExamples() { // Execute the spec with an assertion before the one with a beforeSuite let result = qck_runSpecs([ FunctionalTests_BeforeSuite_Spec.self, FunctionalTests_BeforeSuite_BeforeSuiteSpec.self ]) XCTAssert(result.hasSucceeded) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEach.swift ================================================ import Quick public var FunctionalTests_Configuration_AfterEachWasExecuted = false class FunctionalTests_Configuration_AfterEach: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.afterEach { FunctionalTests_Configuration_AfterEachWasExecuted = true } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class Configuration_AfterEachSpec: QuickSpec { override func spec() { beforeEach { FunctionalTests_Configuration_AfterEachWasExecuted = false } it("is executed before the configuration afterEach") { expect(FunctionalTests_Configuration_AfterEachWasExecuted).to(beFalsy()) } } } class Configuration_AfterEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted", testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted), ] } func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() { FunctionalTests_Configuration_AfterEachWasExecuted = false qck_runSpec(Configuration_BeforeEachSpec.self) XCTAssert(FunctionalTests_Configuration_AfterEachWasExecuted) FunctionalTests_Configuration_AfterEachWasExecuted = false } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEach.swift ================================================ import Quick public var FunctionalTests_Configuration_BeforeEachWasExecuted = false class FunctionalTests_Configuration_BeforeEach: QuickConfiguration { override class func configure(configuration: Configuration) { configuration.beforeEach { FunctionalTests_Configuration_BeforeEachWasExecuted = true } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class Configuration_BeforeEachSpec: QuickSpec { override func spec() { it("is executed after the configuration beforeEach") { expect(FunctionalTests_Configuration_BeforeEachWasExecuted).to(beTruthy()) } } } class Configuration_BeforeEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted", testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted), ] } func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() { FunctionalTests_Configuration_BeforeEachWasExecuted = false qck_runSpec(Configuration_BeforeEachSpec.self) XCTAssert(FunctionalTests_Configuration_BeforeEachWasExecuted) FunctionalTests_Configuration_BeforeEachWasExecuted = false } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ContextTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif #if _runtime(_ObjC) class QuickContextTests: QuickSpec { override func spec() { describe("Context") { it("should throw an exception if used in an it block") { expect { context("A nested context that should throw") { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'context' cannot be used inside 'it', 'context' may only be used inside 'context' or 'describe'. ")) }) } } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/CrossReferencingSpecs.swift ================================================ import Quick import Nimble // This is a functional test ensuring that no crash occurs when a spec class // references another spec class during its spec setup. class FunctionalTests_CrossReferencingSpecA: QuickSpec { override func spec() { let _ = FunctionalTests_CrossReferencingSpecB() it("does not crash") {} } } class FunctionalTests_CrossReferencingSpecB: QuickSpec { override func spec() { let _ = FunctionalTests_CrossReferencingSpecA() it("does not crash") {} } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/DescribeTests.swift ================================================ import XCTest import Nimble import Quick #if _runtime(_ObjC) class DescribeTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testDescribeThrowsIfUsedOutsideOfQuickSpec", testDescribeThrowsIfUsedOutsideOfQuickSpec), ] } func testDescribeThrowsIfUsedOutsideOfQuickSpec() { expect { describe("this should throw an exception", {}) }.to(raiseException()) } } class QuickDescribeTests: QuickSpec { override func spec() { describe("Describe") { it("should throw an exception if used in an it block") { expect { describe("A nested describe that should throw") { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'describe' cannot be used inside 'it', 'describe' may only be used inside 'context' or 'describe'. ")) }) } } } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static BOOL isRunningFunctionalTests = NO; #pragma mark - Spec QuickSpecBegin(FunctionalTests_FailureSpec_ObjC) describe(@"a group of failing examples", ^{ it(@"passes", ^{ expect(@YES).to(beTruthy()); }); it(@"fails (but only when running the functional tests)", ^{ expect(@(isRunningFunctionalTests)).to(beFalsy()); }); it(@"fails again (but only when running the functional tests)", ^{ expect(@(isRunningFunctionalTests)).to(beFalsy()); }); }); QuickSpecEnd #pragma mark - Tests @interface FailureTests_ObjC : XCTestCase; @end @implementation FailureTests_ObjC - (void)setUp { [super setUp]; isRunningFunctionalTests = YES; } - (void)tearDown { isRunningFunctionalTests = NO; [super tearDown]; } - (void)testFailureSpecHasSucceededIsFalse { XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); XCTAssertFalse(result.hasSucceeded); } - (void)testFailureSpecExecutedAllExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); XCTAssertEqual(result.executionCount, 3); } - (void)testFailureSpecFailureCountIsEqualToTheNumberOfFailingExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); XCTAssertEqual(result.failureCount, 2); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureUsingXCTAssertTests+ObjC.m ================================================ @import XCTest; @import Quick; #import "QCKSpecRunner.h" static BOOL isRunningFunctionalTests = NO; QuickSpecBegin(FunctionalTests_FailureUsingXCTAssertSpec_ObjC) it(@"fails using an XCTAssert (but only when running the functional tests)", ^{ XCTAssertFalse(isRunningFunctionalTests); }); it(@"fails again using an XCTAssert (but only when running the functional tests)", ^{ XCTAssertFalse(isRunningFunctionalTests); }); it(@"succeeds using an XCTAssert", ^{ XCTAssertTrue(YES); }); QuickSpecEnd #pragma mark - Tests @interface FailureUsingXCTAssertTests_ObjC : XCTestCase; @end @implementation FailureUsingXCTAssertTests_ObjC - (void)setUp { [super setUp]; isRunningFunctionalTests = YES; } - (void)tearDown { isRunningFunctionalTests = NO; [super tearDown]; } - (void)testFailureUsingXCTAssertSpecHasSucceededIsFalse { XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); XCTAssertFalse(result.hasSucceeded); } - (void)testFailureUsingXCTAssertSpecExecutedAllExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); XCTAssertEqual(result.executionCount, 3); } - (void)testFailureUsingXCTAssertSpecFailureCountIsEqualToTheNumberOfFailingExamples { XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); XCTAssertEqual(result.failureCount, 2); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" #import "QuickSpec+QuickSpec_MethodList.h" QuickSpecBegin(FunctionalTests_ItSpec_ObjC) __block ExampleMetadata *exampleMetadata = nil; beforeEachWithMetadata(^(ExampleMetadata *metadata) { exampleMetadata = metadata; }); it(@" ", ^{ expect(exampleMetadata.example.name).to(equal(@" ")); }); it(@"has a description with セレクター名に使えない文字が入っている 👊💥", ^{ NSString *name = @"has a description with セレクター名に使えない文字が入っている 👊💥"; expect(exampleMetadata.example.name).to(equal(name)); }); it(@"is a test with a unique name", ^{ NSSet *allSelectors = [FunctionalTests_ItSpec_ObjC allSelectors]; expect(allSelectors).to(contain(@"is_a_test_with_a_unique_name")); expect(allSelectors).toNot(contain(@"is_a_test_with_a_unique_name_2")); }); QuickSpecEnd @interface ItTests_ObjC : XCTestCase; @end @implementation ItTests_ObjC - (void)testAllExamplesAreExecuted { XCTestRun *result = qck_runSpec([FunctionalTests_ItSpec_ObjC class]); XCTAssertEqual(result.executionCount, 3); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class FunctionalTests_ItSpec: QuickSpec { override func spec() { var exampleMetadata: ExampleMetadata? beforeEach { metadata in exampleMetadata = metadata } it("") { expect(exampleMetadata!.example.name).to(equal("")) } it("has a description with セレクター名に使えない文字が入っている 👊💥") { let name = "has a description with セレクター名に使えない文字が入っている 👊💥" expect(exampleMetadata!.example.name).to(equal(name)) } #if _runtime(_ObjC) describe("when an example has a unique name"){ it("has a unique name") {} it("doesn't add multiple selectors for it") { let allSelectors = [String]( FunctionalTests_ItSpec.allSelectors() .filter { $0.hasPrefix("when_an_example_has_a_unique_name__") } ) .sort(<) expect(allSelectors) == [ "when_an_example_has_a_unique_name__doesn_t_add_multiple_selectors_for_it", "when_an_example_has_a_unique_name__has_a_unique_name" ] } } describe("when two examples have the exact name") { it("has exactly the same name") {} it("has exactly the same name") {} it("makes a unique name for each of the above") { let allSelectors = [String]( FunctionalTests_ItSpec.allSelectors() .filter { $0.hasPrefix("when_two_examples_have_the_exact_name__") } ) .sort(<) expect(allSelectors) == [ "when_two_examples_have_the_exact_name__has_exactly_the_same_name", "when_two_examples_have_the_exact_name__has_exactly_the_same_name_2", "when_two_examples_have_the_exact_name__makes_a_unique_name_for_each_of_the_above" ] } } describe("error handling when misusing ordering") { it("an it") { expect { it("will throw an error when it is nested in another it") { } }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ")) }) } describe("behavior with an 'it' inside a 'beforeEach'") { var exception: NSException? beforeEach { let capture = NMBExceptionCapture(handler: ({ e in exception = e }), finally: nil) capture.tryBlock { it("a rogue 'it' inside a 'beforeEach'") { } return } } it("should have thrown an exception with the correct error message") { expect(exception).toNot(beNil()) expect(exception!.reason).to(equal("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ")) } } describe("behavior with an 'it' inside an 'afterEach'") { var exception: NSException? afterEach { let capture = NMBExceptionCapture(handler: ({ e in exception = e expect(exception).toNot(beNil()) expect(exception!.reason).to(equal("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ")) }), finally: nil) capture.tryBlock { it("a rogue 'it' inside an 'afterEach'") { } return } } it("should throw an exception with the correct message after this 'it' block executes") { } } } #endif } } class ItTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAllExamplesAreExecuted", testAllExamplesAreExecuted), ] } #if _runtime(_ObjC) func testAllExamplesAreExecuted() { let result = qck_runSpec(FunctionalTests_ItSpec.self) XCTAssertEqual(result.executionCount, 10 as UInt) } #else func testAllExamplesAreExecuted() { let result = qck_runSpec(FunctionalTests_ItSpec.self) XCTAssertEqual(result.executionCount, 2 as UInt) } #endif } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static NSUInteger oneExampleBeforeEachExecutedCount = 0; static NSUInteger onlyPendingExamplesBeforeEachExecutedCount = 0; QuickSpecBegin(FunctionalTests_PendingSpec_ObjC) pending(@"an example that will not run", ^{ expect(@YES).to(beFalsy()); }); describe(@"a describe block containing only one enabled example", ^{ beforeEach(^{ oneExampleBeforeEachExecutedCount += 1; }); it(@"an example that will run", ^{}); pending(@"an example that will not run", ^{}); }); describe(@"a describe block containing only pending examples", ^{ beforeEach(^{ onlyPendingExamplesBeforeEachExecutedCount += 1; }); pending(@"an example that will not run", ^{}); }); QuickSpecEnd @interface PendingTests_ObjC : XCTestCase; @end @implementation PendingTests_ObjC - (void)setUp { [super setUp]; oneExampleBeforeEachExecutedCount = 0; onlyPendingExamplesBeforeEachExecutedCount = 0; } - (void)tearDown { oneExampleBeforeEachExecutedCount = 0; onlyPendingExamplesBeforeEachExecutedCount = 0; [super tearDown]; } - (void)testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail { XCTestRun *result = qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); XCTAssert(result.hasSucceeded); } - (void)testBeforeEachOnlyRunForEnabledExamples { qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1); } - (void)testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples { qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var oneExampleBeforeEachExecutedCount = 0 var onlyPendingExamplesBeforeEachExecutedCount = 0 class FunctionalTests_PendingSpec: QuickSpec { override func spec() { xit("an example that will not run") { expect(true).to(beFalsy()) } describe("a describe block containing only one enabled example") { beforeEach { oneExampleBeforeEachExecutedCount += 1 } it("an example that will run") {} pending("an example that will not run") {} } describe("a describe block containing only pending examples") { beforeEach { onlyPendingExamplesBeforeEachExecutedCount += 1 } pending("an example that will not run") {} } } } class PendingTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail", testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail), ("testBeforeEachOnlyRunForEnabledExamples", testBeforeEachOnlyRunForEnabledExamples), ("testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples", testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples), ] } func testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail() { let result = qck_runSpec(FunctionalTests_PendingSpec.self) XCTAssert(result.hasSucceeded) } func testBeforeEachOnlyRunForEnabledExamples() { oneExampleBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_PendingSpec.self) XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1) } func testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples() { onlyPendingExamplesBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_PendingSpec.self) XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" static NSUInteger specBeforeEachExecutedCount = 0; static NSUInteger sharedExamplesBeforeEachExecutedCount = 0; QuickConfigurationBegin(FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples_ObjC) + (void)configure:(Configuration *)configuration { sharedExamples(@"a group of three shared examples with a beforeEach in Obj-C", ^(QCKDSLSharedExampleContext context) { beforeEach(^{ sharedExamplesBeforeEachExecutedCount += 1; }); it(@"passes once", ^{}); it(@"passes twice", ^{}); it(@"passes three times", ^{}); }); } QuickConfigurationEnd QuickSpecBegin(FunctionalTests_SharedExamples_BeforeEachSpec_ObjC) beforeEach(^{ specBeforeEachExecutedCount += 1; }); it(@"executes the spec beforeEach once", ^{}); itBehavesLike(@"a group of three shared examples with a beforeEach in Obj-C", ^NSDictionary*{ return @{}; }); QuickSpecEnd @interface SharedExamples_BeforeEachTests_ObjC : XCTestCase; @end @implementation SharedExamples_BeforeEachTests_ObjC - (void)setUp { [super setUp]; specBeforeEachExecutedCount = 0; sharedExamplesBeforeEachExecutedCount = 0; } - (void)tearDown { specBeforeEachExecutedCount = 0; sharedExamplesBeforeEachExecutedCount = 0; [super tearDown]; } - (void)testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample { qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]); XCTAssertEqual(specBeforeEachExecutedCount, 4); } - (void)testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample { qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]); XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests.swift ================================================ import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif var specBeforeEachExecutedCount = 0 var sharedExamplesBeforeEachExecutedCount = 0 class FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples: QuickConfiguration { override class func configure(configuration: Configuration) { sharedExamples("a group of three shared examples with a beforeEach") { beforeEach { sharedExamplesBeforeEachExecutedCount += 1 } it("passes once") {} it("passes twice") {} it("passes three times") {} } } } class FunctionalTests_SharedExamples_BeforeEachSpec: QuickSpec { override func spec() { beforeEach { specBeforeEachExecutedCount += 1 } it("executes the spec beforeEach once") {} itBehavesLike("a group of three shared examples with a beforeEach") } } class SharedExamples_BeforeEachTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample", testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample), ("testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample", testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample), ] } func testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample() { specBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.self) XCTAssertEqual(specBeforeEachExecutedCount, 4) } func testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample() { sharedExamplesBeforeEachExecutedCount = 0 qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.self) XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests+ObjC.m ================================================ @import XCTest; @import Quick; @import Nimble; #import "QCKSpecRunner.h" QuickSpecBegin(FunctionalTests_SharedExamples_Spec_ObjC) itBehavesLike(@"a group of three shared examples", ^NSDictionary*{ return @{}; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_SharedExamples_ContextSpec_ObjC) itBehavesLike(@"shared examples that take a context", ^NSDictionary *{ return @{ @"callsite": @"SharedExamplesSpec" }; }); QuickSpecEnd QuickSpecBegin(FunctionalTests_SharedExamples_SameContextSpec_ObjC) __block NSInteger counter = 0; afterEach(^{ counter++; }); sharedExamples(@"gets called with a different context from within the same spec file", ^(QCKDSLSharedExampleContext exampleContext) { it(@"tracks correctly", ^{ NSString *payload = exampleContext()[@"payload"]; BOOL expected = [payload isEqualToString:[NSString stringWithFormat:@"%ld", (long)counter]]; expect(@(expected)).to(beTrue()); }); }); itBehavesLike(@"gets called with a different context from within the same spec file", ^{ return @{ @"payload" : @"0" }; }); itBehavesLike(@"gets called with a different context from within the same spec file", ^{ return @{ @"payload" : @"1" }; }); QuickSpecEnd @interface SharedExamplesTests_ObjC : XCTestCase; @end @implementation SharedExamplesTests_ObjC - (void)testAGroupOfThreeSharedExamplesExecutesThreeExamples { XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_Spec_ObjC class]); XCTAssert(result.hasSucceeded); XCTAssertEqual(result.executionCount, 3); } - (void)testSharedExamplesWithContextPassContextToExamples { XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_ContextSpec_ObjC class]); XCTAssert(result.hasSucceeded); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests.swift ================================================ import Foundation import XCTest import Quick import Nimble #if SWIFT_PACKAGE import QuickTestHelpers #endif class FunctionalTests_SharedExamples_Spec: QuickSpec { override func spec() { itBehavesLike("a group of three shared examples") } } class FunctionalTests_SharedExamples_ContextSpec: QuickSpec { override func spec() { itBehavesLike("shared examples that take a context") { [NSString(string: "callsite"): NSString(string: "SharedExamplesSpec")] } } } #if _runtime(_ObjC) class FunctionalTests_SharedExamples_ErrorSpec: QuickSpec { override func spec() { describe("error handling when misusing ordering") { it("should throw an exception when including itBehavesLike in it block") { expect { itBehavesLike("a group of three shared examples") }.to(raiseException { (exception: NSException) in expect(exception.name).to(equal(NSInternalInconsistencyException)) expect(exception.reason).to(equal("'itBehavesLike' cannot be used inside 'it', 'itBehavesLike' may only be used inside 'context' or 'describe'. ")) }) } } } } #endif // Shared examples are defined in QuickTests/Fixtures class SharedExamplesTests: XCTestCase, XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { return [ ("testAGroupOfThreeSharedExamplesExecutesThreeExamples", testAGroupOfThreeSharedExamplesExecutesThreeExamples), ("testSharedExamplesWithContextPassContextToExamples", testSharedExamplesWithContextPassContextToExamples), ] } func testAGroupOfThreeSharedExamplesExecutesThreeExamples() { let result = qck_runSpec(FunctionalTests_SharedExamples_Spec.self) XCTAssert(result.hasSucceeded) XCTAssertEqual(result.executionCount, 3 as UInt) } func testSharedExamplesWithContextPassContextToExamples() { let result = qck_runSpec(FunctionalTests_SharedExamples_ContextSpec.self) XCTAssert(result.hasSucceeded) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.h ================================================ @import XCTest; /** Runs an XCTestSuite instance containing only the given XCTestCase subclass. Use this to run QuickSpec subclasses from within a set of unit tests. Due to implicit dependencies in _XCTFailureHandler, this function raises an exception when used in Swift to run a failing test case. @param specClass The class of the spec to be run. @return An XCTestRun instance that contains information such as the number of failures, etc. */ extern XCTestRun *qck_runSpec(Class specClass); /** Runs an XCTestSuite instance containing the given XCTestCase subclasses, in the order provided. See the documentation for `qck_runSpec` for more details. @param specClasses An array of QuickSpec classes, in the order they should be run. @return An XCTestRun instance that contains information such as the number of failures, etc. */ extern XCTestRun *qck_runSpecs(NSArray *specClasses); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.m ================================================ @import Quick; #import "QCKSpecRunner.h" #import "XCTestObservationCenter+QCKSuspendObservation.h" #import "World.h" @interface XCTest (Redeclaration) - (XCTestRun *)run; @end XCTestRun *qck_runSuite(XCTestSuite *suite) { [World sharedWorld].isRunningAdditionalSuites = YES; __block XCTestRun *result = nil; [[XCTestObservationCenter sharedTestObservationCenter] qck_suspendObservationForBlock:^{ if ([suite respondsToSelector:@selector(runTest)]) { [suite runTest]; result = suite.testRun; } else { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" result = [suite run]; #pragma clang diagnostic pop } }]; return result; } XCTestRun *qck_runSpec(Class specClass) { return qck_runSuite([XCTestSuite testSuiteForTestCaseClass:specClass]); } XCTestRun *qck_runSpecs(NSArray *specClasses) { XCTestSuite *suite = [XCTestSuite testSuiteWithName:@"MySpecs"]; for (Class specClass in specClasses) { [suite addTest:[XCTestSuite testSuiteForTestCaseClass:specClass]]; } return qck_runSuite(suite); } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.h ================================================ #import NS_ASSUME_NONNULL_BEGIN @interface QuickSpec (QuickSpec_MethodList) + (NSSet *)allSelectors; @end NS_ASSUME_NONNULL_END ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.m ================================================ #import "QuickSpec+QuickSpec_MethodList.h" #import @implementation QuickSpec (QuickSpec_MethodList) /** * This method will instantiate an instance of the class on which it is called, * returning a list of selector names for it. * * @warning Only intended to be used in test assertions! * * @return a set of NSStrings representing the list of selectors it contains */ + (NSSet *)allSelectors { QuickSpec *specInstance = [[[self class] alloc] init]; NSMutableSet *allSelectors = [NSMutableSet set]; unsigned int methodCount = 0; Method *mlist = class_copyMethodList(object_getClass(specInstance), &methodCount); for(unsigned int i = 0; i < methodCount; i++) { SEL selector = method_getName(mlist[i]); [allSelectors addObject:NSStringFromSelector(selector)]; } free(mlist); return [allSelectors copy]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h ================================================ #import "QCKSpecRunner.h" #import "QuickSpec+QuickSpec_MethodList.h" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestCaseProvider.swift ================================================ import Foundation import XCTest // XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available // in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, // we ensure that the tests fail in Xcode if they haven't been configured properly to // be run with the open-source tools. #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) public protocol XCTestCaseProvider { var allTests: [(String, () throws -> Void)] { get } } extension XCTestCase { override public func tearDown() { if let provider = self as? XCTestCaseProvider { provider.assertContainsTest(invocation!.selector.description) } super.tearDown() } } extension XCTestCaseProvider { private func assertContainsTest(name: String) { let contains = self.allTests.contains({ test in return test.0 == name }) XCTAssert(contains, "Test '\(name)' is missing from the allTests array") } } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.h ================================================ #import /** Add the ability to temporarily disable internal XCTest execution observation in order to run isolated XCTestSuite instances while the QuickTests test suite is running. */ @interface XCTestObservationCenter (QCKSuspendObservation) /** Suspends test suite observation for XCTest-provided observers for the duration that the block is executing. Any test suites that are executed within the block do not generate any log output. Failures are still reported. Use this method to run XCTestSuite objects while another XCTestSuite is running. Without this method, tests fail with the message: "Timed out waiting for IDE barrier message to complete" or "Unexpected TestSuiteDidStart". */ - (void)qck_suspendObservationForBlock:(void (^)(void))block; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.m ================================================ @import XCTest; #import @interface XCTestObservationCenter (Redeclaration) - (id)observers; - (void)removeTestObserver:(id)testObserver; @end @implementation XCTestObservationCenter (QCKSuspendObservation) /// This allows us to only suspend observation for observers by provided by Apple /// as a part of the XCTest framework. In particular it is important that we not /// suspend the observer added by Nimble, otherwise it is unable to properly /// report assertion failures. static BOOL (^isFromApple)(id) = ^BOOL(id observer){ return [[NSBundle bundleForClass:[observer class]].bundleIdentifier containsString:@"com.apple.dt.XCTest"]; }; - (void)qck_suspendObservationForBlock:(void (^)(void))block { id originalObservers = [[self observers] copy]; NSMutableArray *suspendedObservers = [NSMutableArray new]; for (id observer in originalObservers) { if (isFromApple(observer)) { [suspendedObservers addObject:observer]; if ([self respondsToSelector:@selector(removeTestObserver:)]) { [self removeTestObserver:observer]; } else if ([[self observers] respondsToSelector:@selector(removeObject:)]) { [[self observers] removeObject:observer]; } else { NSAssert(NO, @"unexpected type: unable to remove observers: %@", originalObservers); } } } @try { block(); } @finally { for (id observer in suspendedObservers) { if ([[self observers] respondsToSelector:@selector(addObject:)]) { [[self observers] addObject:observer]; } else if ([self respondsToSelector:@selector(addTestObserver:)]) { [self addTestObserver:observer]; } } } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/QuickConfigurationTests.m ================================================ #import #import @interface QuickConfigurationTests : XCTestCase; @end @implementation QuickConfigurationTests - (void)testInitThrows { XCTAssertThrowsSpecificNamed([QuickConfiguration new], NSException, NSInternalInconsistencyException); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Sources/QuickTests/main.swift ================================================ import Quick QCKMain([ FunctionalTests_AfterEachSpec(), AfterEachTests(), FunctionalTests_AfterSuite_AfterSuiteSpec(), FunctionalTests_AfterSuite_Spec(), AfterSuiteTests(), FunctionalTests_BeforeEachSpec(), BeforeEachTests(), FunctionalTests_BeforeSuite_BeforeSuiteSpec(), FunctionalTests_BeforeSuite_Spec(), BeforeSuiteTests(), // DescribeTests(), FunctionalTests_ItSpec(), ItTests(), FunctionalTests_PendingSpec(), PendingTests(), FunctionalTests_SharedExamples_BeforeEachSpec(), SharedExamples_BeforeEachTests(), FunctionalTests_SharedExamples_Spec(), FunctionalTests_SharedExamples_ContextSpec(), SharedExamplesTests(), Configuration_AfterEachSpec(), Configuration_AfterEachTests(), Configuration_BeforeEachSpec(), Configuration_BeforeEachTests(), FunctionalTests_CrossReferencingSpecA(), FunctionalTests_CrossReferencingSpecB(), ], configurations: [ FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples.self, FunctionalTests_SharedExamplesTests_SharedExamples.self, FunctionalTests_Configuration_AfterEach.self, FunctionalTests_Configuration_BeforeEach.self, ] ) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/circle.yml ================================================ machine: xcode: version: "7.3" checkout: post: - git submodule update --init --recursive dependencies: pre: - brew update - brew outdated xctool || brew upgrade xctool test: override: - rake test:ios - rake test:osx - rake test:xctool:ios - rake test:xctool:osx ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/script/release ================================================ #!/usr/bin/env sh REMOTE_BRANCH=master POD_NAME=Quick PODSPEC=Quick.podspec POD=${COCOAPODS:-pod} function help { echo "Usage: release VERSION RELEASE_NOTES [-f]" echo echo "VERSION should be the version to release, should not include the 'v' prefix" echo "RELEASE_NOTES should be a file that lists all the release notes for this version" echo " if file does not exist, creates a git-style commit with a diff as a comment" echo echo "FLAGS" echo " -f Forces override of tag" echo echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" echo echo "HINT: use 'git diff ...HEAD' to build the release notes" echo exit 2 } function die { echo "[ERROR] $@" echo exit 1 } if [ $# -lt 2 ]; then help fi VERSION=$1 RELEASE_NOTES=$2 FORCE_TAG=$3 VERSION_TAG="v$VERSION" echo "-> Verifying Local Directory for Release" if [ -z "`which $POD`" ]; then die "Cocoapods is required to produce a release. Aborting." fi echo " > Cocoapods is installed" echo " > Is this a reasonable tag?" echo $VERSION_TAG | grep -q "^vv" if [ $? -eq 0 ]; then die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." fi echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" if [ $? -ne 0 ]; then die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." fi echo " > Is this version ($VERSION) unique?" git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 if [ $? -eq 0 ]; then if [ -z "$FORCE_TAG" ]; then die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" else echo " > NO, but force was specified." fi else echo " > Yes, tag is unique" fi if [ ! -f "$RELEASE_NOTES" ]; then echo " > Failed to find $RELEASE_NOTES. Prompting editor" RELEASE_NOTES=.release-changes LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` echo " > Latest tag ${LATEST_TAG}" echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES echo "================" >> $RELEASE_NOTES echo >> $RELEASE_NOTES echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES $EDITOR $RELEASE_NOTES diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 STATUS=$? rm ${RELEASE_NOTES}.backup if [ $STATUS -eq 0 ]; then rm $RELEASE_NOTES die "No changes in release notes file. Aborting." fi fi echo " > Release notes: $RELEASE_NOTES" if [ ! -f "$PODSPEC" ]; then die "Cannot find podspec: $PODSPEC. Aborting." fi echo " > Podspec exists" git config --get user.signingkey > /dev/null || { echo "[ERROR] No PGP found to sign tag. Aborting." echo echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" echo " intermediate between you and the end-users to modify the git repository." echo echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" echo " from the official maintainers." echo echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." echo echo "Related resources:" echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" echo exit 2 } echo " > Found PGP key for git" # Verify cocoapods trunk ownership pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." echo " > Verified ownership to $POD_NAME pod" echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." function restore_podspec { if [ -f "${PODSPEC}.backup" ]; then mv -f ${PODSPEC}{.backup,} fi } echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" git fetch origin || die "Failed to fetch origin" git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" echo "-> Setting podspec version" cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" SET_PODSPEC_VERSION=$? if [ $SET_PODSPEC_VERSION -eq 0 ]; then echo " > Podspec already set to $VERSION. Skipping." else sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { restore_podspec die "Failed to update version in podspec" } git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi if [ -z "$FORCE_TAG" ]; then echo "-> Tagging version" git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin" git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" else echo "-> Tagging version (force)" git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" echo "-> Pushing tag to origin (force)" git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" fi if [ $SET_PODSPEC_VERSION -ne 0 ]; then rm $RELEASE_NOTES git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" echo " > Pushed version to origin" fi echo echo "Pushing to pod trunk..." $POD trunk push "$PODSPEC" echo echo "================ Finalizing the Release ================" echo echo " - Opening GitHub to mark this as a release..." echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for Github styling." echo " - Announce!" open "https://github.com/Quick/Quick/releases/new?tag=$VERSION_TAG" rm ${PODSPEC}.backup ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/script/travis-install-linux ================================================ #!/usr/bin/env bash set -e # See: https://github.com/kylef/swiftenv/wiki/Travis-CI curl -sL https://gist.github.com/kylef/5c0475ff02b7c7671d2a/raw/621ef9b29bbb852fdfd2e10ed147b321d792c1e4/swiftenv-install.sh | bash ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/script/travis-install-osx ================================================ #!/usr/bin/env sh set -e git submodule update --init --recursive if [[ "$XCTOOL" -eq 1 ]]; then brew update brew outdated xctool || brew upgrade xctool fi ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/script/travis-script-linux ================================================ #!/usr/bin/env sh . ~/.swiftenv/init rake test:swiftpm ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/script/travis-script-osx ================================================ #!/usr/bin/env sh if [ "$PODSPEC" ]; then TASK="podspec:lint" else TASK="test" if [ "$XCTOOL" ]; then TASK="$TASK:xctool"; fi TASK="$TASK:$PLATFORM" fi echo "Executing rake task: $TASK" rake "$TASK" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/.gitignore ================================================ .DS_Store xcuserdata *.xcuserdatad *.xccheckout *.mode* *.pbxuser Carthage/Build .build ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-05-31-a ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/.travis.yml ================================================ matrix: include: - script: - xcodebuild test -scheme Result-Mac - xcodebuild test -scheme Result-iOS -sdk iphonesimulator - xcodebuild test -scheme Result-tvOS -sdk appletvsimulator - xcodebuild build -scheme Result-watchOS -sdk watchsimulator - pod lib lint env: JOB=Xcode7.3 os: osx osx_image: xcode7.3 language: objective-c - script: - xcodebuild test -scheme Result-Mac - xcodebuild build -scheme Result-iOS -sdk iphonesimulator -destination "name=iPhone 6s" - xcodebuild test -scheme Result-tvOS -sdk appletvsimulator -destination "name=Apple TV 1080p" - xcodebuild build -scheme Result-watchOS -sdk watchsimulator -destination "name=Apple Watch - 38mm" env: JOB=Xcode8 os: osx osx_image: xcode8 language: objective-c - script: - swift build - swift test env: JOB=SPM os: osx osx_image: xcode7.3 language: objective-c install: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" - script: - swift build - swift test env: JOB=Linux sudo: required dist: trusty language: generic install: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" notifications: email: false ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/CONTRIBUTING.md ================================================ We love that you're interested in contributing to this project! To make the process as painless as possible, we have just a couple of guidelines that should make life easier for everyone involved. ## Prefer Pull Requests If you know exactly how to implement the feature being suggested or fix the bug being reported, please open a pull request instead of an issue. Pull requests are easier than patches or inline code blocks for discussing and merging the changes. If you can't make the change yourself, please open an issue after making sure that one isn't already logged. ## Contributing Code Fork this repository, make it awesomer (preferably in a branch named for the topic), send a pull request! All code contributions should match our [coding conventions](https://github.com/github/swift-style-guide). Thanks for contributing! :boom::camel: ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Rob Rix 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: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Package.swift ================================================ import PackageDescription let package = Package( name: "Result", targets: [ Target( name: "Result" ) ] ) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/README.md ================================================ # Result [![Build Status](https://travis-ci.org/antitypical/Result.svg?branch=master)](https://travis-ci.org/antitypical/Result) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![CocoaPods](https://img.shields.io/cocoapods/v/Result.svg)](https://cocoapods.org/) [![Reference Status](https://www.versioneye.com/objective-c/result/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/result/references) This is a Swift µframework providing `Result`. `Result` values are either successful (wrapping `Value`) or failed (wrapping `Error`). This is similar to Swift’s native `Optional` type: `Success` is like `Some`, and `Failure` is like `None` except with an associated `ErrorType` value. The addition of an associated `ErrorType` allows errors to be passed along for logging or displaying to the user. Using this µframework instead of rolling your own `Result` type allows you to easily interface with other frameworks that also use `Result`. ## Use Use `Result` whenever an operation has the possibility of failure. Consider the following example of a function that tries to extract a `String` for a given key from a JSON `Dictionary`. ```swift typealias JSONObject = [String:AnyObject] enum JSONError : ErrorType { case NoSuchKey(String) case TypeMismatch } func stringForKey(json: JSONObject, key: String) -> Result { guard let value = json[key] else { return .Failure(.NoSuchKey(key)) } if let value = value as? String { return .Success(value) } else { return .Failure(.TypeMismatch) } } ``` This function provides a more robust wrapper around the default subscripting provided by `Dictionary`. Rather than return `AnyObject?`, it returns a `Result` that either contains the `String` value for the given key, or an `ErrorType` detailing what went wrong. One simple way to handle a `Result` is to deconstruct it using a `switch` statement. ```swift switch stringForKey(json, key: "email") { case let .Success(email): print("The email is \(email)") case let .Failure(JSONError.NoSuchKey(key)): print("\(key) is not a valid key") case .Failure(JSONError.TypeMismatch): print("Didn't have the right type") } ``` Using a `switch` statement allows powerful pattern matching, and ensures all possible results are covered. Swift 2.0 offers new ways to deconstruct enums like the `if-case` statement, but be wary as such methods do not ensure errors are handled. Other methods available for processing `Result` are detailed in the [API documentation](http://cocoadocs.org/docsets/Result/). ## Result vs. Throws Swift 2.0 introduces error handling via throwing and catching `ErrorType`. `Result` accomplishes the same goal by encapsulating the result instead of hijacking control flow. The `Result` abstraction enables powerful functionality such as `map` and `flatMap`, making `Result` more composable than `throw`. Since dealing with APIs that throw is common, you can convert such functions into a `Result` by using the `materialize` method. Conversely, a `Result` can be used to throw an error by calling `dematerialize`. ## Higher Order Functions `map` and `flatMap` operate the same as `Optional.map` and `Optional.flatMap` except they apply to `Result`. `map` transforms a `Result` into a `Result` of a new type. It does this by taking a function that transforms the `Value` type into a new value. This transformation is only applied in the case of a `Success`. In the case of a `Failure`, the associated error is re-wrapped in the new `Result`. ```swift // transforms a Result to a Result let idResult = intForKey(json, key:"id").map { id in String(id) } ``` Here, the final result is either the id as a `String`, or carries over the `.Failure` from the previous result. `flatMap` is similar to `map` in that in transforms the `Result` into another `Result`. However, the function passed into `flatMap` must return a `Result`. An in depth discussion of `map` and `flatMap` is beyond the scope of this documentation. If you would like a deeper understanding, read about functors and monads. This article is a good place to [start](http://www.javiersoto.me/post/106875422394). ## Integration 1. Add this repository as a submodule and/or [add it to your Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile) if you’re using [carthage](https://github.com/Carthage/Carthage/) to manage your dependencies. 2. Drag `Result.xcodeproj` into your project or workspace. 3. Link your target against `Result.framework`. 4. Application targets should ensure that the framework gets copied into their application bundle. (Framework targets should instead require the application linking them to include Result.) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 2.1.3 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright Copyright © 2015 Rob Rix. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/Result.h ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. /// Project version number for Result. extern double ResultVersionNumber; /// Project version string for Result. extern const unsigned char ResultVersionString[]; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/Result.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. /// An enum representing either a failure with an explanatory error, or a success with a result value. public enum Result: ResultType, CustomStringConvertible, CustomDebugStringConvertible { case Success(T) case Failure(Error) // MARK: Constructors /// Constructs a success wrapping a `value`. public init(value: T) { self = .Success(value) } /// Constructs a failure wrapping an `error`. public init(error: Error) { self = .Failure(error) } /// Constructs a result from an Optional, failing with `Error` if `nil`. #if swift(>=3) public init(_ value: T?, failWith: @autoclosure () -> Error) { self = value.map(Result.Success) ?? .Failure(failWith()) } #else public init(_ value: T?, @autoclosure failWith: () -> Error) { self = value.map(Result.Success) ?? .Failure(failWith()) } #endif /// Constructs a result from a function that uses `throw`, failing with `Error` if throws. #if swift(>=3) public init(_ f: @autoclosure () throws -> T) { self.init(attempt: f) } #else public init(@autoclosure _ f: () throws -> T) { self.init(attempt: f) } #endif /// Constructs a result from a function that uses `throw`, failing with `Error` if throws. #if swift(>=3) public init(attempt f: @noescape () throws -> T) { do { self = .Success(try f()) } catch { self = .Failure(error as! Error) } } #else public init(@noescape attempt f: () throws -> T) { do { self = .Success(try f()) } catch { self = .Failure(error as! Error) } } #endif // MARK: Deconstruction /// Returns the value from `Success` Results or `throw`s the error. public func dematerialize() throws -> T { switch self { case let .Success(value): return value case let .Failure(error): throw error } } /// Case analysis for Result. /// /// Returns the value produced by applying `ifFailure` to `Failure` Results, or `ifSuccess` to `Success` Results. #if swift(>=3) public func analysis(ifSuccess: @noescape (T) -> Result, ifFailure: @noescape (Error) -> Result) -> Result { switch self { case let .Success(value): return ifSuccess(value) case let .Failure(value): return ifFailure(value) } } #else public func analysis(@noescape ifSuccess ifSuccess: T -> Result, @noescape ifFailure: Error -> Result) -> Result { switch self { case let .Success(value): return ifSuccess(value) case let .Failure(value): return ifFailure(value) } } #endif // MARK: Errors /// The domain for errors constructed by Result. public static var errorDomain: String { return "com.antitypical.Result" } /// The userInfo key for source functions in errors constructed by Result. public static var functionKey: String { return "\(errorDomain).function" } /// The userInfo key for source file paths in errors constructed by Result. public static var fileKey: String { return "\(errorDomain).file" } /// The userInfo key for source file line numbers in errors constructed by Result. public static var lineKey: String { return "\(errorDomain).line" } #if os(Linux) private typealias UserInfoType = Any #else private typealias UserInfoType = AnyObject #endif /// Constructs an error. #if swift(>=3) public static func error(_ message: String? = nil, function: String = #function, file: String = #file, line: Int = #line) -> NSError { var userInfo: [String: UserInfoType] = [ functionKey: function, fileKey: file, lineKey: line, ] if let message = message { userInfo[NSLocalizedDescriptionKey] = message } return NSError(domain: errorDomain, code: 0, userInfo: userInfo) } #else public static func error(message: String? = nil, function: String = #function, file: String = #file, line: Int = #line) -> NSError { var userInfo: [String: UserInfoType] = [ functionKey: function, fileKey: file, lineKey: line, ] if let message = message { userInfo[NSLocalizedDescriptionKey] = message } return NSError(domain: errorDomain, code: 0, userInfo: userInfo) } #endif // MARK: CustomStringConvertible public var description: String { return analysis( ifSuccess: { ".Success(\($0))" }, ifFailure: { ".Failure(\($0))" }) } // MARK: CustomDebugStringConvertible public var debugDescription: String { return description } } // MARK: - Derive result from failable closure #if swift(>=3) public func materialize(_ f: @noescape () throws -> T) -> Result { return materialize(try f()) } public func materialize(_ f: @autoclosure () throws -> T) -> Result { do { return .Success(try f()) } catch let error as NSError { return .Failure(error) } } #else public func materialize(@noescape f: () throws -> T) -> Result { return materialize(try f()) } public func materialize(@autoclosure f: () throws -> T) -> Result { do { return .Success(try f()) } catch let error as NSError { return .Failure(error) } } #endif // MARK: - Cocoa API conveniences #if !os(Linux) /// Constructs a Result with the result of calling `try` with an error pointer. /// /// This is convenient for wrapping Cocoa API which returns an object or `nil` + an error, by reference. e.g.: /// /// Result.try { NSData(contentsOfURL: URL, options: .DataReadingMapped, error: $0) } #if swift(>=3) public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, `try`: (NSErrorPointer) -> T?) -> Result { var error: NSError? return `try`(&error).map(Result.Success) ?? .Failure(error ?? Result.error(function: function, file: file, line: line)) } #else public func `try`(function: String = #function, file: String = #file, line: Int = #line, `try`: NSErrorPointer -> T?) -> Result { var error: NSError? return `try`(&error).map(Result.Success) ?? .Failure(error ?? Result.error(function: function, file: file, line: line)) } #endif /// Constructs a Result with the result of calling `try` with an error pointer. /// /// This is convenient for wrapping Cocoa API which returns a `Bool` + an error, by reference. e.g.: /// /// Result.try { NSFileManager.defaultManager().removeItemAtURL(URL, error: $0) } #if swift(>=3) public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, `try`: (NSErrorPointer) -> Bool) -> Result<(), NSError> { var error: NSError? return `try`(&error) ? .Success(()) : .Failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line)) } #else public func `try`(function: String = #function, file: String = #file, line: Int = #line, `try`: NSErrorPointer -> Bool) -> Result<(), NSError> { var error: NSError? return `try`(&error) ? .Success(()) : .Failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line)) } #endif #endif // MARK: - ErrorTypeConvertible conformance extension NSError: ErrorTypeConvertible { #if swift(>=3) public static func errorFromErrorType(_ error: ResultErrorType) -> Self { func cast(_ error: ResultErrorType) -> T { return error as! T } return cast(error) } #else public static func errorFromErrorType(error: ResultErrorType) -> Self { func cast(error: ResultErrorType) -> T { return error as! T } return cast(error) } #endif } // MARK: - /// An “error” that is impossible to construct. /// /// This can be used to describe `Result`s where failures will never /// be generated. For example, `Result` describes a result that /// contains an `Int`eger and is guaranteed never to be a `Failure`. public enum NoError: ResultErrorType { } import Foundation ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/ResultType.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. #if swift(>=3.0) public typealias ResultErrorType = ErrorProtocol #else public typealias ResultErrorType = ErrorType #endif /// A type that can represent either failure with an error or success with a result value. public protocol ResultType { associatedtype Value associatedtype Error: ResultErrorType /// Constructs a successful result wrapping a `value`. init(value: Value) /// Constructs a failed result wrapping an `error`. init(error: Error) /// Case analysis for ResultType. /// /// Returns the value produced by appliying `ifFailure` to the error if self represents a failure, or `ifSuccess` to the result value if self represents a success. #if swift(>=3) func analysis(ifSuccess: @noescape (Value) -> U, ifFailure: @noescape (Error) -> U) -> U #else func analysis(@noescape ifSuccess ifSuccess: Value -> U, @noescape ifFailure: Error -> U) -> U #endif /// Returns the value if self represents a success, `nil` otherwise. /// /// A default implementation is provided by a protocol extension. Conforming types may specialize it. var value: Value? { get } /// Returns the error if self represents a failure, `nil` otherwise. /// /// A default implementation is provided by a protocol extension. Conforming types may specialize it. var error: Error? { get } } public extension ResultType { /// Returns the value if self represents a success, `nil` otherwise. public var value: Value? { return analysis(ifSuccess: { $0 }, ifFailure: { _ in nil }) } /// Returns the error if self represents a failure, `nil` otherwise. public var error: Error? { return analysis(ifSuccess: { _ in nil }, ifFailure: { $0 }) } /// Returns a new Result by mapping `Success`es’ values using `transform`, or re-wrapping `Failure`s’ errors. #if swift(>=3) @warn_unused_result public func map(_ transform: @noescape (Value) -> U) -> Result { return flatMap { .Success(transform($0)) } } #else @warn_unused_result public func map(@noescape transform: Value -> U) -> Result { return flatMap { .Success(transform($0)) } } #endif /// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors. #if swift(>=3) @warn_unused_result public func flatMap(_ transform: @noescape (Value) -> Result) -> Result { return analysis( ifSuccess: transform, ifFailure: Result.Failure) } #else @warn_unused_result public func flatMap(@noescape transform: Value -> Result) -> Result { return analysis( ifSuccess: transform, ifFailure: Result.Failure) } #endif /// Returns a new Result by mapping `Failure`'s values using `transform`, or re-wrapping `Success`es’ values. #if swift(>=3) @warn_unused_result public func mapError(_ transform: @noescape (Error) -> Error2) -> Result { return flatMapError { .Failure(transform($0)) } } #else @warn_unused_result public func mapError(@noescape transform: Error -> Error2) -> Result { return flatMapError { .Failure(transform($0)) } } #endif /// Returns the result of applying `transform` to `Failure`’s errors, or re-wrapping `Success`es’ values. #if swift(>=3) @warn_unused_result public func flatMapError(_ transform: @noescape (Error) -> Result) -> Result { return analysis( ifSuccess: Result.Success, ifFailure: transform) } #else @warn_unused_result public func flatMapError(@noescape transform: Error -> Result) -> Result { return analysis( ifSuccess: Result.Success, ifFailure: transform) } #endif } public extension ResultType { // MARK: Higher-order functions /// Returns `self.value` if this result is a .Success, or the given value otherwise. Equivalent with `??` #if swift(>=3) public func recover(_ value: @autoclosure () -> Value) -> Value { return self.value ?? value() } #else public func recover(@autoclosure value: () -> Value) -> Value { return self.value ?? value() } #endif /// Returns this result if it is a .Success, or the given result otherwise. Equivalent with `??` #if swift(>=3) public func recoverWith(_ result: @autoclosure () -> Self) -> Self { return analysis( ifSuccess: { _ in self }, ifFailure: { _ in result() }) } #else public func recoverWith(@autoclosure result: () -> Self) -> Self { return analysis( ifSuccess: { _ in self }, ifFailure: { _ in result() }) } #endif } /// Protocol used to constrain `tryMap` to `Result`s with compatible `Error`s. public protocol ErrorTypeConvertible: ResultErrorType { #if swift(>=3) static func errorFromErrorType(_ error: ResultErrorType) -> Self #else static func errorFromErrorType(error: ResultErrorType) -> Self #endif } public extension ResultType where Error: ErrorTypeConvertible { /// Returns the result of applying `transform` to `Success`es’ values, or wrapping thrown errors. #if swift(>=3) @warn_unused_result public func tryMap(_ transform: @noescape (Value) throws -> U) -> Result { return flatMap { value in do { return .Success(try transform(value)) } catch { let convertedError = Error.errorFromErrorType(error) // Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321 return .Failure(convertedError) } } } #else @warn_unused_result public func tryMap(@noescape transform: Value throws -> U) -> Result { return flatMap { value in do { return .Success(try transform(value)) } catch { let convertedError = Error.errorFromErrorType(error) // Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321 return .Failure(convertedError) } } } #endif } // MARK: - Operators infix operator &&& { /// Same associativity as &&. associativity left /// Same precedence as &&. precedence 120 } /// Returns a Result with a tuple of `left` and `right` values if both are `Success`es, or re-wrapping the error of the earlier `Failure`. #if swift(>=3) public func &&& (left: L, right: @autoclosure () -> R) -> Result<(L.Value, R.Value), L.Error> { return left.flatMap { left in right().map { right in (left, right) } } } #else public func &&& (left: L, @autoclosure right: () -> R) -> Result<(L.Value, R.Value), L.Error> { return left.flatMap { left in right().map { right in (left, right) } } } #endif infix operator >>- { // Left-associativity so that chaining works like you’d expect, and for consistency with Haskell, Runes, swiftz, etc. associativity left // Higher precedence than function application, but lower than function composition. precedence 100 } /// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors. /// /// This is a synonym for `flatMap`. #if swift(>=3) public func >>- (result: T, transform: @noescape (T.Value) -> Result) -> Result { return result.flatMap(transform) } #else public func >>- (result: T, @noescape transform: T.Value -> Result) -> Result { return result.flatMap(transform) } #endif /// Returns `true` if `left` and `right` are both `Success`es and their values are equal, or if `left` and `right` are both `Failure`s and their errors are equal. public func == (left: T, right: T) -> Bool { if let left = left.value, right = right.value { return left == right } else if let left = left.error, right = right.error { return left == right } return false } /// Returns `true` if `left` and `right` represent different cases, or if they represent the same case but different values. public func != (left: T, right: T) -> Bool { return !(left == right) } /// Returns the value of `left` if it is a `Success`, or `right` otherwise. Short-circuits. #if swift(>=3) public func ?? (left: T, right: @autoclosure () -> T.Value) -> T.Value { return left.recover(right()) } #else public func ?? (left: T, @autoclosure right: () -> T.Value) -> T.Value { return left.recover(right()) } #endif /// Returns `left` if it is a `Success`es, or `right` otherwise. Short-circuits. #if swift(>=3) public func ?? (left: T, right: @autoclosure () -> T) -> T { return left.recoverWith(right()) } #else public func ?? (left: T, @autoclosure right: () -> T) -> T { return left.recoverWith(right()) } #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.podspec ================================================ Pod::Spec.new do |s| s.name = 'Result' s.version = '2.1.3' s.summary = 'Swift type modelling the success/failure of arbitrary operations' s.homepage = 'https://github.com/antitypical/Result' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Rob Rix' => 'rob.rix@github.com' } s.source = { :git => 'https://github.com/antitypical/Result.git', :tag => s.version } s.source_files = 'Result/*.swift' s.requires_arc = true s.pod_target_xcconfig = { 'SWIFT_VERSION' => '2.3' } s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.9' s.watchos.deployment_target = '2.0' s.tvos.deployment_target = '9.0' end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; 57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; 57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; 57FCDE421BA280DC00130C48 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; 57FCDE561BA2814300130C48 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57FCDE471BA280DC00130C48 /* Result.framework */; }; D035799B1B2B788F005D26AE /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; D035799E1B2B788F005D26AE /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; D03579B41B2B78C4005D26AE /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03579A31B2B788F005D26AE /* Result.framework */; }; D454805D1A9572F5009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; D45480681A9572F5009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D45480571A9572F5009D7229 /* Result.framework */; }; D454806F1A9572F5009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; D45480881A957362009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D454807D1A957361009D7229 /* Result.framework */; }; D45480971A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; D45480981A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; D45480991A9574B8009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; D454809A1A9574BB009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; E93621461B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; E93621471B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = 57FCDE3C1BA280DC00130C48; remoteInfo = "Result-tvOS"; }; D03579B21B2B78BB005D26AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = D03579991B2B788F005D26AE; remoteInfo = "Result-watchOS"; }; D45480691A9572F5009D7229 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = D45480561A9572F5009D7229; remoteInfo = Result; }; D45480891A957362009D7229 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = D454807C1A957361009D7229; remoteInfo = "Result-iOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 57FCDE471BA280DC00130C48 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D03579A31B2B788F005D26AE /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-watchOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D45480571A9572F5009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D454805B1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D454805C1A9572F5009D7229 /* Result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Result.h; sourceTree = ""; }; D45480671A9572F5009D7229 /* Result-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-MacTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D454806D1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D454806E1A9572F5009D7229 /* ResultTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTests.swift; sourceTree = ""; }; D454807D1A957361009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D45480871A957362009D7229 /* Result-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D45480961A957465009D7229 /* Result.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = ""; }; E93621451B35596200948F2A /* ResultType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultType.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 57FCDE401BA280DC00130C48 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 57FCDE4E1BA280E000130C48 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE561BA2814300130C48 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D035799C1B2B788F005D26AE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D03579AA1B2B78A1005D26AE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D03579B41B2B78C4005D26AE /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480531A9572F5009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480641A9572F5009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D45480681A9572F5009D7229 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480791A957361009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480841A957362009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D45480881A957362009D7229 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ D454804D1A9572F5009D7229 = { isa = PBXGroup; children = ( D45480591A9572F5009D7229 /* Result */, D454806B1A9572F5009D7229 /* ResultTests */, D45480581A9572F5009D7229 /* Products */, ); sourceTree = ""; usesTabs = 1; }; D45480581A9572F5009D7229 /* Products */ = { isa = PBXGroup; children = ( D45480571A9572F5009D7229 /* Result.framework */, D45480671A9572F5009D7229 /* Result-MacTests.xctest */, D454807D1A957361009D7229 /* Result.framework */, D45480871A957362009D7229 /* Result-iOSTests.xctest */, D03579A31B2B788F005D26AE /* Result.framework */, D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */, 57FCDE471BA280DC00130C48 /* Result.framework */, 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; D45480591A9572F5009D7229 /* Result */ = { isa = PBXGroup; children = ( D454805C1A9572F5009D7229 /* Result.h */, D45480961A957465009D7229 /* Result.swift */, E93621451B35596200948F2A /* ResultType.swift */, D454805A1A9572F5009D7229 /* Supporting Files */, ); path = Result; sourceTree = ""; }; D454805A1A9572F5009D7229 /* Supporting Files */ = { isa = PBXGroup; children = ( D454805B1A9572F5009D7229 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; D454806B1A9572F5009D7229 /* ResultTests */ = { isa = PBXGroup; children = ( D454806E1A9572F5009D7229 /* ResultTests.swift */, D454806C1A9572F5009D7229 /* Supporting Files */, ); name = ResultTests; path = Tests/Result; sourceTree = ""; }; D454806C1A9572F5009D7229 /* Supporting Files */ = { isa = PBXGroup; children = ( D454806D1A9572F5009D7229 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 57FCDE411BA280DC00130C48 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE421BA280DC00130C48 /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D035799D1B2B788F005D26AE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D035799E1B2B788F005D26AE /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480541A9572F5009D7229 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D454805D1A9572F5009D7229 /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D454807A1A957361009D7229 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D454809A1A9574BB009D7229 /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 57FCDE3C1BA280DC00130C48 /* Result-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget "Result-tvOS" */; buildPhases = ( 57FCDE3D1BA280DC00130C48 /* Sources */, 57FCDE401BA280DC00130C48 /* Frameworks */, 57FCDE411BA280DC00130C48 /* Headers */, 57FCDE431BA280DC00130C48 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-tvOS"; productName = "Result-iOS"; productReference = 57FCDE471BA280DC00130C48 /* Result.framework */; productType = "com.apple.product-type.framework"; }; 57FCDE491BA280E000130C48 /* Result-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget "Result-tvOSTests" */; buildPhases = ( 57FCDE4C1BA280E000130C48 /* Sources */, 57FCDE4E1BA280E000130C48 /* Frameworks */, 57FCDE501BA280E000130C48 /* Resources */, ); buildRules = ( ); dependencies = ( 57FCDE581BA2814A00130C48 /* PBXTargetDependency */, ); name = "Result-tvOSTests"; productName = "Result-iOSTests"; productReference = 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D03579991B2B788F005D26AE /* Result-watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = D03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOS" */; buildPhases = ( D035799A1B2B788F005D26AE /* Sources */, D035799C1B2B788F005D26AE /* Frameworks */, D035799D1B2B788F005D26AE /* Headers */, D035799F1B2B788F005D26AE /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-watchOS"; productName = Result; productReference = D03579A31B2B788F005D26AE /* Result.framework */; productType = "com.apple.product-type.framework"; }; D03579A51B2B78A1005D26AE /* Result-watchOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = D03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOSTests" */; buildPhases = ( D03579A81B2B78A1005D26AE /* Sources */, D03579AA1B2B78A1005D26AE /* Frameworks */, D03579AC1B2B78A1005D26AE /* Resources */, ); buildRules = ( ); dependencies = ( D03579B31B2B78BB005D26AE /* PBXTargetDependency */, ); name = "Result-watchOSTests"; productName = ResultTests; productReference = D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D45480561A9572F5009D7229 /* Result-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = D45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-Mac" */; buildPhases = ( D45480521A9572F5009D7229 /* Sources */, D45480531A9572F5009D7229 /* Frameworks */, D45480541A9572F5009D7229 /* Headers */, D45480551A9572F5009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-Mac"; productName = Result; productReference = D45480571A9572F5009D7229 /* Result.framework */; productType = "com.apple.product-type.framework"; }; D45480661A9572F5009D7229 /* Result-MacTests */ = { isa = PBXNativeTarget; buildConfigurationList = D45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-MacTests" */; buildPhases = ( D45480631A9572F5009D7229 /* Sources */, D45480641A9572F5009D7229 /* Frameworks */, D45480651A9572F5009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( D454806A1A9572F5009D7229 /* PBXTargetDependency */, ); name = "Result-MacTests"; productName = ResultTests; productReference = D45480671A9572F5009D7229 /* Result-MacTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D454807C1A957361009D7229 /* Result-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = D45480941A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOS" */; buildPhases = ( D45480781A957361009D7229 /* Sources */, D45480791A957361009D7229 /* Frameworks */, D454807A1A957361009D7229 /* Headers */, D454807B1A957361009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-iOS"; productName = "Result-iOS"; productReference = D454807D1A957361009D7229 /* Result.framework */; productType = "com.apple.product-type.framework"; }; D45480861A957362009D7229 /* Result-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = D45480951A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOSTests" */; buildPhases = ( D45480831A957362009D7229 /* Sources */, D45480841A957362009D7229 /* Frameworks */, D45480851A957362009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( D454808A1A957362009D7229 /* PBXTargetDependency */, ); name = "Result-iOSTests"; productName = "Result-iOSTests"; productReference = D45480871A957362009D7229 /* Result-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ D454804E1A9572F5009D7229 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Rob Rix"; TargetAttributes = { 57FCDE3C1BA280DC00130C48 = { LastSwiftMigration = 0800; }; 57FCDE491BA280E000130C48 = { LastSwiftMigration = 0800; }; D03579991B2B788F005D26AE = { LastSwiftMigration = 0800; }; D03579A51B2B78A1005D26AE = { LastSwiftMigration = 0800; }; D45480561A9572F5009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; D45480661A9572F5009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; D454807C1A957361009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; D45480861A957362009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; }; }; buildConfigurationList = D45480511A9572F5009D7229 /* Build configuration list for PBXProject "Result" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = D454804D1A9572F5009D7229; productRefGroup = D45480581A9572F5009D7229 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D45480561A9572F5009D7229 /* Result-Mac */, D45480661A9572F5009D7229 /* Result-MacTests */, D454807C1A957361009D7229 /* Result-iOS */, D45480861A957362009D7229 /* Result-iOSTests */, 57FCDE3C1BA280DC00130C48 /* Result-tvOS */, 57FCDE491BA280E000130C48 /* Result-tvOSTests */, D03579991B2B788F005D26AE /* Result-watchOS */, D03579A51B2B78A1005D26AE /* Result-watchOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 57FCDE431BA280DC00130C48 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 57FCDE501BA280E000130C48 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D035799F1B2B788F005D26AE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D03579AC1B2B78A1005D26AE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480551A9572F5009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480651A9572F5009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D454807B1A957361009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480851A957362009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 57FCDE3D1BA280DC00130C48 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */, 57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 57FCDE4C1BA280E000130C48 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D035799A1B2B788F005D26AE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */, D035799B1B2B788F005D26AE /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D03579A81B2B78A1005D26AE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480521A9572F5009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E93621461B35596200948F2A /* ResultType.swift in Sources */, D45480971A957465009D7229 /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480631A9572F5009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D454806F1A9572F5009D7229 /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480781A957361009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E93621471B35596200948F2A /* ResultType.swift in Sources */, D45480981A957465009D7229 /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480831A957362009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D45480991A9574B8009D7229 /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 57FCDE581BA2814A00130C48 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 57FCDE3C1BA280DC00130C48 /* Result-tvOS */; targetProxy = 57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */; }; D03579B31B2B78BB005D26AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D03579991B2B788F005D26AE /* Result-watchOS */; targetProxy = D03579B21B2B78BB005D26AE /* PBXContainerItemProxy */; }; D454806A1A9572F5009D7229 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D45480561A9572F5009D7229 /* Result-Mac */; targetProxy = D45480691A9572F5009D7229 /* PBXContainerItemProxy */; }; D454808A1A957362009D7229 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D454807C1A957361009D7229 /* Result-iOS */; targetProxy = D45480891A957362009D7229 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 57FCDE451BA280DC00130C48 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; }; 57FCDE461BA280DC00130C48 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; VALIDATE_PRODUCT = YES; }; name = Release; }; 57FCDE521BA280E000130C48 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; }; name = Debug; }; 57FCDE531BA280E000130C48 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; VALIDATE_PRODUCT = YES; }; name = Release; }; D03579A11B2B788F005D26AE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = watchos; SKIP_INSTALL = YES; }; name = Debug; }; D03579A21B2B788F005D26AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = watchos; SKIP_INSTALL = YES; }; name = Release; }; D03579AE1B2B78A1005D26AE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; }; name = Debug; }; D03579AF1B2B78A1005D26AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; }; name = Release; }; D45480701A9572F5009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.antitypical.$(PRODUCT_NAME:rfc1034identifier)"; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; D45480711A9572F5009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.antitypical.$(PRODUCT_NAME:rfc1034identifier)"; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; D45480731A9572F5009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; D45480741A9572F5009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; D45480761A9572F5009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; D45480771A9572F5009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; D45480901A957362009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; D45480911A957362009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; D45480921A957362009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; }; name = Debug; }; D45480931A957362009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget "Result-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 57FCDE451BA280DC00130C48 /* Debug */, 57FCDE461BA280DC00130C48 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget "Result-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 57FCDE521BA280E000130C48 /* Debug */, 57FCDE531BA280E000130C48 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D03579A11B2B788F005D26AE /* Debug */, D03579A21B2B788F005D26AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D03579AE1B2B78A1005D26AE /* Debug */, D03579AF1B2B78A1005D26AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480511A9572F5009D7229 /* Build configuration list for PBXProject "Result" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480701A9572F5009D7229 /* Debug */, D45480711A9572F5009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480731A9572F5009D7229 /* Debug */, D45480741A9572F5009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-MacTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480761A9572F5009D7229 /* Debug */, D45480771A9572F5009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480941A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480901A957362009D7229 /* Debug */, D45480911A957362009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480951A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480921A957362009D7229 /* Debug */, D45480931A957362009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = D454804E1A9572F5009D7229 /* Project object */; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-watchOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Tests/LinuxMain.swift ================================================ import XCTest @testable import ResultTestSuite XCTMain([ testCase(ResultTests.allTests), ]) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Tests/Result/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 2.1.3 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Tests/Result/ResultTests.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. final class ResultTests: XCTestCase { func testMapTransformsSuccesses() { XCTAssertEqual(success.map { $0.characters.count } ?? 0, 7) } func testMapRewrapsFailures() { XCTAssertEqual(failure.map { $0.characters.count } ?? 0, 0) } func testInitOptionalSuccess() { XCTAssert(Result("success" as String?, failWith: error) == success) } func testInitOptionalFailure() { XCTAssert(Result(nil, failWith: error) == failure) } // MARK: Errors func testErrorsIncludeTheSourceFile() { let file = #file XCTAssert(Result<(), NSError>.error().file == file) } func testErrorsIncludeTheSourceLine() { let (line, error) = (#line, Result<(), NSError>.error()) XCTAssertEqual(error.line ?? -1, line) } func testErrorsIncludeTheCallingFunction() { let function = #function XCTAssert(Result<(), NSError>.error().function == function) } // MARK: Try - Catch func testTryCatchProducesSuccesses() { let result: Result = Result(try tryIsSuccess("success")) XCTAssert(result == success) } func testTryCatchProducesFailures() { #if os(Linux) /// FIXME: skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a. print("Test Case `\(#function)` skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a.") #else let result: Result = Result(try tryIsSuccess(nil)) XCTAssert(result.error == error) #endif } func testTryCatchWithFunctionProducesSuccesses() { let function = { try tryIsSuccess("success") } let result: Result = Result(attempt: function) XCTAssert(result == success) } func testTryCatchWithFunctionCatchProducesFailures() { #if os(Linux) /// FIXME: skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a. print("Test Case `\(#function)` skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a.") #else let function = { try tryIsSuccess(nil) } let result: Result = Result(attempt: function) XCTAssert(result.error == error) #endif } func testMaterializeProducesSuccesses() { let result1 = materialize(try tryIsSuccess("success")) XCTAssert(result1 == success) let result2: Result = materialize { try tryIsSuccess("success") } XCTAssert(result2 == success) } func testMaterializeProducesFailures() { #if os(Linux) /// FIXME: skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a. print("Test Case `\(#function)` skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a.") #else let result1 = materialize(try tryIsSuccess(nil)) XCTAssert(result1.error == error) let result2: Result = materialize { try tryIsSuccess(nil) } XCTAssert(result2.error == error) #endif } // MARK: Recover func testRecoverProducesLeftForLeftSuccess() { let left = Result.Success("left") XCTAssertEqual(left.recover("right"), "left") } func testRecoverProducesRightForLeftFailure() { struct Error: ResultErrorType {} let left = Result.Failure(Error()) XCTAssertEqual(left.recover("right"), "right") } // MARK: Recover With func testRecoverWithProducesLeftForLeftSuccess() { let left = Result.Success("left") let right = Result.Success("right") XCTAssertEqual(left.recoverWith(right).value, "left") } func testRecoverWithProducesRightSuccessForLeftFailureAndRightSuccess() { struct Error: ResultErrorType {} let left = Result.Failure(Error()) let right = Result.Success("right") XCTAssertEqual(left.recoverWith(right).value, "right") } func testRecoverWithProducesRightFailureForLeftFailureAndRightFailure() { enum Error: ResultErrorType { case Left, Right } let left = Result.Failure(.Left) let right = Result.Failure(.Right) XCTAssertEqual(left.recoverWith(right).error, .Right) } // MARK: Cocoa API idioms #if !os(Linux) func testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference() { let result = `try` { attempt(true, succeed: false, error: $0) } XCTAssertFalse(result ?? false) XCTAssertNotNil(result.error) } func testTryProducesFailuresForOptionalWithErrorReturnedByReference() { let result = `try` { attempt(1, succeed: false, error: $0) } XCTAssertEqual(result ?? 0, 0) XCTAssertNotNil(result.error) } func testTryProducesSuccessesForBooleanAPI() { let result = `try` { attempt(true, succeed: true, error: $0) } XCTAssertTrue(result ?? false) XCTAssertNil(result.error) } func testTryProducesSuccessesForOptionalAPI() { let result = `try` { attempt(1, succeed: true, error: $0) } XCTAssertEqual(result ?? 0, 1) XCTAssertNil(result.error) } func testTryMapProducesSuccess() { let result = success.tryMap(tryIsSuccess) XCTAssert(result == success) } func testTryMapProducesFailure() { let result = Result.Success("fail").tryMap(tryIsSuccess) XCTAssert(result == failure) } #endif // MARK: Operators func testConjunctionOperator() { let resultSuccess = success &&& success if let (x, y) = resultSuccess.value { XCTAssertTrue(x == "success" && y == "success") } else { XCTFail() } let resultFailureBoth = failure &&& failure2 XCTAssert(resultFailureBoth.error == error) let resultFailureLeft = failure &&& success XCTAssert(resultFailureLeft.error == error) let resultFailureRight = success &&& failure2 XCTAssert(resultFailureRight.error == error2) } } // MARK: - Fixtures let success = Result.Success("success") let error = NSError(domain: "com.antitypical.Result", code: 1, userInfo: nil) let error2 = NSError(domain: "com.antitypical.Result", code: 2, userInfo: nil) let failure = Result.Failure(error) let failure2 = Result.Failure(error2) // MARK: - Helpers #if !os(Linux) #if swift(>=3.0) func attempt(_ value: T, succeed: Bool, error: NSErrorPointer) -> T? { if succeed { return value } else { error?.pointee = Result<(), NSError>.error() return nil } } #else func attempt(value: T, succeed: Bool, error: NSErrorPointer) -> T? { if succeed { return value } else { error.memory = Result<(), NSError>.error() return nil } } #endif #endif #if swift(>=3) func tryIsSuccess(_ text: String?) throws -> String { guard let text = text where text == "success" else { throw error } return text } #else func tryIsSuccess(text: String?) throws -> String { guard let text = text where text == "success" else { throw error } return text } #endif extension NSError { var function: String? { return userInfo[Result<(), NSError>.functionKey] as? String } var file: String? { return userInfo[Result<(), NSError>.fileKey] as? String } var line: Int? { return userInfo[Result<(), NSError>.lineKey] as? Int } } #if os(Linux) extension ResultTests { static var allTests: [(String, (ResultTests) -> () throws -> Void)] { return [ ("testMapTransformsSuccesses", testMapTransformsSuccesses), ("testMapRewrapsFailures", testMapRewrapsFailures), ("testInitOptionalSuccess", testInitOptionalSuccess), ("testInitOptionalFailure", testInitOptionalFailure), ("testErrorsIncludeTheSourceFile", testErrorsIncludeTheSourceFile), ("testErrorsIncludeTheSourceLine", testErrorsIncludeTheSourceLine), ("testErrorsIncludeTheCallingFunction", testErrorsIncludeTheCallingFunction), ("testTryCatchProducesSuccesses", testTryCatchProducesSuccesses), ("testTryCatchProducesFailures", testTryCatchProducesFailures), ("testTryCatchWithFunctionProducesSuccesses", testTryCatchWithFunctionProducesSuccesses), ("testTryCatchWithFunctionCatchProducesFailures", testTryCatchWithFunctionCatchProducesFailures), ("testMaterializeProducesSuccesses", testMaterializeProducesSuccesses), ("testMaterializeProducesFailures", testMaterializeProducesFailures), ("testRecoverProducesLeftForLeftSuccess", testRecoverProducesLeftForLeftSuccess), ("testRecoverProducesRightForLeftFailure", testRecoverProducesRightForLeftFailure), ("testRecoverWithProducesLeftForLeftSuccess", testRecoverWithProducesLeftForLeftSuccess), ("testRecoverWithProducesRightSuccessForLeftFailureAndRightSuccess", testRecoverWithProducesRightSuccessForLeftFailureAndRightSuccess), ("testRecoverWithProducesRightFailureForLeftFailureAndRightFailure", testRecoverWithProducesRightFailureForLeftFailureAndRightFailure), // ("testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference", testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference), // ("testTryProducesFailuresForOptionalWithErrorReturnedByReference", testTryProducesFailuresForOptionalWithErrorReturnedByReference), // ("testTryProducesSuccessesForBooleanAPI", testTryProducesSuccessesForBooleanAPI), // ("testTryProducesSuccessesForOptionalAPI", testTryProducesSuccessesForOptionalAPI), // ("testTryMapProducesSuccess", testTryMapProducesSuccess), // ("testTryMapProducesFailure", testTryMapProducesFailure), ("testConjunctionOperator", testConjunctionOperator), ] } } #endif import Foundation import Result import XCTest ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/.gitignore ================================================ Carthage/Build ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Common.xcconfig ================================================ // // This file defines common settings that should be enabled for every new // project. Typically, you want to use Debug, Release, or a similar variant // instead. // // Disable legacy-compatible header searching ALWAYS_SEARCH_USER_PATHS = NO // Architectures to build ARCHS = $(ARCHS_STANDARD) // Whether to warn when a floating-point value is used as a loop counter CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES // Whether to warn about use of rand() and random() being used instead of arc4random() CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES // Whether to warn about strcpy() and strcat() CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES // Whether to enable module imports CLANG_ENABLE_MODULES = YES // Enable ARC CLANG_ENABLE_OBJC_ARC = YES // Warn about implicit conversions to boolean values that are suspicious. // For example, writing 'if (foo)' with 'foo' being the name a function will trigger a warning. CLANG_WARN_BOOL_CONVERSION = YES // Warn about implicit conversions of constant values that cause the constant value to change, // either through a loss of precision, or entirely in its meaning. CLANG_WARN_CONSTANT_CONVERSION = YES // Whether to warn when overriding deprecated methods CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES // Warn about direct accesses to the Objective-C 'isa' pointer instead of using a runtime API. CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR // Warn about declaring the same method more than once within the same @interface. CLANG_WARN__DUPLICATE_METHOD_MATCH = YES // Warn about loop bodies that are suspiciously empty. CLANG_WARN_EMPTY_BODY = YES // Warn about implicit conversions between different kinds of enum values. // For example, this can catch issues when using the wrong enum flag as an argument to a function or method. CLANG_WARN_ENUM_CONVERSION = YES // Whether to warn on implicit conversions between signed/unsigned types CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO // Warn about implicit conversions between pointers and integers. // For example, this can catch issues when one incorrectly intermixes using NSNumbers and raw integers. CLANG_WARN_INT_CONVERSION = YES // Don't warn about repeatedly using a weak reference without assigning the weak reference to a strong reference. Too many false positives. CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = NO // Warn about classes that unintentionally do not subclass a root class (such as NSObject). CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR // Whether to warn on suspicious implicit conversions CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES // Warn about potentially unreachable code CLANG_WARN_UNREACHABLE_CODE = YES // The format of debugging symbols DEBUG_INFORMATION_FORMAT = dwarf-with-dsym // Whether to compile assertions in ENABLE_NS_ASSERTIONS = YES // Whether to require objc_msgSend to be cast before invocation ENABLE_STRICT_OBJC_MSGSEND = YES // Which C variant to use GCC_C_LANGUAGE_STANDARD = gnu99 // Whether to enable exceptions for Objective-C GCC_ENABLE_OBJC_EXCEPTIONS = YES // Whether to generate debugging symbols GCC_GENERATE_DEBUGGING_SYMBOLS = YES // Whether to precompile the prefix header (if one is specified) GCC_PRECOMPILE_PREFIX_HEADER = YES // Whether to enable strict aliasing, meaning that two pointers of different // types (other than void * or any id type) cannot point to the same memory // location GCC_STRICT_ALIASING = YES // Whether symbols not explicitly exported are hidden by default (this primarily // only affects C++ code) GCC_SYMBOLS_PRIVATE_EXTERN = NO // Whether static variables are thread-safe by default GCC_THREADSAFE_STATICS = NO // Which compiler to use GCC_VERSION = com.apple.compilers.llvm.clang.1_0 // Whether warnings are treated as errors GCC_TREAT_WARNINGS_AS_ERRORS = YES // Whether to warn about 64-bit values being implicitly shortened to 32 bits GCC_WARN_64_TO_32_BIT_CONVERSION = YES // Whether to warn about fields missing from structure initializers (only if // designated initializers aren't used) GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES // Whether to warn about missing function prototypes GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO // Whether to warn about implicit conversions in the signedness of the type // a pointer is pointing to (e.g., 'int *' getting converted to 'unsigned int *') GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES // Whether to warn when the value returned from a function/method/block does not // match its return type GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR // Whether to warn on a class not implementing all the required methods of // a protocol it declares conformance to GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES // Whether to warn when switching on an enum value, and all possibilities are // not accounted for GCC_WARN_CHECK_SWITCH_STATEMENTS = YES // Whether to warn about the use of four-character constants GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES // Whether to warn about an aggregate data type's initializer not being fully // bracketed (e.g., array initializer syntax) GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES // Whether to warn about missing braces or parentheses that make the meaning of // the code ambiguous GCC_WARN_MISSING_PARENTHESES = YES // Whether to warn about unsafe comparisons between values of different // signedness GCC_WARN_SIGN_COMPARE = YES // Whether to warn about the arguments to printf-style functions not matching // the format specifiers GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES // Warn if a "@selector(...)" expression referring to an undeclared selector is found GCC_WARN_UNDECLARED_SELECTOR = YES // Warn if a variable might be clobbered by a setjmp call or if an automatic variable is used without prior initialization. GCC_WARN_UNINITIALIZED_AUTOS = YES // Whether to warn about static functions that are unused GCC_WARN_UNUSED_FUNCTION = YES // Whether to warn about labels that are unused GCC_WARN_UNUSED_LABEL = YES // Whether to warn about variables that are never used GCC_WARN_UNUSED_VARIABLE = YES // Whether to run the static analyzer with every build RUN_CLANG_STATIC_ANALYZER = YES // Don't treat unknown warnings as errors, and disable GCC compatibility warnings and unused static const variable warnings WARNING_CFLAGS = -Wno-error=unknown-warning-option -Wno-gcc-compat -Wno-unused-const-variable -Wno-nullability-completeness // This setting is on for new projects as of Xcode ~6.3, though it is still not // the default. It warns if the same variable is declared in two binaries that // are linked together. GCC_NO_COMMON_BLOCKS = YES ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Debug.xcconfig ================================================ // // This file defines the base configuration for a Debug build of any project. // This should be set at the project level for the Debug configuration. // #include "../Common.xcconfig" // Whether to strip debugging symbols when copying resources (like included // binaries) COPY_PHASE_STRIP = NO // The optimization level (0, 1, 2, 3, s) for the produced binary GCC_OPTIMIZATION_LEVEL = 0 // Preproccessor definitions to apply to each file compiled GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 // Whether to enable link-time optimizations (such as inlining across translation // units) LLVM_LTO = NO // Whether to only build the active architecture ONLY_ACTIVE_ARCH = YES // Other compiler flags // // These settings catch some errors in integer arithmetic OTHER_CFLAGS = -ftrapv // Other flags to pass to the Swift compiler // // This enables conditional compilation with #if DEBUG OTHER_SWIFT_FLAGS = -D DEBUG // Whether to strip debugging symbols when copying the built product to its // final installation location STRIP_INSTALLED_PRODUCT = NO // The optimization level (-Onone, -O, -Ofast) for the produced Swift binary SWIFT_OPTIMIZATION_LEVEL = -Onone // Disable Developer ID timestamping OTHER_CODE_SIGN_FLAGS = --timestamp=none ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Profile.xcconfig ================================================ // // This file defines the base configuration for an optional profiling-specific // build of any project. To use these settings, create a Profile configuration // in your project, and use this file at the project level for the new // configuration. // // based on the Release configuration, with some stuff related to debugging // symbols re-enabled #include "Release.xcconfig" // Whether to strip debugging symbols when copying resources (like included // binaries) COPY_PHASE_STRIP = NO // Whether to only build the active architecture ONLY_ACTIVE_ARCH = YES // Whether to strip debugging symbols when copying the built product to its // final installation location STRIP_INSTALLED_PRODUCT = NO // Whether to perform App Store validation checks VALIDATE_PRODUCT = NO // Disable Developer ID timestamping OTHER_CODE_SIGN_FLAGS = --timestamp=none ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Release.xcconfig ================================================ // // This file defines the base configuration for a Release build of any project. // This should be set at the project level for the Release configuration. // #include "../Common.xcconfig" // Whether to strip debugging symbols when copying resources (like included // binaries) COPY_PHASE_STRIP = YES // The optimization level (0, 1, 2, 3, s) for the produced binary GCC_OPTIMIZATION_LEVEL = s // Preproccessor definitions to apply to each file compiled GCC_PREPROCESSOR_DEFINITIONS = NDEBUG=1 // Whether to enable link-time optimizations (such as inlining across translation // units) LLVM_LTO = NO // Whether to only build the active architecture ONLY_ACTIVE_ARCH = NO // Whether to strip debugging symbols when copying the built product to its // final installation location STRIP_INSTALLED_PRODUCT = YES // The optimization level (-Onone, -O, -Owholemodule) for the produced Swift binary SWIFT_OPTIMIZATION_LEVEL = -Owholemodule // Whether to perform App Store validation checks VALIDATE_PRODUCT = YES ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Test.xcconfig ================================================ // // This file defines the base configuration for a Test build of any project. // This should be set at the project level for the Test configuration. // #include "Debug.xcconfig" // Sandboxed apps can't be unit tested since they can't load some random // external bundle. So we disable sandboxing for testing. CODE_SIGN_ENTITLEMENTS = ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Targets/Application.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for an application. Typically, you want to use a platform-specific variant // instead. // // Whether to strip out code that isn't called from anywhere DEAD_CODE_STRIPPING = NO // Sets the @rpath for the application such that it can include frameworks in // the application bundle (inside the "Frameworks" folder) LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks @loader_path/../Frameworks @executable_path/Frameworks ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Targets/Framework.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a framework. Typically, you want to use a platform-specific variant // instead. // // Disable code signing for successful device builds with Xcode 8. Frameworks do // need to be signed, but they don't need to be signed at compile time because // they'll be re-signed when you include them in your app. CODE_SIGNING_REQUIRED = NO CODE_SIGN_IDENTITY = // Whether to strip out code that isn't called from anywhere DEAD_CODE_STRIPPING = NO // Whether this framework should define an LLVM module DEFINES_MODULE = YES // Whether function calls should be position-dependent (should always be // disabled for library code) GCC_DYNAMIC_NO_PIC = NO // Default frameworks to the name of the project, instead of any // platform-specific target PRODUCT_NAME = $(PROJECT_NAME) // Enables the framework to be included from any location as long as the // loader’s runpath search paths includes it. For example from an application // bundle (inside the "Frameworks" folder) or shared folder INSTALL_PATH = @rpath LD_DYLIB_INSTALL_NAME = @rpath/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/$(PRODUCT_NAME) SKIP_INSTALL = YES // Disallows use of APIs that are not available // to app extensions and linking to frameworks // that have not been built with this setting enabled. APPLICATION_EXTENSION_API_ONLY = YES ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Targets/StaticLibrary.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a static library. Typically, you want to use a platform-specific variant // instead. // // Whether to strip out code that isn't called from anywhere DEAD_CODE_STRIPPING = NO // Whether to strip debugging symbols when copying resources (like included // binaries). // // Overrides Release.xcconfig when used at the target level. COPY_PHASE_STRIP = NO // Whether function calls should be position-dependent (should always be // disabled for library code) GCC_DYNAMIC_NO_PIC = NO // Copy headers to "include/LibraryName" in the build folder by default. This // lets consumers use #import syntax even for static // libraries PUBLIC_HEADERS_FOLDER_PATH = include/$PRODUCT_NAME // Don't include in an xcarchive SKIP_INSTALL = YES // Disallows use of APIs that are not available // to app extensions and linking to frameworks // that have not been built with this setting enabled. APPLICATION_EXTENSION_API_ONLY = YES ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-Application.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for an application on Mac OS X. This should be set at the target level for // each project configuration. // // Import base application settings #include "../Base/Targets/Application.xcconfig" // Apply common settings specific to Mac OS X #include "Mac-Base.xcconfig" // Whether function calls should be position-dependent (should always be // disabled for library code) GCC_DYNAMIC_NO_PIC = YES ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-Base.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for Mac OS X. This file is not standalone -- it is meant to be included into // a configuration file for a specific type of target. // // Whether to combine multiple image resolutions into a multirepresentational // TIFF COMBINE_HIDPI_IMAGES = YES // Where to find embedded frameworks LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks // The base SDK to use (if no version is specified, the latest version is // assumed) SDKROOT = macosx // Supported build architectures VALID_ARCHS = x86_64 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-DynamicLibrary.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a dynamic library on Mac OS X. This should be set at the target level // for each project configuration. // // Import common settings specific to Mac OS X #include "Mac-Base.xcconfig" // Whether to strip out code that isn't called from anywhere DEAD_CODE_STRIPPING = NO // Whether function calls should be position-dependent (should always be // disabled for library code) GCC_DYNAMIC_NO_PIC = NO // Don't include in an xcarchive SKIP_INSTALL = YES ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-Framework.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a framework on OS X. This should be set at the target level for each // project configuration. // // Import base framework settings #include "../Base/Targets/Framework.xcconfig" // Import common settings specific to Mac OS X #include "Mac-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-StaticLibrary.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a static library on Mac OS X. This should be set at the target level for // each project configuration. // // Import base static library settings #include "../Base/Targets/StaticLibrary.xcconfig" // Apply common settings specific to Mac OS X #include "Mac-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/README.md ================================================ This project intends to aggregate common or universal Xcode configuration settings, keeping them in hierarchial Xcode configuration files for easy modification and reuse. ## License This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. 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 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. For more information, please refer to [unlicense.org](http://unlicense.org). ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-Application.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for an application on iOS. This should be set at the target level for each // project configuration. // // Import base application settings #include "../Base/Targets/Application.xcconfig" // Apply common settings specific to iOS #include "iOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-Base.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for iOS. This file is not standalone -- it is meant to be included into // a configuration file for a specific type of target. // // Xcode needs this to find archived headers if SKIP_INSTALL is set HEADER_SEARCH_PATHS = $(OBJROOT)/UninstalledProducts/include // Where to find embedded frameworks LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks // The base SDK to use (if no version is specified, the latest version is // assumed) SDKROOT = iphoneos // Supported device families (1 is iPhone, 2 is iPad) TARGETED_DEVICE_FAMILY = 1,2 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-Framework.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a framework on iOS. This should be set at the target level for each // project configuration. // // Import base framework settings #include "../Base/Targets/Framework.xcconfig" // Import common settings specific to iOS #include "iOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-StaticLibrary.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a static library on iOS. This should be set at the target level for each // project configuration. // // Import base static library settings #include "../Base/Targets/StaticLibrary.xcconfig" // Apply common settings specific to iOS #include "iOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-Application.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for an application on tvOS. This should be set at the target level for // each project configuration. // // Import base application settings #include "../Base/Targets/Application.xcconfig" // Apply common settings specific to tvOS #include "tvOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-Base.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for tvOS. This file is not standalone -- it is meant to be included into // a configuration file for a specific type of target. // // Where to find embedded frameworks LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks // The base SDK to use (if no version is specified, the latest version is // assumed) SDKROOT = appletvos // Supported device families TARGETED_DEVICE_FAMILY = 3 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-Framework.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a framework on tvOS. This should be set at the target level for each // project configuration. // // Import base framework settings #include "../Base/Targets/Framework.xcconfig" // Import common settings specific to iOS #include "tvOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-StaticLibrary.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a static library on tvOS. This should be set at the target level for // each project configuration. // // Import base static library settings #include "../Base/Targets/StaticLibrary.xcconfig" // Apply common settings specific to tvOS #include "tvOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-Application.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for an application on watchOS. This should be set at the target level for // each project configuration. // // Import base application settings #include "../Base/Targets/Application.xcconfig" // Apply common settings specific to watchOS #include "watchOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-Base.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for watchOS. This file is not standalone -- it is meant to be included into // a configuration file for a specific type of target. // // Where to find embedded frameworks LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks // The base SDK to use (if no version is specified, the latest version is // assumed) SDKROOT = watchos // Supported device families TARGETED_DEVICE_FAMILY = 4 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-Framework.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a framework on watchOS. This should be set at the target level for each // project configuration. // // Import base framework settings #include "../Base/Targets/Framework.xcconfig" // Import common settings specific to iOS #include "watchOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-StaticLibrary.xcconfig ================================================ // // This file defines additional configuration options that are appropriate only // for a static library on watchOS. This should be set at the target level for // each project configuration. // // Import base static library settings #include "../Base/Targets/StaticLibrary.xcconfig" // Apply common settings specific to watchOS #include "watchOS-Base.xcconfig" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/BasicOperators.md ================================================ # Basic Operators This document explains some of the most common operators used in ReactiveCocoa, and includes examples demonstrating their use. Note that “operators”, in this context, refers to functions that transform [signals][] and [signal producers][], _not_ custom Swift operators. In other words, these are composable primitives provided by ReactiveCocoa for working with event streams. This document will use the term “event stream” when dealing with concepts that apply to both `Signal` and `SignalProducer`. When the distinction matters, the types will be referred to by name. **[Performing side effects with event streams](#performing-side-effects-with-event-streams)** 1. [Observation](#observation) 1. [Injecting effects](#injecting-effects) **[Operator composition](#operator-composition)** 1. [Lifting](#lifting) **[Transforming event streams](#transforming-event-streams)** 1. [Mapping](#mapping) 1. [Filtering](#filtering) 1. [Aggregating](#aggregating) **[Combining event streams](#combining-event-streams)** 1. [Combining latest values](#combining-latest-values) 1. [Zipping](#zipping) **[Flattening producers](#flattening-producers)** 1. [Merging](#merging) 1. [Concatenating](#concatenating) 1. [Switching to the latest](#switching-to-the-latest) **[Handling failures](#handling-failures)** 1. [Catching failures](#catching-failures) 1. [Retrying](#retrying) 1. [Mapping errors](#mapping-errors) 1. [Promote](#promote) ## Performing side effects with event streams ### Observation `Signal`s can be observed with the `observe` function. It takes an `Observer` as argument to which any future events are sent. ```Swift signal.observe(Signal.Observer { event in switch event { case let .Next(next): print("Next: \(next)") case let .Failed(error): print("Failed: \(error)") case .Completed: print("Completed") case .Interrupted: print("Interrupted") } }) ``` Alternatively, callbacks for the `Next`, `Failed`, `Completed` and `Interrupted` events can be provided which will be called when a corresponding event occurs. ```Swift signal.observeNext { next in print("Next: \(next)") } signal.observeFailed { error in print("Failed: \(error)") } signal.observeCompleted { print("Completed") } signal.observeInterrupted { print("Interrupted") } ``` Note that it is not necessary to observe all four types of event - all of them are optional, you only need to provide callbacks for the events you care about. ### Injecting effects Side effects can be injected on a `SignalProducer` with the `on` operator without actually subscribing to it. ```Swift let producer = signalProducer .on(started: { print("Started") }, event: { event in print("Event: \(event)") }, failed: { error in print("Failed: \(error)") }, completed: { print("Completed") }, interrupted: { print("Interrupted") }, terminated: { print("Terminated") }, disposed: { print("Disposed") }, next: { value in print("Next: \(value)") }) ``` Similar to `observe`, all the parameters are optional and you only need to provide callbacks for the events you care about. Note that nothing will be printed until `producer` is started (possibly somewhere else). ## Operator composition ### Lifting `Signal` operators can be _lifted_ to operate upon `SignalProducer`s using the `lift` method. This will create a new `SignalProducer` which will apply the given operator to _every_ `Signal` created, just as if the operator had been applied to each produced `Signal` individually. ## Transforming event streams These operators transform an event stream into a new stream. ### Mapping The `map` operator is used to transform the values in an event stream, creating a new stream with the results. ```Swift let (signal, observer) = Signal.pipe() signal .map { string in string.uppercaseString } .observeNext { next in print(next) } observer.sendNext("a") // Prints A observer.sendNext("b") // Prints B observer.sendNext("c") // Prints C ``` [Interactive visualisation of the `map` operator.](http://neilpa.me/rac-marbles/#map) ### Filtering The `filter` operator is used to only include values in an event stream that satisfy a predicate. ```Swift let (signal, observer) = Signal.pipe() signal .filter { number in number % 2 == 0 } .observeNext { next in print(next) } observer.sendNext(1) // Not printed observer.sendNext(2) // Prints 2 observer.sendNext(3) // Not printed observer.sendNext(4) // prints 4 ``` [Interactive visualisation of the `filter` operator.](http://neilpa.me/rac-marbles/#filter) ### Aggregating The `reduce` operator is used to aggregate a event stream’s values into a single combined value. Note that the final value is only sent after the input stream completes. ```Swift let (signal, observer) = Signal.pipe() signal .reduce(1) { $0 * $1 } .observeNext { next in print(next) } observer.sendNext(1) // nothing printed observer.sendNext(2) // nothing printed observer.sendNext(3) // nothing printed observer.sendCompleted() // prints 6 ``` The `collect` operator is used to aggregate a event stream’s values into a single array value. Note that the final value is only sent after the input stream completes. ```Swift let (signal, observer) = Signal.pipe() signal .collect() .observeNext { next in print(next) } observer.sendNext(1) // nothing printed observer.sendNext(2) // nothing printed observer.sendNext(3) // nothing printed observer.sendCompleted() // prints [1, 2, 3] ``` [Interactive visualisation of the `reduce` operator.](http://neilpa.me/rac-marbles/#reduce) ## Combining event streams These operators combine values from multiple event streams into a new, unified stream. ### Combining latest values The `combineLatest` function combines the latest values of two (or more) event streams. The resulting stream will only send its first value after each input has sent at least one value. After that, new values on any of the inputs will result in a new value on the output. ```Swift let (numbersSignal, numbersObserver) = Signal.pipe() let (lettersSignal, lettersObserver) = Signal.pipe() let signal = combineLatest(numbersSignal, lettersSignal) signal.observeNext { next in print("Next: \(next)") } signal.observeCompleted { print("Completed") } numbersObserver.sendNext(0) // nothing printed numbersObserver.sendNext(1) // nothing printed lettersObserver.sendNext("A") // prints (1, A) numbersObserver.sendNext(2) // prints (2, A) numbersObserver.sendCompleted() // nothing printed lettersObserver.sendNext("B") // prints (2, B) lettersObserver.sendNext("C") // prints (2, C) lettersObserver.sendCompleted() // prints "Completed" ``` The `combineLatestWith` operator works in the same way, but as an operator. [Interactive visualisation of the `combineLatest` operator.](http://neilpa.me/rac-marbles/#combineLatest) ### Zipping The `zip` function joins values of two (or more) event streams pair-wise. The elements of any Nth tuple correspond to the Nth elements of the input streams. That means the Nth value of the output stream cannot be sent until each input has sent at least N values. ```Swift let (numbersSignal, numbersObserver) = Signal.pipe() let (lettersSignal, lettersObserver) = Signal.pipe() let signal = zip(numbersSignal, lettersSignal) signal.observeNext { next in print("Next: \(next)") } signal.observeCompleted { print("Completed") } numbersObserver.sendNext(0) // nothing printed numbersObserver.sendNext(1) // nothing printed lettersObserver.sendNext("A") // prints (0, A) numbersObserver.sendNext(2) // nothing printed numbersObserver.sendCompleted() // nothing printed lettersObserver.sendNext("B") // prints (1, B) lettersObserver.sendNext("C") // prints (2, C) & "Completed" ``` The `zipWith` operator works in the same way, but as an operator. [Interactive visualisation of the `zip` operator.](http://neilpa.me/rac-marbles/#zip) ## Flattening producers The `flatten` operator transforms a stream-of-streams into a single stream - where values are forwarded from the inner stream in accordance with the provided `FlattenStrategy`. The flattened result becomes that of the outer stream type - i.e. a `SignalProducer`-of-`SignalProducer`s or `SignalProducer`-of-`Signal`s gets flattened to a `SignalProducer`, and likewise a `Signal`-of-`SignalProducer`s or `Signal`-of-`Signal`s gets flattened to a `Signal`. To understand why there are different strategies and how they compare to each other, take a look at this example and imagine the column offsets as time: ```Swift let values = [ // imagine column offset as time [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8 ], ] let merge = [ 1, 4, 2, 7,5, 3,8,6 ] let concat = [ 1, 2, 3,4, 5, 6,7, 8] let latest = [ 1, 4, 7, 8 ] ``` Note, how the values interleave and which values are even included in the resulting array. ### Merging The `.Merge` strategy immediately forwards every value of the inner `SignalProducer`s to the outer `SignalProducer`. Any failure sent on the outer producer or any inner producer is immediately sent on the flattened producer and terminates it. ```Swift let (producerA, lettersObserver) = SignalProducer.buffer(5) let (producerB, numbersObserver) = SignalProducer.buffer(5) let (signal, observer) = SignalProducer, NoError>.buffer(5) signal.flatten(.Merge).startWithNext { next in print(next) } observer.sendNext(producerA) observer.sendNext(producerB) observer.sendCompleted() lettersObserver.sendNext("a") // prints "a" numbersObserver.sendNext("1") // prints "1" lettersObserver.sendNext("b") // prints "b" numbersObserver.sendNext("2") // prints "2" lettersObserver.sendNext("c") // prints "c" numbersObserver.sendNext("3") // prints "3" ``` [Interactive visualisation of the `flatten(.Merge)` operator.](http://neilpa.me/rac-marbles/#merge) ### Concatenating The `.Concat` strategy is used to serialize work of the inner `SignalProducer`s. The outer producer is started immediately. Each subsequent producer is not started until the preceeding one has completed. Failures are immediately forwarded to the flattened producer. ```Swift let (producerA, lettersObserver) = SignalProducer.buffer(5) let (producerB, numbersObserver) = SignalProducer.buffer(5) let (signal, observer) = SignalProducer, NoError>.buffer(5) signal.flatten(.Concat).startWithNext { next in print(next) } observer.sendNext(producerA) observer.sendNext(producerB) observer.sendCompleted() numbersObserver.sendNext("1") // nothing printed lettersObserver.sendNext("a") // prints "a" lettersObserver.sendNext("b") // prints "b" numbersObserver.sendNext("2") // nothing printed lettersObserver.sendNext("c") // prints "c" lettersObserver.sendCompleted() // prints "1", "2" numbersObserver.sendNext("3") // prints "3" numbersObserver.sendCompleted() ``` [Interactive visualisation of the `flatten(.Concat)` operator.](http://neilpa.me/rac-marbles/#concat) ### Switching to the latest The `.Latest` strategy forwards only values from the latest input `SignalProducer`. ```Swift let (producerA, observerA) = SignalProducer.buffer(5) let (producerB, observerB) = SignalProducer.buffer(5) let (producerC, observerC) = SignalProducer.buffer(5) let (signal, observer) = SignalProducer, NoError>.buffer(5) signal.flatten(.Latest).startWithNext { next in print(next) } observer.sendNext(producerA) // nothing printed observerC.sendNext("X") // nothing printed observerA.sendNext("a") // prints "a" observerB.sendNext("1") // nothing printed observer.sendNext(producerB) // prints "1" observerA.sendNext("b") // nothing printed observerB.sendNext("2") // prints "2" observerC.sendNext("Y") // nothing printed observerA.sendNext("c") // nothing printed observer.sendNext(producerC) // prints "X", "Y" observerB.sendNext("3") // nothing printed observerC.sendNext("Z") // prints "Z" ``` ## Handling failures These operators are used to handle failures that might occur on an event stream. ### Catching failures The `flatMapError` operator catches any failure that may occur on the input `SignalProducer`, then starts a new `SignalProducer` in its place. ```Swift let (producer, observer) = SignalProducer.buffer(5) let error = NSError(domain: "domain", code: 0, userInfo: nil) producer .flatMapError { _ in SignalProducer(value: "Default") } .startWithNext { next in print(next) } observer.sendNext("First") // prints "First" observer.sendNext("Second") // prints "Second" observer.sendFailed(error) // prints "Default" ``` ### Retrying The `retry` operator will restart the original `SignalProducer` on failure up to `count` times. ```Swift var tries = 0 let limit = 2 let error = NSError(domain: "domain", code: 0, userInfo: nil) let producer = SignalProducer { (observer, _) in if tries++ < limit { observer.sendFailed(error) } else { observer.sendNext("Success") observer.sendCompleted() } } producer .on(failed: {e in print("Failure")}) // prints "Failure" twice .retry(2) .start { event in switch event { case let .Next(next): print(next) // prints "Success" case let .Failed(error): print("Failed: \(error)") case .Completed: print("Completed") case .Interrupted: print("Interrupted") } } ``` If the `SignalProducer` does not succeed after `count` tries, the resulting `SignalProducer` will fail. E.g., if `retry(1)` is used in the example above instead of `retry(2)`, `"Signal Failure"` will be printed instead of `"Success"`. ### Mapping errors The `mapError` operator transforms the error of any failure in an event stream into a new error. ```Swift enum CustomError: String, ErrorType { case Foo = "Foo" case Bar = "Bar" case Other = "Other" var nsError: NSError { return NSError(domain: "CustomError.\(rawValue)", code: 0, userInfo: nil) } var description: String { return "\(rawValue) Error" } } let (signal, observer) = Signal.pipe() signal .mapError { (error: NSError) -> CustomError in switch error.domain { case "com.example.foo": return .Foo case "com.example.bar": return .Bar default: return .Other } } .observeFailed { error in print(error) } observer.sendFailed(NSError(domain: "com.example.foo", code: 42, userInfo: nil)) // prints "Foo Error" ``` ### Promote The `promoteErrors` operator promotes an event stream that does not generate failures into one that can. ```Swift let (numbersSignal, numbersObserver) = Signal.pipe() let (lettersSignal, lettersObserver) = Signal.pipe() numbersSignal .promoteErrors(NSError) .combineLatestWith(lettersSignal) ``` The given stream will still not _actually_ generate failures, but this is useful because some operators to [combine streams](#combining-event-streams) require the inputs to have matching error types. [Signals]: FrameworkOverview.md#signals [Signal Producers]: FrameworkOverview.md#signal-producers [Observation]: FrameworkOverview.md#observation ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/DebuggingTechniques.md ================================================ # Debugging Techniques This document lists debugging techniques and infrastructure helpful for debugging ReactiveCocoa applications. #### Unscrambling Swift compiler errors Type inferrence can be a source of hard-to-debug compiler errors. There are two potential places to be wrong when type inferrence used: 1. Definition of type inferred variable 2. Consumption of type inferred variable In both cases errors are related to incorrect assumptions about type. Such issues are common for ReactiveCocoa applications as it is all about operations over data and related types. The current state of the Swift compiler can cause misleading type errors, especially when error happens in the middle of a signal chain. Below is an example of type-error scenario: ```swift SignalProducer(value:42) .on(next: { answer in return _ }) .startWithCompleted { print("Completed.") } ``` The code above will not compile with the following error on a `print` call `error: ambiguous reference to member 'print' print("Completed.")`. To find the actual compile error, the chain needs to be broken apart. Add explicit definitions of closure types on each of the steps: ```swift let initialProducer = SignalProducer.init(value:42) let sideEffectProducer = initialProducer.on(next: { (answer: Int) in return _ }) let disposable = sideEffectProducer.startWithCompleted { print("Completed.") } ``` The code above will not compile too, but with the error `error: cannot convert value of type '(_) -> _' to expected argument type '(Int -> ())?'` on definition of `on` closure. This gives enough of information to locate unexpected `return _` since `on` closure should not have any return value. #### Binding `DynamicProperty` with `<~` operator Using the `<~` operator to bind a `Signal` or a `SignalProducer` to a `DynamicProperty` can result in unexpected compiler errors. Below is an example of this scenario: ```swift let label = UILabel() let property = MutableProperty("") DynamicProperty(object: label, keyPath: "text") <~ property.producer ``` This will often result in a compiler error: > error: binary operator '<~' cannot be applied to operands of type 'DynamicProperty' and 'SignalProducer' DynamicProperty(object: label, keyPath: "text") <~ property.producer The reason is a limitation in the swift type checker - A `DynamicProperty` always has a type of `AnyObject?`, but the `<~` operator requires the values of both sides to have the same type, so the right side value would have to be `AnyObject?` as well, but usually a more concrete type is used (in this example `String`). Usually, the fix is as easy as adding a `.map{ $0 }`. ```swift DynamicProperty(object: label, keyPath: "text") <~ property.producer.map { $0 } ``` This allows the type checker to infer that `String` can be converted to `AnyProperty?` and thus, the binding succeeds. #### Debugging event streams As mentioned in the README, stream debugging can be quite difficut and tedious, so we provide the `logEvents` operator. In its simplest form: ```swift let searchString = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) .logEvents() ``` This will print to the standard output the events. For most use cases, this is enough and will greatly help you understand your flow. The biggest problem with this approach, is that it will continue to ouput in Release mode. This leaves with you with two options: 1. Comment out the operator: `//.logEvents()`. This is the simpleste approach, but it's error prone, since you will eventually forget to do this. 2. Pass your own function and manipulate the output as you see fit. This is the recommended approach. Let's see how this would look like if we didn't want to print in Release mode: ```swift func debugLog(identifier: String, event: String, fileName: String, functionName: String, lineNumber: Int) { // Don't forget to set up the DEBUG symbol (http://stackoverflow.com/a/24112024/491239) #if DEBUG print(event) #endif } ``` You would then: ```swift let searchString = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) .logEvents(logger: debugLog) ``` We also provide the `identifier` parameter. This is useful when you are debugging multiple streams and you don't want to get lost: ```swift let searchString = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) .logEvents(identifier: "✨My awesome stream ✨") ``` There also cases, specially with [hot signals][[Signals]], when there is simply too much output. For those, you can specify which events you are interested in: ```swift let searchString = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) .logEvents(events:[.Disposed]) // This will happen when the `UITextField` is released ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/DesignGuidelines.md ================================================ # Design Guidelines This document contains guidelines for projects that want to make use of ReactiveCocoa. The content here is heavily inspired by the [Rx Design Guidelines](http://blogs.msdn.com/b/rxteam/archive/2010/10/28/rx-design-guidelines.aspx). This document assumes basic familiarity with the features of ReactiveCocoa. The [Framework Overview][] is a better resource for getting up to speed on the main types and concepts provided by RAC. **[The `Event` contract](#the-event-contract)** 1. [`Next`s provide values or indicate the occurrence of events](#nexts-provide-values-or-indicate-the-occurrence-of-events) 1. [Failures behave like exceptions and propagate immediately](#failures-behave-like-exceptions-and-propagate-immediately) 1. [Completion indicates success](#completion-indicates-success) 1. [Interruption cancels outstanding work and usually propagates immediately](#interruption-cancels-outstanding-work-and-usually-propagates-immediately) 1. [Events are serial](#events-are-serial) 1. [Events cannot be sent recursively](#events-cannot-be-sent-recursively) 1. [Events are sent synchronously by default](#events-are-sent-synchronously-by-default) **[The `Signal` contract](#the-signal-contract)** 1. [Signals start work when instantiated](#signals-start-work-when-instantiated) 1. [Observing a signal does not have side effects](#observing-a-signal-does-not-have-side-effects) 1. [All observers of a signal see the same events in the same order](#all-observers-of-a-signal-see-the-same-events-in-the-same-order) 1. [A signal is retained until the underlying observer is released](#a-signal-is-retained-until-the-underlying-observer-is-released) 1. [Terminating events dispose of signal resources](#terminating-events-dispose-of-signal-resources) **[The `SignalProducer` contract](#the-signalproducer-contract)** 1. [Signal producers start work on demand by creating signals](#signal-producers-start-work-on-demand-by-creating-signals) 1. [Each produced signal may send different events at different times](#each-produced-signal-may-send-different-events-at-different-times) 1. [Signal operators can be lifted to apply to signal producers](#signal-operators-can-be-lifted-to-apply-to-signal-producers) 1. [Disposing of a produced signal will interrupt it](#disposing-of-a-produced-signal-will-interrupt-it) **[Best practices](#best-practices)** 1. [Process only as many values as needed](#process-only-as-many-values-as-needed) 1. [Observe events on a known scheduler](#observe-events-on-a-known-scheduler) 1. [Switch schedulers in as few places as possible](#switch-schedulers-in-as-few-places-as-possible) 1. [Capture side effects within signal producers](#capture-side-effects-within-signal-producers) 1. [Share the side effects of a signal producer by sharing one produced signal](#share-the-side-effects-of-a-signal-producer-by-sharing-one-produced-signal) 1. [Prefer managing lifetime with operators over explicit disposal](#prefer-managing-lifetime-with-operators-over-explicit-disposal) **[Implementing new operators](#implementing-new-operators)** 1. [Prefer writing operators that apply to both signals and producers](#prefer-writing-operators-that-apply-to-both-signals-and-producers) 1. [Compose existing operators when possible](#compose-existing-operators-when-possible) 1. [Forward failure and interruption events as soon as possible](#forward-failure-and-interruption-events-as-soon-as-possible) 1. [Switch over `Event` values](#switch-over-event-values) 1. [Avoid introducing concurrency](#avoid-introducing-concurrency) 1. [Avoid blocking in operators](#avoid-blocking-in-operators) ## The `Event` contract [Events][] are fundamental to ReactiveCocoa. [Signals][] and [signal producers][] both send events, and may be collectively called “event streams.” Event streams must conform to the following grammar: ``` Next* (Interrupted | Failed | Completed)? ``` This states that an event stream consists of: 1. Any number of `Next` events 1. Optionally followed by one terminating event, which is any of `Interrupted`, `Failed`, or `Completed` After a terminating event, no other events will be received. #### `Next`s provide values or indicate the occurrence of events `Next` events contain a payload known as the “value.” Only `Next` events are said to have a value. Since an event stream can contain any number of `Next`s, there are few restrictions on what those values can mean or be used for, except that they must be of the same type. As an example, the value might represent an element from a collection, or a progress update about some long-running operation. The value of a `Next` event might even represent nothing at all—for example, it’s common to use a value type of `()` to indicate that something happened, without being more specific about what that something was. Most of the event stream [operators][] act upon `Next` events, as they represent the “meaningful data” of a signal or producer. #### Failures behave like exceptions and propagate immediately `Failed` events indicate that something went wrong, and contain a concrete error that indicates what happened. Failures are fatal, and propagate as quickly as possible to the consumer for handling. Failures also behave like exceptions, in that they “skip” operators, terminating them along the way. In other words, most [operators][] immediately stop doing work when a failure is received, and then propagate the failure onward. This even applies to time-shifted operators, like [`delay`][delay]—which, despite its name, will forward any failures immediately. Consequently, failures should only be used to represent “abnormal” termination. If it is important to let operators (or consumers) finish their work, a `Next` event describing the result might be more appropriate. If an event stream can _never_ fail, it should be parameterized with the special [`NoError`][NoError] type, which statically guarantees that a `Failed` event cannot be sent upon the stream. #### Completion indicates success An event stream sends `Completed` when the operation has completed successfully, or to indicate that the stream has terminated normally. Many operators manipulate the `Completed` event to shorten or extend the lifetime of an event stream. For example, [`take`][take] will complete after the specified number of values have been received, thereby terminating the stream early. On the other hand, most operators that accept multiple signals or producers will wait until _all_ of them have completed before forwarding a `Completed` event, since a successful outcome will usually depend on all the inputs. #### Interruption cancels outstanding work and usually propagates immediately An `Interrupted` event is sent when an event stream should cancel processing. Interruption is somewhere between [success](#completion-indicates-success) and [failure](#failures-behave-like-exceptions-and-propagate-immediately)—the operation was not successful, because it did not get to finish, but it didn’t necessarily “fail” either. Most [operators][] will propagate interruption immediately, but there are some exceptions. For example, the [flattening operators][flatten] will ignore `Interrupted` events that occur on the _inner_ producers, since the cancellation of an inner operation should not necessarily cancel the larger unit of work. RAC will automatically send an `Interrupted` event upon [disposal][Disposables], but it can also be sent manually if necessary. Additionally, [custom operators](#implementing-new-operators) must make sure to forward interruption events to the observer. #### Events are serial RAC guarantees that all events upon a stream will arrive serially. In other words, it’s impossible for the observer of a signal or producer to receive multiple `Event`s concurrently, even if the events are sent on multiple threads simultaneously. This simplifies [operator][Operators] implementations and [observers][]. #### Events cannot be sent recursively Just like RAC guarantees that [events will not be received concurrently](#events-are-serial), it also guarantees that they won’t be received recursively. As a consequence, [operators][] and [observers][] _do not_ need to be reentrant. If an event is sent upon a signal from a thread that is _already processing_ a previous event from that signal, deadlock will result. This is because recursive signals are usually programmer error, and the determinacy of a deadlock is preferable to nondeterministic race conditions. When a recursive signal is explicitly desired, the recursive event should be time-shifted, with an operator like [`delay`][delay], to ensure that it isn’t sent from an already-running event handler. #### Events are sent synchronously by default RAC does not implicitly introduce concurrency or asynchrony. [Operators][] that accept a [scheduler][Schedulers] may, but they must be explicitly invoked by the consumer of the framework. A “vanilla” signal or producer will send all of its events synchronously by default, meaning that the [observer][Observers] will be synchronously invoked for each event as it is sent, and that the underlying work will not resume until the event handler finishes. This is similar to how `NSNotificationCenter` or `UIControl` events are distributed. ## The `Signal` contract A [signal][Signals] is an “always on” stream that obeys [the `Event` contract](#the-event-contract). `Signal` is a reference type, because each signal has identity—in other words, each signal has its own lifetime, and may eventually terminate. Once terminated, a signal cannot be restarted. #### Signals start work when instantiated [`Signal.init`][Signal.init] immediately executes the generator closure that is passed to it. This means that side effects may occur even before the initializer returns. It is also possible to send [events][] before the initializer returns. However, since it is impossible for any [observers][] to be attached at this point, any events sent this way cannot be received. #### Observing a signal does not have side effects The work associated with a `Signal` does not start or stop when [observers][] are added or removed, so the [`observe`][observe] method (or the cancellation thereof) never has side effects. A signal’s side effects can only be stopped through [a terminating event](#signals-are-retained-until-a-terminating-event-occurs). #### All observers of a signal see the same events in the same order Because [observation does not have side effects](#observing-a-signal-does-not-have-side-effects), a `Signal` never customizes events for different [observers][]. When an event is sent upon a signal, it will be [synchronously](#events-are-sent-synchronously-by-default) distributed to all observers that are attached at that time, much like how `NSNotificationCenter` sends notifications. In other words, there are not different event “timelines” per observer. All observers effectively see the same stream of events. There is one exception to this rule: adding an observer to a signal _after_ it has already terminated will result in exactly one [`Interrupted`](#interruption-cancels-outstanding-work-and-usually-propagates-immediately) event sent to that specific observer. #### A signal is retained until the underlying observer is released Even if the caller does not maintain a reference to the `Signal`: - A signal created with [`Signal.init`][Signal.init] is kept alive until the generator closure releases the [observer][Observers] argument. - A signal created with [`Signal.pipe`][Signal.pipe] is kept alive until the returned observer is released. This ensures that signals associated with long-running work do not deallocate prematurely. Note that it is possible to release a signal before a terminating [event][Events] has been sent upon it. This should usually be avoided, as it can result in resource leaks, but is sometimes useful to disable termination. #### Terminating events dispose of signal resources When a terminating [event][Events] is sent along a `Signal`, all [observers][] will be released, and any resources being used to generate events should be disposed of. The easiest way to ensure proper resource cleanup is to return a [disposable][Disposables] from the generator closure, which will be disposed of when termination occurs. The disposable should be responsible for releasing memory, closing file handles, canceling network requests, or anything else that may have been associated with the work being performed. ## The `SignalProducer` contract A [signal producer][Signal Producers] is like a “recipe” for creating [signals][]. Signal producers do not do anything by themselves—[work begins only when a signal is produced](#signal-producers-start-work-on-demand-by-creating-signals). Since a signal producer is just a declaration of _how_ to create signals, it is a value type, and has no memory management to speak of. #### Signal producers start work on demand by creating signals The [`start`][start] and [`startWithSignal`][startWithSignal] methods each produce a `Signal` (implicitly and explicitly, respectively). After instantiating the signal, the closure that was passed to [`SignalProducer.init`][SignalProducer.init] will be executed, to start the flow of [events][] after any observers have been attached. Although the producer itself is not _really_ responsible for the execution of work, it’s common to speak of “starting” and “canceling” a producer. These terms refer to producing a `Signal` that will start work, and [disposing of that signal](#disposing-of-a-produced-signal-will-interrupt-it) to stop work. A producer can be started any number of times (including zero), and the work associated with it will execute exactly that many times as well. #### Each produced signal may send different events at different times Because signal producers [start work on demand](#signal-producers-start-work-on-demand-by-creating-signals), there may be different [observers][] associated with each execution, and those observers may see completely different [event][Events] timelines. In other words, events are generated from scratch for each time the producer is started, and can be completely different (or in a completely different order) from other times the producer is started. Nonetheless, each execution of a signal producer will follow [the `Event` contract](#the-event-contract). #### Signal operators can be lifted to apply to signal producers Due to the relationship between signals and signal producers, it is possible to automatically promote any [operators][] over one or more `Signal`s to apply to the same number of `SignalProducer`s instead, using the [`lift`][lift] method. `lift` will apply the behavior of the specified operator to each `Signal` that is [created when the signal producer is started](#signal-producers-start-work-on-demand-by-creating-signals). #### Disposing of a produced signal will interrupt it When a producer is started using the [`start`][start] or [`startWithSignal`][startWithSignal] methods, a [`Disposable`][Disposables] is automatically created and passed back. Disposing of this object will [interrupt](#interruption-cancels-outstanding-work-and-usually-propagates-immediately) the produced `Signal`, thereby canceling outstanding work and sending an `Interrupted` [event][Events] to all [observers][], and will also dispose of everything added to the [`CompositeDisposable`][CompositeDisposable] in [SignalProducer.init]. Note that disposing of one produced `Signal` will not affect other signals created by the same `SignalProducer`. ## Best practices The following recommendations are intended to help keep RAC-based code predictable, understandable, and performant. They are, however, only guidelines. Use best judgement when determining whether to apply the recommendations here to a given piece of code. #### Process only as many values as needed Keeping an event stream alive longer than necessary can waste CPU and memory, as unnecessary work is performed for results that will never be used. If only a certain number of values or certain number of time is required from a [signal][Signals] or [producer][Signal Producers], operators like [`take`][take] or [`takeUntil`][takeUntil] can be used to automatically complete the stream once a certain condition is fulfilled. The benefit is exponential, too, as this will terminate dependent operators sooner, potentially saving a significant amount of work. #### Observe events on a known scheduler When receiving a [signal][Signals] or [producer][Signal Producers] from unknown code, it can be difficult to know which thread [events][] will arrive upon. Although events are [guaranteed to be serial](#events-are-serial), sometimes stronger guarantees are needed, like when performing UI updates (which must occur on the main thread). Whenever such a guarantee is important, the [`observeOn`][observeOn] [operator][Operators] should be used to force events to be received upon a specific [scheduler][Schedulers]. #### Switch schedulers in as few places as possible Notwithstanding the [above](#observe-events-on-a-known-scheduler), [events][] should only be delivered to a specific [scheduler][Schedulers] when absolutely necessary. Switching schedulers can introduce unnecessary delays and cause an increase in CPU load. Generally, [`observeOn`][observeOn] should only be used right before observing the [signal][Signals], starting the [producer][Signal Producers], or binding to a [property][Properties]. This ensures that events arrive on the expected scheduler, without introducing multiple thread hops before their arrival. #### Capture side effects within signal producers Because [signal producers start work on demand](#signal-producers-start-work-on-demand-by-creating-signals), any functions or methods that return a [signal producer][Signal Producers] should make sure that side effects are captured _within_ the producer itself, instead of being part of the function or method call. For example, a function like this: ```swift func search(text: String) -> SignalProducer ``` … should _not_ immediately start a search. Instead, the returned producer should execute the search once for every time that it is started. This also means that if the producer is never started, a search will never have to be performed either. #### Share the side effects of a signal producer by sharing one produced signal If multiple [observers][] are interested in the results of a [signal producer][Signal Producers], calling [`start`][start] once for each observer means that the work associated with the producer will [execute that many times](#signal-producers-start-work-on-demand-by-creating-signals) and [may not generate the same results](#each-produced-signal-may-send-different-events-at-different-times). If: 1. the observers need to receive the exact same results 1. the observers know about each other, or 1. the code starting the producer knows about each observer … it may be more appropriate to start the producer _just once_, and share the results of that one [signal][Signals] to all observers, by attaching them within the closure passed to the [`startWithSignal`][startWithSignal] method. #### Prefer managing lifetime with operators over explicit disposal Although the [disposable][Disposables] returned from [`start`][start] makes canceling a [signal producer][Signal Producers] really easy, explicit use of disposables can quickly lead to a rat's nest of resource management and cleanup code. There are almost always higher-level [operators][] that can be used instead of manual disposal: * [`take`][take] can be used to automatically terminate a stream once a certain number of values have been received. * [`takeUntil`][takeUntil] can be used to automatically terminate a [signal][Signals] or producer when an event occurs (for example, when a “Cancel” button is pressed in the UI). * [Properties][] and the `<~` operator can be used to “bind” the result of a signal or producer, until termination or until the property is deallocated. This can replace a manual observation that sets a value somewhere. ## Implementing new operators RAC provides a long list of built-in [operators][] that should cover most use cases; however, RAC is not a closed system. It's entirely valid to implement additional operators for specialized uses, or for consideration in ReactiveCocoa itself. Implementing a new operator requires a careful attention to detail and a focus on simplicity, to avoid introducing bugs into the calling code. These guidelines cover some of the common pitfalls and help preserve the expected API contracts. It may also help to look at the implementations of existing `Signal` and `SignalProducer` operators for reference points. #### Prefer writing operators that apply to both signals and producers Since any [signal operator can apply to signal producers](#signal-operators-can-be-lifted-to-apply-to-signal-producers), writing custom operators in terms of [`Signal`][Signals] means that [`SignalProducer`][Signal Producers] will get it “for free.” Even if the caller only needs to apply the new operator to signal producers at first, this generality can save time and effort in the future. Of course, some capabilities _require_ producers (for example, any retrying or repeating), so it may not always be possible to write a signal-based version instead. #### Compose existing operators when possible Considerable thought has been put into the operators provided by RAC, and they have been validated through automated tests and through their real world use in other projects. An operator that has been written from scratch may not be as robust, or might not handle a special case that the built-in operators are aware of. To minimize duplication and possible bugs, use the provided operators as much as possible in a custom operator implementation. Generally, there should be very little code written from scratch. #### Forward failure and interruption events as soon as possible Unless an operator is specifically built to handle [failures](#failures-behave-like-exceptions-and-propagate-immediately) and [interruption](#interruption-cancels-outstanding-work-and-usually-propagates-immedaitely) in a custom way, it should propagate those events to the observer as soon as possible, to ensure that their semantics are honored. #### Switch over `Event` values Instead of using [`start(failed:completed:interrupted:next:)`][start] or [`observe(failed:completed:interrupted:next:)`][observe], create your own [observer][Observers] to process raw [`Event`][Events] values, and use a `switch` statement to determine the event type. For example: ```swift producer.start { event in switch event { case let .Next(value): print("Next event: \(value)") case let .Failed(error): print("Failed event: \(error)") case .Completed: print("Completed event") case .Interrupted: print("Interrupted event") } } ``` Since the compiler will generate a warning if the `switch` is missing any case, this prevents mistakes in a custom operator’s event handling. #### Avoid introducing concurrency Concurrency is an extremely common source of bugs in programming. To minimize the potential for deadlocks and race conditions, operators should not concurrently perform their work. Callers always have the ability to [observe events on a specific scheduler](#observe-events-on-a-known-scheduler), and RAC offers built-in ways to parallelize work, so custom operators don’t need to be concerned with it. #### Avoid blocking in operators Signal or producer operators should return a new signal or producer (respectively) as quickly as possible. Any work that the operator needs to perform should be part of the event handling logic, _not_ part of the operator invocation itself. This guideline can be safely ignored when the purpose of an operator is to synchronously retrieve one or more values from a stream, like `single()` or `wait()`. [CompositeDisposable]: ../ReactiveCocoa/Swift/Disposable.swift [Disposables]: FrameworkOverview.md#disposables [Events]: FrameworkOverview.md#events [Framework Overview]: FrameworkOverview.md [NoError]: ../ReactiveCocoa/Swift/Errors.swift [Observers]: FrameworkOverview.md#observers [Operators]: BasicOperators.md [Properties]: FrameworkOverview.md#properties [Schedulers]: FrameworkOverview.md#schedulers [Signal Producers]: FrameworkOverview.md#signal-producers [Signal.init]: ../ReactiveCocoa/Swift/Signal.swift [Signal.pipe]: ../ReactiveCocoa/Swift/Signal.swift [SignalProducer.init]: ../ReactiveCocoa/Swift/SignalProducer.swift [Signals]: FrameworkOverview.md#signals [delay]: ../ReactiveCocoa/Swift/Signal.swift [flatten]: BasicOperators.md#flattening-producers [lift]: ../ReactiveCocoa/Swift/SignalProducer.swift [observe]: ../ReactiveCocoa/Swift/Signal.swift [observeOn]: ../ReactiveCocoa/Swift/Signal.swift [start]: ../ReactiveCocoa/Swift/SignalProducer.swift [startWithSignal]: ../ReactiveCocoa/Swift/SignalProducer.swift [take]: ../ReactiveCocoa/Swift/Signal.swift [takeUntil]: ../ReactiveCocoa/Swift/Signal.swift ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/DocumentingCode.md ================================================ # Documenting Code Please follow these guidelines when documenting code using [Xcode's markup](https://developer.apple.com/library/mac/documentation/Xcode/Reference/xcode_markup_formatting_ref/): - Expand lines up to 80 characters per line. If the line extends beyond 80 characters the next line must be indented at the previous markup delimiter's colon position + 1 space: ``` /// DO: /// For the sake of the demonstration we will use the lorem ipsum text here. /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ullamcorper /// tempor dolor a cras amet. /// /// - returns: Cras a convallis dolor, sed pellentesque mi. Integer suscipit /// fringilla turpis in bibendum volutpat. /// ... /// DON'T /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ullamcorper tempor dolor a cras amet. /// /// - returns: Cras a convallis dolor, sed pellentesque mi. Integer suscipit fringilla turpis in bibendum volutpat. /// ... /// DON'T II /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ullamcorper /// tempor dolor a cras amet. /// /// - returns: Cras a convallis dolor, sed pellentesque mi. Integer suscipit /// fringilla turpis in bibendum volutpat. ``` - Always use the `parameters` delimiter instead of the `parameter` delimiter even if a function has only one parameter: ``` /// DO: /// - parameters: /// - foo: Instance of `Foo`. /// DON'T: /// - parameter foo: Instance of `Foo`. ``` - Do not add a `return` delimiter to an initializer's markup: ``` /// DO: /// Initialises instance of `Foo` with given arguments. init(withBar bar: Bar = Bar.defaultBar()) { ... /// DON'T: /// Initialises instance of `Foo` with given arguments. /// /// - returns: Initialized `Foo` with default `Bar` init(withBar bar: Bar = Bar.defaultBar()) { ... ``` - Treat parameter declaration as a separate sentence/paragraph: ``` /// DO: /// - parameters: /// - foo: A foo for the function. /// ... /// DON'T: /// - parameters: /// - foo: foo for the function; ``` - Add one line between markup delimiters and no whitespace lines between a function's `parameters`: ``` /// DO: /// - note: This is an amazing function. /// /// - parameters: /// - foo: Instance of `Foo`. /// - bar: Instance of `Bar`. /// /// - returns: Something magical. /// ... /// DON'T: /// - note: Don't forget to breathe, it's important! 😎 /// - parameters: /// - foo: Instance of `Foo`. /// - bar: Instance of `Bar`. /// - returns: Something claustrophobic. ``` - Use code voice to highlight symbols in descriptions, parameter definitions, return statments and elsewhere. ``` /// DO: /// Create instance of `Foo` by passing it `Bar`. /// /// - parameters: /// - bar: Instance of `Bar`. /// ... /// DON'T: /// Create instance of Foo by passing it Bar. /// /// - parameters: /// - bar: Instance of Bar. - The `precondition`, `parameters` and `return` delimiters should come last in that order in the markup block before the method's signature. ``` /// DO: /// Create instance of `Foo` by passing it `Bar`. /// /// - note: The `foo` is not retained by the receiver. /// /// - parameters: /// - foo: Instance of `Foo`. init(foo: Foo) { /* ... */ /// DON'T /// Create counter that will count down from `number`. /// /// - parameters: /// - number: Number to count down from. /// /// - precondition: `number` must be non-negative. init(count: Int) ``` - Use first person's active voice in present simple tense. ``` /// DO: /// Do something magical and return pixie dust from `self`. /// /// DON'T: /// Does something magical and returns pixie dust from `self`. ``` ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/FrameworkOverview.md ================================================ # Framework Overview This document contains a high-level description of the different components within the ReactiveCocoa framework, and an attempt to explain how they work together and divide responsibilities. This is meant to be a starting point for learning about new modules and finding more specific documentation. For examples and help understanding how to use RAC, see the [README][] or the [Design Guidelines][]. ## Events An **event**, represented by the [`Event`][Event] type, is the formalized representation of the fact that _something has happened_. In ReactiveCocoa, events are the centerpiece of communication. An event might represent the press of a button, a piece of information received from an API, the occurrence of an error, or the completion of a long-running operation. In any case, something generates the events and sends them over a [signal](#signals) to any number of [observers](#observers). `Event` is an enumerated type representing either a value or one of three terminal events: * The `Next` event provides a new value from the source. * The `Failed` event indicates that an error occurred before the signal could finish. Events are parameterized by an `ErrorType`, which determines the kind of failure that’s permitted to appear in the event. If a failure is not permitted, the event can use type `NoError` to prevent any from being provided. * The `Completed` event indicates that the signal finished successfully, and that no more values will be sent by the source. * The `Interrupted` event indicates that the signal has terminated due to cancellation, meaning that the operation was neither successful nor unsuccessful. ## Signals A **signal**, represented by the [`Signal`][Signal] type, is any series of [events](#events) over time that can be observed. Signals are generally used to represent event streams that are already “in progress”, like notifications, user input, etc. As work is performed or data is received, events are _sent_ on the signal, which pushes them out to any observers. All observers see the events at the same time. Users must [observe](#observers) a signal in order to access its events. Observing a signal does not trigger any side effects. In other words, signals are entirely producer-driven and push-based, and consumers (observers) cannot have any effect on their lifetime. While observing a signal, the user can only evaluate the events in the same order as they are sent on the signal. There is no random access to values of a signal. Signals can be manipulated by applying [primitives][BasicOperators] to them. Typical primitives to manipulate a single signal like `filter`, `map` and `reduce` are available, as well as primitives to manipulate multiple signals at once (`zip`). Primitives operate only on the `Next` events of a signal. The lifetime of a signal consists of any number of `Next` events, followed by one terminating event, which may be any one of `Failed`, `Completed`, or `Interrupted` (but not a combination). Terminating events are not included in the signal’s values—they must be handled specially. ### Pipes A **pipe**, created by `Signal.pipe()`, is a [signal](#signals) that can be manually controlled. The method returns a [signal](#signals) and an [observer](#observers). The signal can be controlled by sending events to the observer. This can be extremely useful for bridging non-RAC code into the world of signals. For example, instead of handling application logic in block callbacks, the blocks can simply send events to the observer. Meanwhile, the signal can be returned, hiding the implementation detail of the callbacks. ## Signal Producers A **signal producer**, represented by the [`SignalProducer`][SignalProducer] type, creates [signals](#signals) and performs side effects. They can be used to represent operations or tasks, like network requests, where each invocation of `start()` will create a new underlying operation, and allow the caller to observe the result(s). The `startWithSignal()` variant gives access to the produced signal, allowing it to be observed multiple times if desired. Because of the behavior of `start()`, each signal created from the same producer may see a different ordering or version of events, or the stream might even be completely different! Unlike a plain signal, no work is started (and thus no events are generated) until an observer is attached, and the work is restarted anew for each additional observer. Starting a signal producer returns a [disposable](#disposables) that can be used to interrupt/cancel the work associated with the produced signal. Just like signals, signal producers can also be manipulated via primitives like `map`, `filter`, etc. Every signal primitive can be “lifted” to operate upon signal producers instead, using the `lift` method. Furthermore, there are additional primitives that control _when_ and _how_ work is started—for example, `times`. ### Buffers A **buffer**, created by `SignalProducer.buffer()`, is a (optionally bounded) queue for [events](#events) that replays those events when new [signals](#signals) are created from the producer. Similar to a [pipe](#pipes), the method returns an [observer](#observers). Events sent to this observer will be added to the queue. If the buffer is already at capacity when a new value arrives, the earliest (oldest) value will be dropped to make room for it. ## Observers An **observer** is anything that is waiting or capable of waiting for [events](#events) from a [signal](#signals). Within RAC, an observer is represented as an [`Observer`][Observer] that accepts [`Event`][Event] values. Observers can be implicitly created by using the callback-based versions of the `Signal.observe` or `SignalProducer.start` methods. ## Actions An **action**, represented by the [`Action`][Action] type, will do some work when executed with an input. While executing, zero or more output values and/or a failure may be generated. Actions are useful for performing side-effecting work upon user interaction, like when a button is clicked. Actions can also be automatically disabled based on a [property](#properties), and this disabled state can be represented in a UI by disabling any controls associated with the action. For interaction with `NSControl` or `UIControl`, RAC provides the [`CocoaAction`][CocoaAction] type for bridging actions to Objective-C. ## Properties A **property**, represented by the [`PropertyType`][Property] protocol, stores a value and notifies observers about future changes to that value. The current value of a property can be obtained from the `value` getter. The `producer` getter returns a [signal producer](#signal-producers) that will send the property’s current value, followed by all changes over time. The `<~` operator can be used to bind properties in different ways. Note that in all cases, the target has to be a [`MutablePropertyType`][Property]. * `property <~ signal` binds a [signal](#signals) to the property, updating the property’s value to the latest value sent by the signal. * `property <~ producer` starts the given [signal producer](#signal-producers), and binds the property’s value to the latest value sent on the started signal. * `property <~ otherProperty` binds one property to another, so that the destination property’s value is updated whenever the source property is updated. The [`DynamicProperty`][Property] type can be used to bridge to Objective-C APIs that require Key-Value Coding (KVC) or Key-Value Observing (KVO), like `NSOperation`. Note that most AppKit and UIKit properties do _not_ support KVO, so their changes should be observed through other mechanisms. [`MutableProperty`][Property] should be preferred over dynamic properties whenever possible! ## Disposables A **disposable**, represented by the [`Disposable`][Disposable] protocol, is a mechanism for memory management and cancellation. When starting a [signal producer](#signal-producers), a disposable will be returned. This disposable can be used by the caller to cancel the work that has been started (e.g. background processing, network requests, etc.), clean up all temporary resources, then send a final `Interrupted` event upon the particular [signal](#signals) that was created. Observing a [signal](#signals) may also return a disposable. Disposing it will prevent the observer from receiving any future events from that signal, but it will not have any effect on the signal itself. For more information about cancellation, see the RAC [Design Guidelines][]. ## Schedulers A **scheduler**, represented by the [`SchedulerType`][Scheduler] protocol, is a serial execution queue to perform work or deliver results upon. [Signals](#signals) and [signal producers](#signal-producers) can be ordered to deliver events on a specific scheduler. [Signal producers](#signal-producers) can additionally be ordered to start their work on a specific scheduler. Schedulers are similar to Grand Central Dispatch queues, but schedulers support cancellation (via [disposables](#disposables)), and always execute serially. With the exception of the [`ImmediateScheduler`][Scheduler], schedulers do not offer synchronous execution. This helps avoid deadlocks, and encourages the use of [signal and signal producer primitives][BasicOperators] instead of blocking work. Schedulers are also somewhat similar to `NSOperationQueue`, but schedulers do not allow tasks to be reordered or depend on one another. [Design Guidelines]: DesignGuidelines.md [BasicOperators]: BasicOperators.md [README]: ../README.md [Signal]: ../ReactiveCocoa/Swift/Signal.swift [SignalProducer]: ../ReactiveCocoa/Swift/SignalProducer.swift [Action]: ../ReactiveCocoa/Swift/Action.swift [CocoaAction]: ../ReactiveCocoa/Swift/CocoaAction.swift [Disposable]: ../ReactiveCocoa/Swift/Disposable.swift [Scheduler]: ../ReactiveCocoa/Swift/Scheduler.swift [Property]: ../ReactiveCocoa/Swift/Property.swift [Event]: ../ReactiveCocoa/Swift/Event.swift [Observer]: ../ReactiveCocoa/Swift/Observer.swift ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/BasicOperators.md ================================================ # Basic Operators This document explains some of the most common operators used in ReactiveCocoa, and includes examples demonstrating their use. Operators that apply to [sequences][Sequences] _and_ [signals][Signals] are known as [stream][Streams] operators. **[Performing side effects with signals](#performing-side-effects-with-signals)** 1. [Subscription](#subscription) 1. [Injecting effects](#injecting-effects) **[Transforming streams](#transforming-streams)** 1. [Mapping](#mapping) 1. [Filtering](#filtering) **[Combining streams](#combining-streams)** 1. [Concatenating](#concatenating) 1. [Flattening](#flattening) 1. [Mapping and flattening](#mapping-and-flattening) **[Combining signals](#combining-signals)** 1. [Sequencing](#sequencing) 1. [Merging](#merging) 1. [Combining latest values](#combining-latest-values) 1. [Switching](#switching) ## Performing side effects with signals Most signals start out "cold," which means that they will not do any work until [subscription](#subscription). Upon subscription, a signal or its [subscribers][Subscription] can perform _side effects_, like logging to the console, making a network request, updating the user interface, etc. Side effects can also be [injected](#injecting-effects) into a signal, where they won't be performed immediately, but will instead take effect with each subscription later. ### Subscription The [-subscribe…][RACSignal] methods give you access to the current and future values in a signal: ```objc RACSignal *letters = [@"A B C D E F G H I" componentsSeparatedByString:@" "].rac_sequence.signal; // Outputs: A B C D E F G H I [letters subscribeNext:^(NSString *x) { NSLog(@"%@", x); }]; ``` For a cold signal, side effects will be performed once _per subscription_: ```objc __block unsigned subscriptions = 0; RACSignal *loggingSignal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { subscriptions++; [subscriber sendCompleted]; return nil; }]; // Outputs: // subscription 1 [loggingSignal subscribeCompleted:^{ NSLog(@"subscription %u", subscriptions); }]; // Outputs: // subscription 2 [loggingSignal subscribeCompleted:^{ NSLog(@"subscription %u", subscriptions); }]; ``` This behavior can be changed using a [connection][Connections]. ### Injecting effects The [-do…][RACSignal+Operations] methods add side effects to a signal without actually subscribing to it: ```objc __block unsigned subscriptions = 0; RACSignal *loggingSignal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { subscriptions++; [subscriber sendCompleted]; return nil; }]; // Does not output anything yet loggingSignal = [loggingSignal doCompleted:^{ NSLog(@"about to complete subscription %u", subscriptions); }]; // Outputs: // about to complete subscription 1 // subscription 1 [loggingSignal subscribeCompleted:^{ NSLog(@"subscription %u", subscriptions); }]; ``` ## Transforming streams These operators transform a single stream into a new stream. ### Mapping The [-map:][RACStream] method is used to transform the values in a stream, and create a new stream with the results: ```objc RACSequence *letters = [@"A B C D E F G H I" componentsSeparatedByString:@" "].rac_sequence; // Contains: AA BB CC DD EE FF GG HH II RACSequence *mapped = [letters map:^(NSString *value) { return [value stringByAppendingString:value]; }]; ``` ### Filtering The [-filter:][RACStream] method uses a block to test each value, including it into the resulting stream only if the test passes: ```objc RACSequence *numbers = [@"1 2 3 4 5 6 7 8 9" componentsSeparatedByString:@" "].rac_sequence; // Contains: 2 4 6 8 RACSequence *filtered = [numbers filter:^ BOOL (NSString *value) { return (value.intValue % 2) == 0; }]; ``` ## Combining streams These operators combine multiple streams into a single new stream. ### Concatenating The [-concat:][RACStream] method appends one stream's values to another: ```objc RACSequence *letters = [@"A B C D E F G H I" componentsSeparatedByString:@" "].rac_sequence; RACSequence *numbers = [@"1 2 3 4 5 6 7 8 9" componentsSeparatedByString:@" "].rac_sequence; // Contains: A B C D E F G H I 1 2 3 4 5 6 7 8 9 RACSequence *concatenated = [letters concat:numbers]; ``` ### Flattening The [-flatten][RACStream] operator is applied to a stream-of-streams, and combines their values into a single new stream. Sequences are [concatenated](#concatenating): ```objc RACSequence *letters = [@"A B C D E F G H I" componentsSeparatedByString:@" "].rac_sequence; RACSequence *numbers = [@"1 2 3 4 5 6 7 8 9" componentsSeparatedByString:@" "].rac_sequence; RACSequence *sequenceOfSequences = @[ letters, numbers ].rac_sequence; // Contains: A B C D E F G H I 1 2 3 4 5 6 7 8 9 RACSequence *flattened = [sequenceOfSequences flatten]; ``` Signals are [merged](#merging): ```objc RACSubject *letters = [RACSubject subject]; RACSubject *numbers = [RACSubject subject]; RACSignal *signalOfSignals = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:letters]; [subscriber sendNext:numbers]; [subscriber sendCompleted]; return nil; }]; RACSignal *flattened = [signalOfSignals flatten]; // Outputs: A 1 B C 2 [flattened subscribeNext:^(NSString *x) { NSLog(@"%@", x); }]; [letters sendNext:@"A"]; [numbers sendNext:@"1"]; [letters sendNext:@"B"]; [letters sendNext:@"C"]; [numbers sendNext:@"2"]; ``` ### Mapping and flattening [Flattening](#flattening) isn't that interesting on its own, but understanding how it works is important for [-flattenMap:][RACStream]. `-flattenMap:` is used to transform each of a stream's values into _a new stream_. Then, all of the streams returned will be flattened down into a single stream. In other words, it's [-map:](#mapping) followed by [-flatten](#flattening). This can be used to extend or edit sequences: ```objc RACSequence *numbers = [@"1 2 3 4 5 6 7 8 9" componentsSeparatedByString:@" "].rac_sequence; // Contains: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 RACSequence *extended = [numbers flattenMap:^(NSString *num) { return @[ num, num ].rac_sequence; }]; // Contains: 1_ 3_ 5_ 7_ 9_ RACSequence *edited = [numbers flattenMap:^(NSString *num) { if (num.intValue % 2 == 0) { return [RACSequence empty]; } else { NSString *newNum = [num stringByAppendingString:@"_"]; return [RACSequence return:newNum]; } }]; ``` Or create multiple signals of work which are automatically recombined: ```objc RACSignal *letters = [@"A B C D E F G H I" componentsSeparatedByString:@" "].rac_sequence.signal; [[letters flattenMap:^(NSString *letter) { return [database saveEntriesForLetter:letter]; }] subscribeCompleted:^{ NSLog(@"All database entries saved successfully."); }]; ``` ## Combining signals These operators combine multiple signals into a single new [RACSignal][]. ### Sequencing [-then:][RACSignal+Operations] starts the original signal, waits for it to complete, and then only forwards the values from a new signal: ```objc RACSignal *letters = [@"A B C D E F G H I" componentsSeparatedByString:@" "].rac_sequence.signal; // The new signal only contains: 1 2 3 4 5 6 7 8 9 // // But when subscribed to, it also outputs: A B C D E F G H I RACSignal *sequenced = [[letters doNext:^(NSString *letter) { NSLog(@"%@", letter); }] then:^{ return [@"1 2 3 4 5 6 7 8 9" componentsSeparatedByString:@" "].rac_sequence.signal; }]; ``` This is most useful for executing all the side effects of one signal, then starting another, and only returning the second signal's values. ### Merging The [+merge:][RACSignal+Operations] method will forward the values from many signals into a single stream, as soon as those values arrive: ```objc RACSubject *letters = [RACSubject subject]; RACSubject *numbers = [RACSubject subject]; RACSignal *merged = [RACSignal merge:@[ letters, numbers ]]; // Outputs: A 1 B C 2 [merged subscribeNext:^(NSString *x) { NSLog(@"%@", x); }]; [letters sendNext:@"A"]; [numbers sendNext:@"1"]; [letters sendNext:@"B"]; [letters sendNext:@"C"]; [numbers sendNext:@"2"]; ``` ### Combining latest values The [+combineLatest:][RACSignal+Operations] and `+combineLatest:reduce:` methods will watch multiple signals for changes, and then send the latest values from _all_ of them when a change occurs: ```objc RACSubject *letters = [RACSubject subject]; RACSubject *numbers = [RACSubject subject]; RACSignal *combined = [RACSignal combineLatest:@[ letters, numbers ] reduce:^(NSString *letter, NSString *number) { return [letter stringByAppendingString:number]; }]; // Outputs: B1 B2 C2 C3 [combined subscribeNext:^(id x) { NSLog(@"%@", x); }]; [letters sendNext:@"A"]; [letters sendNext:@"B"]; [numbers sendNext:@"1"]; [numbers sendNext:@"2"]; [letters sendNext:@"C"]; [numbers sendNext:@"3"]; ``` Note that the combined signal will only send its first value when all of the inputs have sent at least one. In the example above, `@"A"` was never forwarded because `numbers` had not sent a value yet. ### Switching The [-switchToLatest][RACSignal+Operations] operator is applied to a signal-of-signals, and always forwards the values from the latest signal: ```objc RACSubject *letters = [RACSubject subject]; RACSubject *numbers = [RACSubject subject]; RACSubject *signalOfSignals = [RACSubject subject]; RACSignal *switched = [signalOfSignals switchToLatest]; // Outputs: A B 1 D [switched subscribeNext:^(NSString *x) { NSLog(@"%@", x); }]; [signalOfSignals sendNext:letters]; [letters sendNext:@"A"]; [letters sendNext:@"B"]; [signalOfSignals sendNext:numbers]; [letters sendNext:@"C"]; [numbers sendNext:@"1"]; [signalOfSignals sendNext:letters]; [numbers sendNext:@"2"]; [letters sendNext:@"D"]; ``` [Connections]: FrameworkOverview.md#connections [RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h [RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h [RACSignal+Operations]: ../../ReactiveCocoa/Objective-C/RACSignal+Operations.h [RACStream]: ../../ReactiveCocoa/Objective-C/RACStream.h [Sequences]: FrameworkOverview.md#sequences [Signals]: FrameworkOverview.md#signals [Streams]: FrameworkOverview.md#streams [Subscription]: FrameworkOverview.md#subscription ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/DesignGuidelines.md ================================================ # Design Guidelines This document contains guidelines for projects that want to make use of ReactiveCocoa. The content here is heavily inspired by the [Rx Design Guidelines](http://blogs.msdn.com/b/rxteam/archive/2010/10/28/rx-design-guidelines.aspx). This document assumes basic familiarity with the features of ReactiveCocoa. The [Framework Overview][] is a better resource for getting up to speed on the functionality provided by RAC. **[The RACSequence contract](#the-racsequence-contract)** 1. [Evaluation occurs lazily by default](#evaluation-occurs-lazily-by-default) 1. [Evaluation blocks the caller](#evaluation-blocks-the-caller) 1. [Side effects occur only once](#side-effects-occur-only-once) **[The RACSignal contract](#the-racsignal-contract)** 1. [Signal events are serialized](#signal-events-are-serialized) 1. [Subscription will always occur on a scheduler](#subscription-will-always-occur-on-a-scheduler) 1. [Errors are propagated immediately](#errors-are-propagated-immediately) 1. [Side effects occur for each subscription](#side-effects-occur-for-each-subscription) 1. [Subscriptions are automatically disposed upon completion or error](#subscriptions-are-automatically-disposed-upon-completion-or-error) 1. [Disposal cancels in-progress work and cleans up resources](#disposal-cancels-in-progress-work-and-cleans-up-resources) **[Best practices](#best-practices)** 1. [Use descriptive declarations for methods and properties that return a signal](#use-descriptive-declarations-for-methods-and-properties-that-return-a-signal) 1. [Indent stream operations consistently](#indent-stream-operations-consistently) 1. [Use the same type for all the values of a stream](#use-the-same-type-for-all-the-values-of-a-stream) 1. [Avoid retaining streams for too long](#avoid-retaining-streams-for-too-long) 1. [Process only as much of a stream as needed](#process-only-as-much-of-a-stream-as-needed) 1. [Deliver signal events onto a known scheduler](#deliver-signal-events-onto-a-known-scheduler) 1. [Switch schedulers in as few places as possible](#switch-schedulers-in-as-few-places-as-possible) 1. [Make the side effects of a signal explicit](#make-the-side-effects-of-a-signal-explicit) 1. [Share the side effects of a signal by multicasting](#share-the-side-effects-of-a-signal-by-multicasting) 1. [Debug streams by giving them names](#debug-streams-by-giving-them-names) 1. [Avoid explicit subscriptions and disposal](#avoid-explicit-subscriptions-and-disposal) 1. [Avoid using subjects when possible](#avoid-using-subjects-when-possible) **[Implementing new operators](#implementing-new-operators)** 1. [Prefer building on RACStream methods](#prefer-building-on-racstream-methods) 1. [Compose existing operators when possible](#compose-existing-operators-when-possible) 1. [Avoid introducing concurrency](#avoid-introducing-concurrency) 1. [Cancel work and clean up all resources in a disposable](#cancel-work-and-clean-up-all-resources-in-a-disposable) 1. [Do not block in an operator](#do-not-block-in-an-operator) 1. [Avoid stack overflow from deep recursion](#avoid-stack-overflow-from-deep-recursion) ## The RACSequence contract [RACSequence][] is a _pull-driven_ stream. Sequences behave similarly to built-in collections, but with a few unique twists. ### Evaluation occurs lazily by default Sequences are evaluated lazily by default. For example, in this sequence: ```objc NSArray *strings = @[ @"A", @"B", @"C" ]; RACSequence *sequence = [strings.rac_sequence map:^(NSString *str) { return [str stringByAppendingString:@"_"]; }]; ``` … no string appending is actually performed until the values of the sequence are needed. Accessing `sequence.head` will perform the concatenation of `A_`, accessing `sequence.tail.head` will perform the concatenation of `B_`, and so on. This generally avoids performing unnecessary work (since values that are never used are never calculated), but means that sequence processing [should be limited only to what's actually needed](#process-only-as-much-of-a-stream-as-needed). Once evaluated, the values in a sequence are memoized and do not need to be recalculated. Accessing `sequence.head` multiple times will only do the work of one string concatenation. If lazy evaluation is undesirable – for instance, because limiting memory usage is more important than avoiding unnecessary work – the [eagerSequence][RACSequence] property can be used to force a sequence (and any sequences derived from it afterward) to evaluate eagerly. ### Evaluation blocks the caller Regardless of whether a sequence is lazy or eager, evaluation of any part of a sequence will block the calling thread until completed. This is necessary because values must be synchronously retrieved from a sequence. If evaluating a sequence is expensive enough that it might block the thread for a significant amount of time, consider creating a signal with [-signalWithScheduler:][RACSequence] and using that instead. ### Side effects occur only once When the block passed to a sequence operator involves side effects, it is important to realize that those side effects will only occur once per value – namely, when the value is evaluated: ```objc NSArray *strings = @[ @"A", @"B", @"C" ]; RACSequence *sequence = [strings.rac_sequence map:^(NSString *str) { NSLog(@"%@", str); return [str stringByAppendingString:@"_"]; }]; // Logs "A" during this call. NSString *concatA = sequence.head; // Logs "B" during this call. NSString *concatB = sequence.tail.head; // Does not log anything. NSString *concatB2 = sequence.tail.head; RACSequence *derivedSequence = [sequence map:^(NSString *str) { return [@"_" stringByAppendingString:str]; }]; // Still does not log anything, because "B_" was already evaluated, and the log // statement associated with it will never be re-executed. NSString *concatB3 = derivedSequence.tail.head; ``` ## The RACSignal contract [RACSignal][] is a _push-driven_ stream with a focus on asynchronous event delivery through _subscriptions_. For more information about signals and subscriptions, see the [Framework Overview][]. ### Signal events are serialized A signal may choose to deliver its events on any thread. Consecutive events are even allowed to arrive on different threads or schedulers, unless explicitly [delivered onto a particular scheduler](#deliver-signal-events-onto-a-known-scheduler). However, RAC guarantees that no two signal events will ever arrive concurrently. While an event is being processed, no other events will be delivered. The senders of any other events will be forced to wait until the current event has been handled. Most notably, this means that the blocks passed to [-subscribeNext:error:completed:][RACSignal] do not need to be synchronized with respect to each other, because they will never be invoked simultaneously. ### Subscription will always occur on a scheduler To ensure consistent behavior for the `+createSignal:` and `-subscribe:` methods, each [RACSignal][] subscription is guaranteed to take place on a valid [RACScheduler][]. If the subscriber's thread already has a [+currentScheduler][RACScheduler], scheduling takes place immediately; otherwise, scheduling occurs as soon as possible on a background scheduler. Note that the main thread is always associated with the [+mainThreadScheduler][RACScheduler], so subscription will always be immediate there. See the documentation for [-subscribe:][RACSignal] for more information. ### Errors are propagated immediately In RAC, `error` events have exception semantics. When an error is sent on a signal, it will be immediately forwarded to all dependent signals, causing the entire chain to terminate. [Operators][RACSignal+Operations] whose primary purpose is to change error-handling behavior – like `-catch:`, `-catchTo:`, or `-materialize` – are obviously not subject to this rule. ### Side effects occur for each subscription Each new subscription to a [RACSignal][] will trigger its side effects. This means that any side effects will happen as many times as subscriptions to the signal itself. Consider this example: ```objc __block int aNumber = 0; // Signal that will have the side effect of incrementing `aNumber` block // variable for each subscription before sending it. RACSignal *aSignal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { aNumber++; [subscriber sendNext:@(aNumber)]; [subscriber sendCompleted]; return nil; }]; // This will print "subscriber one: 1" [aSignal subscribeNext:^(id x) { NSLog(@"subscriber one: %@", x); }]; // This will print "subscriber two: 2" [aSignal subscribeNext:^(id x) { NSLog(@"subscriber two: %@", x); }]; ``` Side effects are repeated for each subscription. The same applies to [stream][RACStream] and [signal][RACSignal+Operations] operators: ```objc __block int missilesToLaunch = 0; // Signal that will have the side effect of changing `missilesToLaunch` on // subscription. RACSignal *processedSignal = [[RACSignal return:@"missiles"] map:^(id x) { missilesToLaunch++; return [NSString stringWithFormat:@"will launch %d %@", missilesToLaunch, x]; }]; // This will print "First will launch 1 missiles" [processedSignal subscribeNext:^(id x) { NSLog(@"First %@", x); }]; // This will print "Second will launch 2 missiles" [processedSignal subscribeNext:^(id x) { NSLog(@"Second %@", x); }]; ``` To suppress this behavior and have multiple subscriptions to a signal execute its side effects only once, a signal can be [multicasted](#share-the-side-effects-of-a-signal-by-multicasting). Side effects can be insidious and produce problems that are difficult to diagnose. For this reason it is suggested to [make side effects explicit](#make-the-side-effects-of-a-signal-explicit) when possible. ### Subscriptions are automatically disposed upon completion or error When a [subscriber][RACSubscriber] is sent a `completed` or `error` event, the associated subscription will automatically be disposed. This behavior usually eliminates the need to manually dispose of subscriptions. See the [Memory Management][] document for more information about signal lifetime. ### Disposal cancels in-progress work and cleans up resources When a subscription is disposed, manually or automatically, any in-progress or outstanding work associated with that subscription is gracefully cancelled as soon as possible, and any resources associated with the subscription are cleaned up. Disposing of the subscription to a signal representing a file upload, for example, would cancel any in-flight network request, and free the file data from memory. ## Best practices The following recommendations are intended to help keep RAC-based code predictable, understandable, and performant. They are, however, only guidelines. Use best judgement when determining whether to apply the recommendations here to a given piece of code. ### Use descriptive declarations for methods and properties that return a signal When a method or property has a return type of [RACSignal][], it can be difficult to understand the signal's semantics at a glance. There are three key questions that can inform a declaration: 1. Is the signal _hot_ (already activated by the time it's returned to the caller) or _cold_ (activated when subscribed to)? 1. Will the signal include zero, one, or more values? 1. Does the signal have side effects? **Hot signals without side effects** should typically be properties instead of methods. The use of a property indicates that no initialization is needed before subscribing to the signal's events, and that additional subscribers will not change the semantics. Signal properties should usually be named after events (e.g., `textChanged`). **Cold signals without side effects** should be returned from methods that have noun-like names (e.g., `-currentText`). A method declaration indicates that the signal might not be kept around, hinting that work is performed at the time of subscription. If the signal sends multiple values, the noun should be pluralized (e.g., `-currentModels`). **Signals with side effects** should be returned from methods that have verb-like names (e.g., `-logIn`). The verb indicates that the method is not idempotent and that callers must be careful to call it only when the side effects are desired. If the signal will send one or more values, include a noun that describes them (e.g., `-loadConfiguration`, `-fetchLatestEvents`). ### Indent stream operations consistently It's easy for stream-heavy code to become very dense and confusing if not properly formatted. Use consistent indentation to highlight where chains of streams begin and end. When invoking a single method upon a stream, no additional indentation is necessary (block arguments aside): ```objc RACStream *result = [stream startWith:@0]; RACStream *result2 = [stream map:^(NSNumber *value) { return @(value.integerValue + 1); }]; ``` When transforming the same stream multiple times, ensure that all of the steps are aligned. Complex operators like [+zip:reduce:][RACStream] or [+combineLatest:reduce:][RACSignal+Operations] may be split over multiple lines for readability: ```objc RACStream *result = [[[RACStream zip:@[ firstStream, secondStream ] reduce:^(NSNumber *first, NSNumber *second) { return @(first.integerValue + second.integerValue); }] filter:^ BOOL (NSNumber *value) { return value.integerValue >= 0; }] map:^(NSNumber *value) { return @(value.integerValue + 1); }]; ``` Of course, streams nested within block arguments should start at the natural indentation of the block: ```objc [[signal then:^{ @strongify(self); return [[self doSomethingElse] catch:^(NSError *error) { @strongify(self); [self presentError:error]; return [RACSignal empty]; }]; }] subscribeCompleted:^{ NSLog(@"All done."); }]; ``` ### Use the same type for all the values of a stream [RACStream][] (and, by extension, [RACSignal][] and [RACSequence][]) allows streams to be composed of heterogenous objects, just like Cocoa collections do. However, using different object types within the same stream complicates the use of operators and puts an additional burden on any consumers of that stream, who must be careful to only invoke supported methods. Whenever possible, streams should only contain objects of the same type. ### Avoid retaining streams for too long Retaining any [RACStream][] longer than it's needed will cause any dependencies to be retained as well, potentially keeping memory usage much higher than it would be otherwise. A [RACSequence][] should be retained only for as long as the `head` of the sequence is needed. If the head will no longer be used, retain the `tail` of the node instead of the node itself. See the [Memory Management][] guide for more information on object lifetime. ### Process only as much of a stream as needed As well as [consuming additional memory](#avoid-retaining-streams-for-too-long), unnecessarily keeping a stream or [RACSignal][] subscription alive can result in increased CPU usage, as unnecessary work is performed for results that will never be used. If only a certain number of values are needed from a stream, the [-take:][RACStream] operator can be used to retrieve only that many values, and then automatically terminate the stream immediately thereafter. Operators like `-take:` and [-takeUntil:][RACSignal+Operations] automatically propagate cancellation up the stack as well. If nothing else needs the rest of the values, any dependencies will be terminated too, potentially saving a significant amount of work. ### Deliver signal events onto a known scheduler When a signal is returned from a method, or combined with such a signal, it can be difficult to know which thread events will be delivered upon. Although events are [guaranteed to be serial](#signal-events-are-serialized), sometimes stronger guarantees are needed, like when performing UI updates (which must occur on the main thread). Whenever such a guarantee is important, the [-deliverOn:][RACSignal+Operations] operator should be used to force a signal's events to arrive on a specific [RACScheduler][]. ### Switch schedulers in as few places as possible Notwithstanding the above, events should only be delivered to a specific [scheduler][RACScheduler] when absolutely necessary. Switching schedulers can introduce unnecessary delays and cause an increase in CPU load. Generally, the use of [-deliverOn:][RACSignal+Operations] should be restricted to the end of a signal chain – e.g., before subscription, or before the values are bound to a property. ### Make the side effects of a signal explicit As much as possible, [RACSignal][] side effects should be avoided, because subscribers may find the [behavior of side effects](#side-effects-occur-for-each-subscription) unexpected. However, because Cocoa is predominantly imperative, it is sometimes useful to perform side effects when signal events occur. Although most [RACStream][] and [RACSignal][RACSignal+Operations] operators accept arbitrary blocks (which can contain side effects), the use of `-doNext:`, `-doError:`, and `-doCompleted:` will make side effects more explicit and self-documenting: ```objc NSMutableArray *nexts = [NSMutableArray array]; __block NSError *receivedError = nil; __block BOOL success = NO; RACSignal *bookkeepingSignal = [[[valueSignal doNext:^(id x) { [nexts addObject:x]; }] doError:^(NSError *error) { receivedError = error; }] doCompleted:^{ success = YES; }]; RAC(self, value) = bookkeepingSignal; ``` ### Share the side effects of a signal by multicasting [Side effects occur for each subscription](#side-effects-occur-for-each-subscription) by default, but there are certain situations where side effects should only occur once – for example, a network request typically should not be repeated when a new subscriber is added. The `-publish` and `-multicast:` operators of [RACSignal][RACSignal+Operations] allow a single subscription to be shared to any number of subscribers by using a [RACMulticastConnection][]: ```objc // This signal starts a new request on each subscription. RACSignal *networkRequest = [RACSignal createSignal:^(id subscriber) { AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id response) { [subscriber sendNext:response]; [subscriber sendCompleted]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [subscriber sendError:error]; }]; [client enqueueHTTPRequestOperation:operation]; return [RACDisposable disposableWithBlock:^{ [operation cancel]; }]; }]; // Starts a single request, no matter how many subscriptions `connection.signal` // gets. This is equivalent to the -replay operator, or similar to // +startEagerlyWithScheduler:block:. RACMulticastConnection *connection = [networkRequest multicast:[RACReplaySubject subject]]; [connection connect]; [connection.signal subscribeNext:^(id response) { NSLog(@"subscriber one: %@", response); }]; [connection.signal subscribeNext:^(id response) { NSLog(@"subscriber two: %@", response); }]; ``` ### Debug streams by giving them names Every [RACStream][] has a `name` property to assist with debugging. A stream's `-description` includes its name, and all operators provided by RAC will automatically add to the name. This usually makes it possible to identify a stream from its default name alone. For example, this snippet: ```objc RACSignal *signal = [[[RACObserve(self, username) distinctUntilChanged] take:3] filter:^(NSString *newUsername) { return [newUsername isEqualToString:@"joshaber"]; }]; NSLog(@"%@", signal); ``` … would log a name similar to `[[[RACObserve(self, username)] -distinctUntilChanged] -take: 3] -filter:`. Names can also be manually applied by using [-setNameWithFormat:][RACStream]. [RACSignal][] also offers `-logNext`, `-logError`, `-logCompleted`, and `-logAll` methods, which will automatically log signal events as they occur, and include the name of the signal in the messages. This can be used to conveniently inspect a signal in real-time. ### Avoid explicit subscriptions and disposal Although [-subscribeNext:error:completed:][RACSignal] and its variants are the most basic way to process a signal, their use can complicate code by being less declarative, encouraging the use of side effects, and potentially duplicating built-in functionality. Likewise, explicit use of the [RACDisposable][] class can quickly lead to a rat's nest of resource management and cleanup code. There are almost always higher-level patterns that can be used instead of manual subscriptions and disposal: * The [RAC()][RAC] or [RACChannelTo()][RACChannelTo] macros can be used to bind a signal to a property, instead of performing manual updates when changes occur. * The [-rac_liftSelector:withSignals:][NSObject+RACLifting] method can be used to automatically invoke a selector when one or more signals fire. * Operators like [-takeUntil:][RACSignal+Operations] can be used to automatically dispose of a subscription when an event occurs (like a "Cancel" button being pressed in the UI). Generally, the use of built-in [stream][RACStream] and [signal][RACSignal+Operations] operators will lead to simpler and less error-prone code than replicating the same behaviors in a subscription callback. ### Avoid using subjects when possible [Subjects][] are a powerful tool for bridging imperative code into the world of signals, but, as the "mutable variables" of RAC, they can quickly lead to complexity when overused. Since they can be manipulated from anywhere, at any time, subjects often break the linear flow of stream processing and make logic much harder to follow. They also don't support meaningful [disposal](#disposal-cancels-in-progress-work-and-cleans-up-resources), which can result in unnecessary work. Subjects can usually be replaced with other patterns from ReactiveCocoa: * Instead of feeding initial values into a subject, consider generating the values in a [+createSignal:][RACSignal] block instead. * Instead of delivering intermediate results to a subject, try combining the output of multiple signals with operators like [+combineLatest:][RACSignal+Operations] or [+zip:][RACStream]. * Instead of using subjects to share results with multiple subscribers, [multicast](#share-the-side-effects-of-a-signal-by-multicasting) a base signal instead. * Instead of implementing an action method which simply controls a subject, use a [command][RACCommand] or [-rac_signalForSelector:][NSObject+RACSelectorSignal] instead. When subjects _are_ necessary, they should almost always be the "base" input for a signal chain, not used in the middle of one. ## Implementing new operators RAC provides a long list of built-in operators for [streams][RACStream] and [signals][RACSignal+Operations] that should cover most use cases; however, RAC is not a closed system. It's entirely valid to implement additional operators for specialized uses, or for consideration in ReactiveCocoa itself. Implementing a new operator requires a careful attention to detail and a focus on simplicity, to avoid introducing bugs into the calling code. These guidelines cover some of the common pitfalls and help preserve the expected API contracts. ### Prefer building on RACStream methods [RACStream][] offers a simpler interface than [RACSequence][] and [RACSignal][], and all stream operators are automatically applicable to sequences and signals as well. For these reasons, new operators should be implemented using only [RACStream][] methods whenever possible. The minimal required methods of the class, including `-bind:`, `-zipWith:`, and `-concat:`, are quite powerful, and many tasks can be accomplished without needing anything else. If a new [RACSignal][] operator needs to handle `error` and `completed` events, consider using the [-materialize][RACSignal+Operations] method to bring the events into the stream. All of the events of a materialized signal can be manipulated by stream operators, which helps minimize the use of non-stream operators. ### Compose existing operators when possible Considerable thought has been put into the operators provided by RAC, and they have been validated through automated tests and through their real world use in other projects. An operator that has been written from scratch may not be as robust, or might not handle a special case that the built-in operators are aware of. To minimize duplication and possible bugs, use the provided operators as much as possible in a custom operator implementation. Generally, there should be very little code written from scratch. ### Avoid introducing concurrency Concurrency is an extremely common source of bugs in programming. To minimize the potential for deadlocks and race conditions, operators should not concurrently perform their work. Callers always have the ability to subscribe or deliver events on a specific [RACScheduler][], and RAC offers powerful ways to [parallelize work][Parallelizing Independent Work] without making operators unnecessarily complex. ### Cancel work and clean up all resources in a disposable When implementing a signal with the [+createSignal:][RACSignal] method, the provided block is expected to return a [RACDisposable][]. This disposable should: * As soon as it is convenient, gracefully cancel any in-progress work that was started by the signal. * Immediately dispose of any subscriptions to other signals, thus triggering their cancellation and cleanup code as well. * Release any memory or other resources that were allocated by the signal. This helps fulfill [the RACSignal contract](#disposal-cancels-in-progress-work-and-cleans-up-resources). ### Do not block in an operator Stream operators should return a new stream more-or-less immediately. Any work that the operator needs to perform should be part of evaluating the new stream, _not_ part of the operator invocation itself. ```objc // WRONG! - (RACSequence *)map:(id (^)(id))block { RACSequence *result = [RACSequence empty]; for (id obj in self) { id mappedObj = block(obj); result = [result concat:[RACSequence return:mappedObj]]; } return result; } // Right! - (RACSequence *)map:(id (^)(id))block { return [self flattenMap:^(id obj) { id mappedObj = block(obj); return [RACSequence return:mappedObj]; }]; } ``` This guideline can be safely ignored when the purpose of an operator is to synchronously retrieve one or more values from a stream (like [-first][RACSignal+Operations]). ### Avoid stack overflow from deep recursion Any operator that might recurse indefinitely should use the `-scheduleRecursiveBlock:` method of [RACScheduler][]. This method will transform recursion into iteration instead, preventing a stack overflow. For example, this would be an incorrect implementation of [-repeat][RACSignal+Operations], due to its potential to overflow the call stack and cause a crash: ```objc - (RACSignal *)repeat { return [RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; __block void (^resubscribe)(void) = ^{ RACDisposable *disposable = [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ resubscribe(); }]; [compoundDisposable addDisposable:disposable]; }; return compoundDisposable; }]; } ``` By contrast, this version will avoid a stack overflow: ```objc - (RACSignal *)repeat { return [RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; RACScheduler *scheduler = RACScheduler.currentScheduler ?: [RACScheduler scheduler]; RACDisposable *disposable = [scheduler scheduleRecursiveBlock:^(void (^reschedule)(void)) { RACDisposable *disposable = [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ reschedule(); }]; [compoundDisposable addDisposable:disposable]; }]; [compoundDisposable addDisposable:disposable]; return compoundDisposable; }]; } ``` [Framework Overview]: FrameworkOverview.md [Memory Management]: MemoryManagement.md [NSObject+RACLifting]: ../../ReactiveCocoa/Objective-C/NSObject+RACLifting.h [NSObject+RACSelectorSignal]: ../../ReactiveCocoa/Objective-C/NSObject+RACSelectorSignal.h [RAC]: ../../ReactiveCocoa/Objective-C/RACSubscriptingAssignmentTrampoline.h [RACChannelTo]: ../../ReactiveCocoa/Objective-C/RACKVOChannel.h [RACCommand]: ../../ReactiveCocoa/Objective-C/RACCommand.h [RACDisposable]: ../../ReactiveCocoa/Objective-C/RACDisposable.h [RACEvent]: ../../ReactiveCocoa/Objective-C/RACEvent.h [RACMulticastConnection]: ../../ReactiveCocoa/Objective-C/RACMulticastConnection.h [RACObserve]: ../../ReactiveCocoa/Objective-C/NSObject+RACPropertySubscribing.h [RACScheduler]: ../../ReactiveCocoa/Objective-C/RACScheduler.h [RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h [RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h [RACSignal+Operations]: ../../ReactiveCocoa/Objective-C/RACSignal+Operations.h [RACStream]: ../../ReactiveCocoa/Objective-C/RACStream.h [RACSubscriber]: ../../ReactiveCocoa/Objective-C/RACSubscriber.h [Subjects]: FrameworkOverview.md#subjects [Parallelizing Independent Work]: ../README.md#parallelizing-independent-work ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/FrameworkOverview.md ================================================ # Framework Overview This document contains a high-level description of the different components within the ReactiveCocoa framework, and an attempt to explain how they work together and divide responsibilities. This is meant to be a starting point for learning about new modules and finding more specific documentation. For examples and help understanding how to use RAC, see the [README][] or the [Design Guidelines][]. ## Streams A **stream**, represented by the [RACStream][] abstract class, is any series of object values. Values may be available immediately or in the future, but must be retrieved sequentially. There is no way to retrieve the second value of a stream without evaluating or waiting for the first value. Streams are [monads][]. Among other things, this allows complex operations to be built on a few basic primitives (`-bind:` in particular). [RACStream][] also implements the equivalent of the [Monoid][] and [MonadZip][] typeclasses from [Haskell][]. [RACStream][] isn't terribly useful on its own. Most streams are treated as [signals](#signals) or [sequences](#sequences) instead. ## Signals A **signal**, represented by the [RACSignal][] class, is a _push-driven_ [stream](#streams). Signals generally represent data that will be delivered in the future. As work is performed or data is received, values are _sent_ on the signal, which pushes them out to any subscribers. Users must [subscribe](#subscription) to a signal in order to access its values. Signals send three different types of events to their subscribers: * The **next** event provides a new value from the stream. [RACStream][] methods only operate on events of this type. Unlike Cocoa collections, it is completely valid for a signal to include `nil`. * The **error** event indicates that an error occurred before the signal could finish. The event may include an `NSError` object that indicates what went wrong. Errors must be handled specially – they are not included in the stream's values. * The **completed** event indicates that the signal finished successfully, and that no more values will be added to the stream. Completion must be handled specially – it is not included in the stream of values. The lifetime of a signal consists of any number of `next` events, followed by one `error` or `completed` event (but not both). ### Subscription A **subscriber** is anything that is waiting or capable of waiting for events from a [signal](#signals). Within RAC, a subscriber is represented as any object that conforms to the [RACSubscriber][] protocol. A **subscription** is created through any call to [-subscribeNext:error:completed:][RACSignal], or one of the corresponding convenience methods. Technically, most [RACStream][] and [RACSignal][RACSignal+Operations] operators create subscriptions as well, but these intermediate subscriptions are usually an implementation detail. Subscriptions [retain their signals][Memory Management], and are automatically disposed of when the signal completes or errors. Subscriptions can also be [disposed of manually](#disposables). ### Subjects A **subject**, represented by the [RACSubject][] class, is a [signal](#signals) that can be manually controlled. Subjects can be thought of as the "mutable" variant of a signal, much like `NSMutableArray` is for `NSArray`. They are extremely useful for bridging non-RAC code into the world of signals. For example, instead of handling application logic in block callbacks, the blocks can simply send events to a shared subject instead. The subject can then be returned as a [RACSignal][], hiding the implementation detail of the callbacks. Some subjects offer additional behaviors as well. In particular, [RACReplaySubject][] can be used to buffer events for future [subscribers](#subscription), like when a network request finishes before anything is ready to handle the result. ### Commands A **command**, represented by the [RACCommand][] class, creates and subscribes to a signal in response to some action. This makes it easy to perform side-effecting work as the user interacts with the app. Usually the action triggering a command is UI-driven, like when a button is clicked. Commands can also be automatically disabled based on a signal, and this disabled state can be represented in a UI by disabling any controls associated with the command. On OS X, RAC adds a `rac_command` property to [NSButton][NSButton+RACCommandSupport] for setting up these behaviors automatically. ### Connections A **connection**, represented by the [RACMulticastConnection][] class, is a [subscription](#subscription) that is shared between any number of subscribers. [Signals](#signals) are _cold_ by default, meaning that they start doing work _each_ time a new subscription is added. This behavior is usually desirable, because it means that data will be freshly recalculated for each subscriber, but it can be problematic if the signal has side effects or the work is expensive (for example, sending a network request). A connection is created through the `-publish` or `-multicast:` methods on [RACSignal][RACSignal+Operations], and ensures that only one underlying subscription is created, no matter how many times the connection is subscribed to. Once connected, the connection's signal is said to be _hot_, and the underlying subscription will remain active until _all_ subscriptions to the connection are [disposed](#disposables). ## Sequences A **sequence**, represented by the [RACSequence][] class, is a _pull-driven_ [stream](#streams). Sequences are a kind of collection, similar in purpose to `NSArray`. Unlike an array, the values in a sequence are evaluated _lazily_ (i.e., only when they are needed) by default, potentially improving performance if only part of a sequence is used. Just like Cocoa collections, sequences cannot contain `nil`. Sequences are similar to [Clojure's sequences][seq] ([lazy-seq][] in particular), or the [List][] type in [Haskell][]. RAC adds a `-rac_sequence` method to most of Cocoa's collection classes, allowing them to be used as [RACSequences][RACSequence] instead. ## Disposables The **[RACDisposable][]** class is used for cancellation and resource cleanup. Disposables are most commonly used to unsubscribe from a [signal](#signals). When a [subscription](#subscription) is disposed, the corresponding subscriber will not receive _any_ further events from the signal. Additionally, any work associated with the subscription (background processing, network requests, etc.) will be cancelled, since the results are no longer needed. For more information about cancellation, see the RAC [Design Guidelines][]. ## Schedulers A **scheduler**, represented by the [RACScheduler][] class, is a serial execution queue for [signals](#signals) to perform work or deliver their results upon. Schedulers are similar to Grand Central Dispatch queues, but schedulers support cancellation (via [disposables](#disposables)), and always execute serially. With the exception of the [+immediateScheduler][RACScheduler], schedulers do not offer synchronous execution. This helps avoid deadlocks, and encourages the use of [signal operators][RACSignal+Operations] instead of blocking work. [RACScheduler][] is also somewhat similar to `NSOperationQueue`, but schedulers do not allow tasks to be reordered or depend on one another. ## Value types RAC offers a few miscellaneous classes for conveniently representing values in a [stream](#streams): * **[RACTuple][]** is a small, constant-sized collection that can contain `nil` (represented by `RACTupleNil`). It is generally used to represent the combined values of multiple streams. * **[RACUnit][]** is a singleton "empty" value. It is used as a value in a stream for those times when more meaningful data doesn't exist. * **[RACEvent][]** represents any [signal event](#signals) as a single value. It is primarily used by the `-materialize` method of [RACSignal][RACSignal+Operations]. [Design Guidelines]: DesignGuidelines.md [Haskell]: http://www.haskell.org [lazy-seq]: http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/lazy-seq [List]: https://downloads.haskell.org/~ghc/latest/docs/html/libraries/Data-List.html [Memory Management]: MemoryManagement.md [monads]: http://en.wikipedia.org/wiki/Monad_(functional_programming) [Monoid]: http://downloads.haskell.org/~ghc/latest/docs/html/libraries/Data-Monoid.html [MonadZip]: http://downloads.haskell.org/~ghc/latest/docs/html/libraries/Control-Monad-Zip.html [NSButton+RACCommandSupport]: ../../ReactiveCocoa/Objective-C/NSButton+RACCommandSupport.h [RACCommand]: ../../ReactiveCocoa/Objective-C/RACCommand.h [RACDisposable]: ../../ReactiveCocoa/Objective-C/RACDisposable.h [RACEvent]: ../../ReactiveCocoa/Objective-C/RACEvent.h [RACMulticastConnection]: ../../ReactiveCocoa/Objective-C/RACMulticastConnection.h [RACReplaySubject]: ../../ReactiveCocoa/Objective-C/RACReplaySubject.h [RACScheduler]: ../../ReactiveCocoa/Objective-C/RACScheduler.h [RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h [RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h [RACSignal+Operations]: ../../ReactiveCocoa/Objective-C/RACSignal+Operations.h [RACStream]: ../../ReactiveCocoa/Objective-C/RACStream.h [RACSubject]: ../../ReactiveCocoa/Objective-C/RACSubject.h [RACSubscriber]: ../../ReactiveCocoa/Objective-C/RACSubscriber.h [RACTuple]: ../../ReactiveCocoa/Objective-C/RACTuple.h [RACUnit]: ../../ReactiveCocoa/Objective-C/RACUnit.h [README]: README.md [seq]: http://clojure.org/sequences ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/MemoryManagement.md ================================================ # Memory Management ReactiveCocoa's memory management is quite complex, but the end result is that **you don't need to retain signals in order to process them**. If the framework required you to retain every signal, it'd be much more unwieldy to use, especially for one-shot signals that are used like futures (e.g., network requests). You'd have to save any long-lived signal into a property, and then also make sure to clear it out when you're done with it. Not fun. ## Subscribers Before going any further, it's worth noting that `subscribeNext:error:completed:` (and all variants thereof) create an _implicit_ subscriber using the given blocks. Any objects referenced from those blocks will therefore be retained as part of the subscription. Just like any other object, `self` won't be retained without a direct or indirect reference to it. ## Finite or Short-Lived Signals The most important guideline to RAC memory management is that a **subscription is automatically terminated upon completion or error, and the subscriber removed**. For example, if you have some code like this in your view controller: ```objc self.disposable = [signal subscribeCompleted:^{ doSomethingPossiblyInvolving(self); }]; ``` … the memory management will look something like the following: ``` view controller -> RACDisposable -> RACSignal -> RACSubscriber -> view controller ``` However, the `RACSignal -> RACSubscriber` relationship is torn down as soon as `signal` finishes, breaking the retain cycle. **This is often all you need**, because the lifetime of the `RACSignal` in memory will naturally match the logical lifetime of the event stream. ## Infinite Signals Infinite signals (or signals that live so long that they might as well be infinite), however, will never tear down naturally. This is where disposables shine. **Disposing of a subscription will remove the associated subscriber**, and just generally clean up any resources associated with that subscription. To that one subscriber, it's just as if the signal had completed or errored, except no final event is sent on the signal. All other subscribers will remain intact. However, as a general rule of thumb, if you have to manually manage a subscription's lifecycle, [there's probably a better way to do what you want][avoid-explicit-subscriptions-and-disposal]. ## Signals Derived from `self` There's still a bit of a tricky middle case here, though. Any time a signal's lifetime is tied to the calling scope, you'll have a much harder cycle to break. This commonly occurs when using `RACObserve()` on a key path that's relative to `self`, and then applying a block that needs to capture `self`. The easiest answer here is just to **capture `self` weakly**: ```objc __weak id weakSelf = self; [RACObserve(self, username) subscribeNext:^(NSString *username) { id strongSelf = weakSelf; [strongSelf validateUsername]; }]; ``` Or, after importing the included [EXTScope.h](https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h) header: ```objc @weakify(self); [RACObserve(self, username) subscribeNext:^(NSString *username) { @strongify(self); [self validateUsername]; }]; ``` *(Replace `__weak` or `@weakify` with `__unsafe_unretained` or `@unsafeify`, respectively, if the object doesn't support weak references.)* However, [there's probably a better pattern you could use instead][avoid-explicit-subscriptions-and-disposal]. For example, the above sample could perhaps be written like: ```objc [self rac_liftSelector:@selector(validateUsername:) withSignals:RACObserve(self, username), nil]; ``` or: ```objc RACSignal *validated = [RACObserve(self, username) map:^(NSString *username) { // Put validation logic here. return @YES; }]; ``` As with infinite signals, there are generally ways you can avoid referencing `self` (or any object) from blocks in a signal chain. ---- The above information is really all you should need in order to use ReactiveCocoa effectively. However, there's one more point to address, just for the technically curious or for anyone interested in contributing to RAC. The design goal of "no retaining necessary" begs the question: how do we know when a signal should be deallocated? What if it was just created, escaped an autorelease pool, and hasn't been retained yet? The real answer is _we don't_, BUT we can usually assume that the caller will retain the signal within the current run loop iteration if they want to keep it. Consequently: 1. A created signal is automatically added to a global set of active signals. 2. The signal will wait for a single pass of the main run loop, and then remove itself from the active set _if it has no subscribers_. Unless the signal was retained somehow, it would deallocate at this point. 3. If something did subscribe in that run loop iteration, the signal stays in the set. 4. Later, when all the subscribers are gone, step 2 is triggered again. This could backfire if the run loop is spun recursively (like in a modal event loop on OS X), but it makes the life of the framework consumer much easier for most or all other cases. [avoid-explicit-subscriptions-and-disposal]: DesignGuidelines.md#avoid-explicit-subscriptions-and-disposal ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/README.md ================================================ # ReactiveCocoa _NOTE: This is legacy introduction to the Objective-C ReactiveCocoa. For the updated version that uses Swift please see the main [README][]_ ReactiveCocoa (RAC) is an Objective-C framework inspired by [Functional Reactive Programming][]. It provides APIs for **composing and transforming streams of values**. If you're already familiar with functional reactive programming or know the basic premise of ReactiveCocoa, check out the other documentation in this folder for a framework overview and more in-depth information about how it all works in practice. ## New to ReactiveCocoa? ReactiveCocoa is documented like crazy, and there's a wealth of introductory material available to explain what RAC is and how you can use it. If you want to learn more, we recommend these resources, roughly in order: 1. [Introduction](#introduction) 1. [When to use ReactiveCocoa](#when-to-use-reactivecocoa) 1. [Framework Overview][] 1. [Basic Operators][] 1. [Header documentation](../../ReactiveCocoa/Objective-C) 1. Previously answered [Stack Overflow](https://github.com/ReactiveCocoa/ReactiveCocoa/wiki) questions and [GitHub issues](https://github.com/ReactiveCocoa/ReactiveCocoa/issues?labels=question&state=closed) 1. The rest of this folder 1. [Functional Reactive Programming on iOS](https://leanpub.com/iosfrp/) (eBook) If you have any further questions, please feel free to [file an issue](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/new). ## Introduction ReactiveCocoa is inspired by [functional reactive programming](http://blog.maybeapps.com/post/42894317939/input-and-output). Rather than using mutable variables which are replaced and modified in-place, RAC provides signals (represented by `RACSignal`) that capture present and future values. By chaining, combining, and reacting to signals, software can be written declaratively, without the need for code that continually observes and updates values. For example, a text field can be bound to the latest time, even as it changes, instead of using additional code that watches the clock and updates the text field every second. It works much like KVO, but with blocks instead of overriding `-observeValueForKeyPath:ofObject:change:context:`. Signals can also represent asynchronous operations, much like [futures and promises][]. This greatly simplifies asynchronous software, including networking code. One of the major advantages of RAC is that it provides a single, unified approach to dealing with asynchronous behaviors, including delegate methods, callback blocks, target-action mechanisms, notifications, and KVO. Here's a simple example: ```objc // When self.username changes, logs the new name to the console. // // RACObserve(self, username) creates a new RACSignal that sends the current // value of self.username, then the new value whenever it changes. // -subscribeNext: will execute the block whenever the signal sends a value. [RACObserve(self, username) subscribeNext:^(NSString *newName) { NSLog(@"%@", newName); }]; ``` But unlike KVO notifications, signals can be chained together and operated on: ```objc // Only logs names that starts with "j". // // -filter returns a new RACSignal that only sends a new value when its block // returns YES. [[RACObserve(self, username) filter:^(NSString *newName) { return [newName hasPrefix:@"j"]; }] subscribeNext:^(NSString *newName) { NSLog(@"%@", newName); }]; ``` Signals can also be used to derive state. Instead of observing properties and setting other properties in response to the new values, RAC makes it possible to express properties in terms of signals and operations: ```objc // Creates a one-way binding so that self.createEnabled will be // true whenever self.password and self.passwordConfirmation // are equal. // // RAC() is a macro that makes the binding look nicer. // // +combineLatest:reduce: takes an array of signals, executes the block with the // latest value from each signal whenever any of them changes, and returns a new // RACSignal that sends the return value of that block as values. RAC(self, createEnabled) = [RACSignal combineLatest:@[ RACObserve(self, password), RACObserve(self, passwordConfirmation) ] reduce:^(NSString *password, NSString *passwordConfirm) { return @([passwordConfirm isEqualToString:password]); }]; ``` Signals can be built on any stream of values over time, not just KVO. For example, they can also represent button presses: ```objc // Logs a message whenever the button is pressed. // // RACCommand creates signals to represent UI actions. Each signal can // represent a button press, for example, and have additional work associated // with it. // // -rac_command is an addition to NSButton. The button will send itself on that // command whenever it's pressed. self.button.rac_command = [[RACCommand alloc] initWithSignalBlock:^(id _) { NSLog(@"button was pressed!"); return [RACSignal empty]; }]; ``` Or asynchronous network operations: ```objc // Hooks up a "Log in" button to log in over the network. // // This block will be run whenever the login command is executed, starting // the login process. self.loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) { // The hypothetical -logIn method returns a signal that sends a value when // the network request finishes. return [client logIn]; }]; // -executionSignals returns a signal that includes the signals returned from // the above block, one for each time the command is executed. [self.loginCommand.executionSignals subscribeNext:^(RACSignal *loginSignal) { // Log a message whenever we log in successfully. [loginSignal subscribeCompleted:^{ NSLog(@"Logged in successfully!"); }]; }]; // Executes the login command when the button is pressed. self.loginButton.rac_command = self.loginCommand; ``` Signals can also represent timers, other UI events, or anything else that changes over time. Using signals for asynchronous operations makes it possible to build up more complex behavior by chaining and transforming those signals. Work can easily be triggered after a group of operations completes: ```objc // Performs 2 network operations and logs a message to the console when they are // both completed. // // +merge: takes an array of signals and returns a new RACSignal that passes // through the values of all of the signals and completes when all of the // signals complete. // // -subscribeCompleted: will execute the block when the signal completes. [[RACSignal merge:@[ [client fetchUserRepos], [client fetchOrgRepos] ]] subscribeCompleted:^{ NSLog(@"They're both done!"); }]; ``` Signals can be chained to sequentially execute asynchronous operations, instead of nesting callbacks with blocks. This is similar to how [futures and promises][] are usually used: ```objc // Logs in the user, then loads any cached messages, then fetches the remaining // messages from the server. After that's all done, logs a message to the // console. // // The hypothetical -logInUser methods returns a signal that completes after // logging in. // // -flattenMap: will execute its block whenever the signal sends a value, and // returns a new RACSignal that merges all of the signals returned from the block // into a single signal. [[[[client logInUser] flattenMap:^(User *user) { // Return a signal that loads cached messages for the user. return [client loadCachedMessagesForUser:user]; }] flattenMap:^(NSArray *messages) { // Return a signal that fetches any remaining messages. return [client fetchMessagesAfterMessage:messages.lastObject]; }] subscribeNext:^(NSArray *newMessages) { NSLog(@"New messages: %@", newMessages); } completed:^{ NSLog(@"Fetched all messages."); }]; ``` RAC even makes it easy to bind to the result of an asynchronous operation: ```objc // Creates a one-way binding so that self.imageView.image will be set as the user's // avatar as soon as it's downloaded. // // The hypothetical -fetchUserWithUsername: method returns a signal which sends // the user. // // -deliverOn: creates new signals that will do their work on other queues. In // this example, it's used to move work to a background queue and then back to the main thread. // // -map: calls its block with each user that's fetched and returns a new // RACSignal that sends values returned from the block. RAC(self.imageView, image) = [[[[client fetchUserWithUsername:@"joshaber"] deliverOn:[RACScheduler scheduler]] map:^(User *user) { // Download the avatar (this is done on a background queue). return [[NSImage alloc] initWithContentsOfURL:user.avatarURL]; }] // Now the assignment will be done on the main thread. deliverOn:RACScheduler.mainThreadScheduler]; ``` That demonstrates some of what RAC can do, but it doesn't demonstrate why RAC is so powerful. It's hard to appreciate RAC from README-sized examples, but it makes it possible to write code with less state, less boilerplate, better code locality, and better expression of intent. For more sample code, check out [C-41][] or [GroceryList][], which are real iOS apps written using ReactiveCocoa. Additional information about RAC can be found in this folder. ## When to use ReactiveCocoa Upon first glance, ReactiveCocoa is very abstract, and it can be difficult to understand how to apply it to concrete problems. Here are some of the use cases that RAC excels at. ### Handling asynchronous or event-driven data sources Much of Cocoa programming is focused on reacting to user events or changes in application state. Code that deals with such events can quickly become very complex and spaghetti-like, with lots of callbacks and state variables to handle ordering issues. Patterns that seem superficially different, like UI callbacks, network responses, and KVO notifications, actually have a lot in common. [RACSignal][] unifies all these different APIs so that they can be composed together and manipulated in the same way. For example, the following code: ```objc static void *ObservationContext = &ObservationContext; - (void)viewDidLoad { [super viewDidLoad]; [LoginManager.sharedManager addObserver:self forKeyPath:@"loggingIn" options:NSKeyValueObservingOptionInitial context:&ObservationContext]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(loggedOut:) name:UserDidLogOutNotification object:LoginManager.sharedManager]; [self.usernameTextField addTarget:self action:@selector(updateLogInButton) forControlEvents:UIControlEventEditingChanged]; [self.passwordTextField addTarget:self action:@selector(updateLogInButton) forControlEvents:UIControlEventEditingChanged]; [self.logInButton addTarget:self action:@selector(logInPressed:) forControlEvents:UIControlEventTouchUpInside]; } - (void)dealloc { [LoginManager.sharedManager removeObserver:self forKeyPath:@"loggingIn" context:ObservationContext]; [NSNotificationCenter.defaultCenter removeObserver:self]; } - (void)updateLogInButton { BOOL textFieldsNonEmpty = self.usernameTextField.text.length > 0 && self.passwordTextField.text.length > 0; BOOL readyToLogIn = !LoginManager.sharedManager.isLoggingIn && !self.loggedIn; self.logInButton.enabled = textFieldsNonEmpty && readyToLogIn; } - (IBAction)logInPressed:(UIButton *)sender { [[LoginManager sharedManager] logInWithUsername:self.usernameTextField.text password:self.passwordTextField.text success:^{ self.loggedIn = YES; } failure:^(NSError *error) { [self presentError:error]; }]; } - (void)loggedOut:(NSNotification *)notification { self.loggedIn = NO; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == ObservationContext) { [self updateLogInButton]; } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } ``` … could be expressed in RAC like so: ```objc - (void)viewDidLoad { [super viewDidLoad]; @weakify(self); RAC(self.logInButton, enabled) = [RACSignal combineLatest:@[ self.usernameTextField.rac_textSignal, self.passwordTextField.rac_textSignal, RACObserve(LoginManager.sharedManager, loggingIn), RACObserve(self, loggedIn) ] reduce:^(NSString *username, NSString *password, NSNumber *loggingIn, NSNumber *loggedIn) { return @(username.length > 0 && password.length > 0 && !loggingIn.boolValue && !loggedIn.boolValue); }]; [[self.logInButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *sender) { @strongify(self); RACSignal *loginSignal = [LoginManager.sharedManager logInWithUsername:self.usernameTextField.text password:self.passwordTextField.text]; [loginSignal subscribeError:^(NSError *error) { @strongify(self); [self presentError:error]; } completed:^{ @strongify(self); self.loggedIn = YES; }]; }]; RAC(self, loggedIn) = [[NSNotificationCenter.defaultCenter rac_addObserverForName:UserDidLogOutNotification object:nil] mapReplace:@NO]; } ``` ### Chaining dependent operations Dependencies are most often found in network requests, where a previous request to the server needs to complete before the next one can be constructed, and so on: ```objc [client logInWithSuccess:^{ [client loadCachedMessagesWithSuccess:^(NSArray *messages) { [client fetchMessagesAfterMessage:messages.lastObject success:^(NSArray *nextMessages) { NSLog(@"Fetched all messages."); } failure:^(NSError *error) { [self presentError:error]; }]; } failure:^(NSError *error) { [self presentError:error]; }]; } failure:^(NSError *error) { [self presentError:error]; }]; ``` ReactiveCocoa makes this pattern particularly easy: ```objc [[[[client logIn] then:^{ return [client loadCachedMessages]; }] flattenMap:^(NSArray *messages) { return [client fetchMessagesAfterMessage:messages.lastObject]; }] subscribeError:^(NSError *error) { [self presentError:error]; } completed:^{ NSLog(@"Fetched all messages."); }]; ``` ### Parallelizing independent work Working with independent data sets in parallel and then combining them into a final result is non-trivial in Cocoa, and often involves a lot of synchronization: ```objc __block NSArray *databaseObjects; __block NSArray *fileContents; NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init]; NSBlockOperation *databaseOperation = [NSBlockOperation blockOperationWithBlock:^{ databaseObjects = [databaseClient fetchObjectsMatchingPredicate:predicate]; }]; NSBlockOperation *filesOperation = [NSBlockOperation blockOperationWithBlock:^{ NSMutableArray *filesInProgress = [NSMutableArray array]; for (NSString *path in files) { [filesInProgress addObject:[NSData dataWithContentsOfFile:path]]; } fileContents = [filesInProgress copy]; }]; NSBlockOperation *finishOperation = [NSBlockOperation blockOperationWithBlock:^{ [self finishProcessingDatabaseObjects:databaseObjects fileContents:fileContents]; NSLog(@"Done processing"); }]; [finishOperation addDependency:databaseOperation]; [finishOperation addDependency:filesOperation]; [backgroundQueue addOperation:databaseOperation]; [backgroundQueue addOperation:filesOperation]; [backgroundQueue addOperation:finishOperation]; ``` The above code can be cleaned up and optimized by simply composing signals: ```objc RACSignal *databaseSignal = [[databaseClient fetchObjectsMatchingPredicate:predicate] subscribeOn:[RACScheduler scheduler]]; RACSignal *fileSignal = [RACSignal startEagerlyWithScheduler:[RACScheduler scheduler] block:^(id subscriber) { NSMutableArray *filesInProgress = [NSMutableArray array]; for (NSString *path in files) { [filesInProgress addObject:[NSData dataWithContentsOfFile:path]]; } [subscriber sendNext:[filesInProgress copy]]; [subscriber sendCompleted]; }]; [[RACSignal combineLatest:@[ databaseSignal, fileSignal ] reduce:^ id (NSArray *databaseObjects, NSArray *fileContents) { [self finishProcessingDatabaseObjects:databaseObjects fileContents:fileContents]; return nil; }] subscribeCompleted:^{ NSLog(@"Done processing"); }]; ``` ### Simplifying collection transformations Higher-order functions like `map`, `filter`, `fold`/`reduce` are sorely missing from Foundation, leading to loop-focused code like this: ```objc NSMutableArray *results = [NSMutableArray array]; for (NSString *str in strings) { if (str.length < 2) { continue; } NSString *newString = [str stringByAppendingString:@"foobar"]; [results addObject:newString]; } ``` [RACSequence][] allows any Cocoa collection to be manipulated in a uniform and declarative way: ```objc RACSequence *results = [[strings.rac_sequence filter:^ BOOL (NSString *str) { return str.length >= 2; }] map:^(NSString *str) { return [str stringByAppendingString:@"foobar"]; }]; ``` ## System Requirements ReactiveCocoa supports OS X 10.8+ and iOS 8.0+. ## Importing ReactiveCocoa To add RAC to your application: 1. Add the ReactiveCocoa repository as a submodule of your application's repository. 1. Run `script/bootstrap` from within the ReactiveCocoa folder. 1. Drag and drop `ReactiveCocoa.xcodeproj` into your application's Xcode project or workspace. 1. On the "Build Phases" tab of your application target, add RAC to the "Link Binary With Libraries" phase. * **On iOS**, add `libReactiveCocoa-iOS.a`. * **On OS X**, add `ReactiveCocoa.framework`. RAC must also be added to any "Copy Frameworks" build phase. If you don't already have one, simply add a "Copy Files" build phase and target the "Frameworks" destination. 1. Add `"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include" $(inherited)` to the "Header Search Paths" build setting (this is only necessary for archive builds, but it has no negative effect otherwise). 1. **For iOS targets**, add `-ObjC` to the "Other Linker Flags" build setting. 1. **If you added RAC to a project (not a workspace)**, you will also need to add the appropriate RAC target to the "Target Dependencies" of your application. If you would prefer to use [CocoaPods](http://cocoapods.org), there are some [ReactiveCocoa podspecs](https://github.com/CocoaPods/Specs/tree/master/Specs/ReactiveCocoa) that have been generously contributed by third parties. To see a project already set up with RAC, check out [C-41][] or [GroceryList][], which are real iOS apps written using ReactiveCocoa. ## More Info ReactiveCocoa is inspired by .NET's [Reactive Extensions](http://msdn.microsoft.com/en-us/data/gg577609) (Rx). Most of the principles of Rx apply to RAC as well. There are some really good Rx resources out there: * [Reactive Extensions MSDN entry](http://msdn.microsoft.com/en-us/library/hh242985.aspx) * [Reactive Extensions for .NET Introduction](http://leecampbell.blogspot.com/2010/08/reactive-extensions-for-net.html) * [Rx - Channel 9 videos](http://channel9.msdn.com/tags/Rx/) * [Reactive Extensions wiki](http://rxwiki.wikidot.com/) * [101 Rx Samples](http://rxwiki.wikidot.com/101samples) * [Programming Reactive Extensions and LINQ](http://www.amazon.com/Programming-Reactive-Extensions-Jesse-Liberty/dp/1430237473) RAC and Rx are both frameworks inspired by functional reactive programming. Here are some resources related to FRP: * [What is FRP? - Elm Language](http://elm-lang.org/learn/What-is-FRP.elm) * [What is Functional Reactive Programming - Stack Overflow](http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming/1030631#1030631) * [Specification for a Functional Reactive Language - Stack Overflow](http://stackoverflow.com/questions/5875929/specification-for-a-functional-reactive-programming-language#5878525) * [Escape from Callback Hell](http://elm-lang.org/learn/Escape-from-Callback-Hell.elm) * [Principles of Reactive Programming on Coursera](https://www.coursera.org/course/reactive) [README]: ../../README.md [Basic Operators]: BasicOperators.md [Framework Overview]: FrameworkOverview.md [Functional Reactive Programming]: http://en.wikipedia.org/wiki/Functional_reactive_programming [GroceryList]: https://github.com/jspahrsummers/GroceryList [RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h [RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h [futures and promises]: http://en.wikipedia.org/wiki/Futures_and_promises [C-41]: https://github.com/AshFurrow/C-41 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/ObjectiveCBridging.md ================================================ # Objective-C Bridging While ReactiveCocoa 3.0 introduces an entirely new design, it also aims for maximum compatibility with RAC 2, to ease the pain of migration. To interoperate with RAC 2’s Objective-C APIs, RAC 3 offers bridging functions that can convert Objective-C types to Swift types and vice-versa. Because the APIs are based on fundamentally different designs, the conversion is not always one-to-one; however, every attempt has been made to faithfully translate the concepts between the two APIs (and languages). The bridged types include: 1. [`RACSignal` and `SignalProducer` or `Signal`](#racsignal-and-signalproducer-or-signal) 1. [`RACCommand` and `Action`](#raccommand-and-action) 1. [`RACScheduler` and `SchedulerType`](#racscheduler-and-schedulertype) 1. [`RACDisposable` and `Disposable`](#racdisposable-and-disposable) For the complete bridging API, including documentation, see [`ObjectiveCBridging.swift`][ObjectiveCBridging]. To learn more about how to migrate between ReactiveCocoa 2 and 3, see the [CHANGELOG][]. ## `RACSignal` and `SignalProducer` or `Signal` In RAC 3, “cold” signals are represented by the `SignalProducer` type, and “hot” signals are represented by the `Signal` type. “Cold” `RACSignal`s can be converted into `SignalProducer`s using the new `toSignalProducer` method: ```swift extension RACSignal { func toSignalProducer() -> SignalProducer } ``` “Hot” `RACSignal`s cannot be directly converted into `Signal`s, because _any_ `RACSignal` subscription could potentially involve side effects. To obtain a `Signal`, use `RACSignal.toSignalProducer` followed by `SignalProducer.start`, which will make those potential side effects explicit. For the other direction, use the `toRACSignal()` function. When called with a `SignalProducer`, these functions will create a `RACSignal` to `start()` the producer once for each subscription: ```swift func toRACSignal(producer: SignalProducer) -> RACSignal func toRACSignal(producer: SignalProducer) -> RACSignal ``` When called with a `Signal`, these functions will create a `RACSignal` that simply observes it: ```swift func toRACSignal(signal: Signal) -> RACSignal func toRACSignal(signal: Signal) -> RACSignal ``` ## `RACCommand` and `Action` To convert `RACCommand`s into the new `Action` type, use the `toAction()` extension method: ```swift extension RACCommand { func toAction() -> Action } ``` To convert `Action`s into `RACCommand`s, use the `toRACCommand()` function: ```swift func toRACCommand(action: Action) -> RACCommand func toRACCommand(action: Action) -> RACCommand ``` **NOTE:** The `executing` properties of actions and commands are not synchronized across the API bridge. To ensure consistency, only observe the `executing` property from the base object (the one passed _into_ the bridge, not retrieved from it), so updates occur no matter which object is used for execution. ## `RACScheduler` and `SchedulerType` Any `RACScheduler` instance is automatically a `DateSchedulerType` (and therefore a `SchedulerType`), and can be passed directly into any function or method that expects one. Some (but not all) `SchedulerType`s from RAC 3 can be converted into `RACScheduler` instances, using the `toRACScheduler()` method: ```swift extension ImmediateScheduler { func toRACScheduler() -> RACScheduler } extension UIScheduler { func toRACScheduler() -> RACScheduler } extension QueueScheduler { func toRACScheduler() -> RACScheduler } ``` ## `RACDisposable` and `Disposable` Any `RACDisposable` instance is automatically a `Disposable`, and can be used directly anywhere a type conforming to `Disposable` is expected. Although there is no direct conversion from `Disposable` into `RACDisposable`, it is easy to do manually: ```swift let swiftDisposable: Disposable let objcDisposable = RACDisposable { swiftDisposable.dispose() } ``` [CHANGELOG]: ../CHANGELOG.md [ObjectiveCBridging]: ../ReactiveCocoa/Swift/ObjectiveCBridging.swift ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Documentation/README.md ================================================ This folder contains conceptual documentation and design guidelines that don't fit well on a single class or in any specific header file. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/Instruments/README.md ================================================ This folder contains Instruments templates to make it easier to debug code using ReactiveCocoa. To get started with a template, simply double-click it. ### Signal Names The `name` property of `RACSignal` requires that the `RAC_DEBUG_SIGNAL_NAMES` environment variable be set, which means that you won't have access to meaningful names in Instruments by default. To add signal names, open your application's scheme in Xcode, select the Profile action, and add `RAC_DEBUG_SIGNAL_NAMES` with a value of `1` to the list of environment variables. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/LICENSE.md ================================================ **Copyright (c) 2012 - 2016, GitHub, Inc.** **All rights reserved.** 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: Carthage/Checkouts/ReactiveCocoa/Logo/README.md ================================================ This folder contains brand assets. # Logo Four horizontal variations that include both the mark and the logotype. When using the logo in contexts where it's surrounded by other elements, leave a padding of about 10% of its height on each side. # Icon Four icon variations to be used on social media and other contexts where the horizontal logo wouldn't fit. # Colors Primary color: `#88CD79` Secondary color: `#41AD71` Tertiary color: `#4F6B97` ![](Palette.png) # Type Avenir Next, designed by Adrian Frutiger and Akira Kobayashi for Linotype. ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/README.md ================================================ ![](Logo/header.png) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![GitHub release](https://img.shields.io/github/release/ReactiveCocoa/ReactiveCocoa.svg)](https://github.com/ReactiveCocoa/ReactiveCocoa/releases) ![Swift 2.2.x](https://img.shields.io/badge/Swift-2.2.x-orange.svg) ![platforms](https://img.shields.io/badge/platforms-iOS%20%7C%20OS%20X%20%7C%20watchOS%20%7C%20tvOS%20-lightgrey.svg) ReactiveCocoa (RAC) is a Cocoa framework inspired by [Functional Reactive Programming](https://en.wikipedia.org/wiki/Functional_reactive_programming). It provides APIs for composing and transforming **streams of values over time**. 1. [Introduction](#introduction) 1. [Example: online search](#example-online-search) 1. [Objective-C and Swift](#objective-c-and-swift) 1. [How does ReactiveCocoa relate to Rx?](#how-does-reactivecocoa-relate-to-rx) 1. [Getting started](#getting-started) 1. [Playground](#playground) If you’re already familiar with functional reactive programming or what ReactiveCocoa is about, check out the [Documentation][] folder for more in-depth information about how it all works. Then, dive straight into our [documentation comments][Code] for learning more about individual APIs. If you have a question, please see if any discussions in our [GitHub issues](https://github.com/ReactiveCocoa/ReactiveCocoa/issues?q=is%3Aissue+label%3Aquestion+) or [Stack Overflow](http://stackoverflow.com/questions/tagged/reactive-cocoa) have already answered it. If not, please feel free to [file your own](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/new)! #### Compatibility This documents the RAC 4 which targets `Swift 2.2.x`. For `Swift 1.2` support see [RAC 3](https://github.com/ReactiveCocoa/ReactiveCocoa/tree/v3.0.0). ## Introduction ReactiveCocoa is inspired by [functional reactive programming](http://blog.maybeapps.com/post/42894317939/input-and-output). Rather than using mutable variables which are replaced and modified in-place, RAC offers “event streams,” represented by the [`Signal`][Signals] and [`SignalProducer`][Signal producers] types, that send values over time. Event streams unify all of Cocoa’s common patterns for asynchrony and event handling, including: * Delegate methods * Callback blocks * `NSNotification`s * Control actions and responder chain events * [Futures and promises](https://en.wikipedia.org/wiki/Futures_and_promises) * [Key-value observing](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) (KVO) Because all of these different mechanisms can be represented in the _same_ way, it’s easy to declaratively chain and combine them together, with less spaghetti code and state to bridge the gap. For more information about the concepts in ReactiveCocoa, see the [Framework Overview][]. ## Example: online search Let’s say you have a text field, and whenever the user types something into it, you want to make a network request which searches for that query. #### Observing text edits The first step is to observe edits to the text field, using a RAC extension to `UITextField` specifically for this purpose: ```swift let searchStrings = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } ``` This gives us a [signal producer][Signal producers] which sends values of type `String`. _(The cast is [currently necessary](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2182) to bridge this extension method from Objective-C.)_ #### Making network requests With each string, we want to execute a network request. Luckily, RAC offers an `NSURLSession` extension for doing exactly that: ```swift let searchResults = searchStrings .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in let URLRequest = self.searchRequestWithEscapedQuery(query) return NSURLSession.sharedSession().rac_dataWithRequest(URLRequest) } .map { (data, URLResponse) -> String in let string = String(data: data, encoding: NSUTF8StringEncoding)! return self.parseJSONResultsFromString(string) } .observeOn(UIScheduler()) ``` This has transformed our producer of `String`s into a producer of `Array`s containing the search results, which will be forwarded on the main thread (thanks to the [`UIScheduler`][Schedulers]). Additionally, [`flatMap(.Latest)`][flatMapLatest] here ensures that _only one search_—the latest—is allowed to be running. If the user types another character while the network request is still in flight, it will be cancelled before starting a new one. Just think of how much code that would take to do by hand! #### Receiving the results This won’t actually execute yet, because producers must be _started_ in order to receive the results (which prevents doing work when the results are never used). That’s easy enough: ```swift searchResults.startWithNext { results in print("Search results: \(results)") } ``` Here, we watch for the `Next` [event][Events], which contains our results, and just log them to the console. This could easily do something else instead, like update a table view or a label on screen. #### Handling failures In this example so far, any network error will generate a `Failed` [event][Events], which will terminate the event stream. Unfortunately, this means that future queries won’t even be attempted. To remedy this, we need to decide what to do with failures that occur. The quickest solution would be to log them, then ignore them: ```swift .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in let URLRequest = self.searchRequestWithEscapedQuery(query) return NSURLSession.sharedSession() .rac_dataWithRequest(URLRequest) .flatMapError { error in print("Network error occurred: \(error)") return SignalProducer.empty } } ``` By replacing failures with the `empty` event stream, we’re able to effectively ignore them. However, it’s probably more appropriate to retry at least a couple of times before giving up. Conveniently, there’s a [`retry`][retry] operator to do exactly that! Our improved `searchResults` producer might look like this: ```swift let searchResults = searchStrings .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in let URLRequest = self.searchRequestWithEscapedQuery(query) return NSURLSession.sharedSession() .rac_dataWithRequest(URLRequest) .retry(2) .flatMapError { error in print("Network error occurred: \(error)") return SignalProducer.empty } } .map { (data, URLResponse) -> String in let string = String(data: data, encoding: NSUTF8StringEncoding)! return self.parseJSONResultsFromString(string) } .observeOn(UIScheduler()) ``` #### Throttling requests Now, let’s say you only want to actually perform the search periodically, to minimize traffic. ReactiveCocoa has a declarative `throttle` operator that we can apply to our search strings: ```swift let searchStrings = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) ``` This prevents values from being sent less than 0.5 seconds apart. To do this manually would require significant state, and end up much harder to read! With ReactiveCocoa, we can use just one operator to incorporate _time_ into our event stream. #### Debugging event streams Due to its nature, a stream's stack trace might have dozens of frames, which, more often than not, can make debugging a very frustrating activity. A naive way of debugging, is by injecting side effects into the stream, like so: ```swift let searchString = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) .on(event: { print ($0) }) // the side effect ``` This will print the stream's [events][Events], while preserving the original stream behaviour. Both [`SignalProducer`][Signal producers] and [`Signal`][Signals] provide the `logEvents` operator, that will do this automatically for you: ```swift let searchString = textField.rac_textSignal() .toSignalProducer() .map { text in text as! String } .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) .logEvents() ``` For more information and advance usage, check the [Debugging Techniques](Documentation/DebuggingTechniques.md) document. ## Objective-C and Swift Although ReactiveCocoa was started as an Objective-C framework, as of [version 3.0][CHANGELOG], all major feature development is concentrated on the [Swift API][]. RAC’s [Objective-C API][] and Swift API are entirely separate, but there is a [bridge][Objective-C Bridging] to convert between the two. This is mostly meant as a compatibility layer for older ReactiveCocoa projects, or to use Cocoa extensions which haven’t been added to the Swift API yet. The Objective-C API will continue to exist and be supported for the foreseeable future, but it won’t receive many improvements. For more information about using this API, please consult our [legacy documentation][]. **We highly recommend that all new projects use the Swift API.** ## How does ReactiveCocoa relate to Rx? ReactiveCocoa was originally inspired, and therefore heavily influenced, by Microsoft’s [Reactive Extensions](https://msdn.microsoft.com/en-us/data/gg577609.aspx) (Rx) library. There are many ports of Rx, including [RxSwift](https://github.com/ReactiveX/RxSwift), but ReactiveCocoa is _intentionally_ not a direct port. **Where RAC differs from Rx**, it is usually to: * Create a simpler API * Address common sources of confusion * More closely match Cocoa conventions The following are some of the concrete differences, along with their rationales. ### Naming In most versions of Rx, Streams over time are known as `Observable`s, which parallels the `Enumerable` type in .NET. Additionally, most operations in Rx.NET borrow names from [LINQ](https://msdn.microsoft.com/en-us/library/bb397926.aspx), which uses terms reminiscent of relational databases, like `Select` and `Where`. **RAC is focused on matching Swift naming first and foremost**, with terms like `map` and `filter` instead. Other naming differences are typically inspired by significantly better alternatives from [Haskell](https://www.haskell.org) or [Elm](http://elm-lang.org) (which is the primary source for the “signal” terminology). ### Signals and Signal Producers (“hot” and “cold” observables) One of the most confusing aspects of Rx is that of [“hot”, “cold”, and “warm” observables](http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html) (event streams). In short, given just a method or function declaration like this, in C#: ```csharp IObservable Search(string query) ``` … it is **impossible to tell** whether subscribing to (observing) that `IObservable` will involve side effects. If it _does_ involve side effects, it’s also impossible to tell whether _each subscription_ has a side effect, or if only the first one does. This example is contrived, but it demonstrates **a real, pervasive problem** that makes it extremely hard to understand Rx code (and pre-3.0 ReactiveCocoa code) at a glance. [ReactiveCocoa 3.0][CHANGELOG] has solved this problem by distinguishing side effects with the separate [`Signal`][Signals] and [`SignalProducer`][Signal producers] types. Although this means there’s another type to learn about, it improves code clarity and helps communicates intent much better. In other words, **ReactiveCocoa’s changes here are [simple, not easy](http://www.infoq.com/presentations/Simple-Made-Easy)**. ### Typed errors When [signals][] and [signal producers][] are allowed to [fail][Events] in ReactiveCocoa, the kind of error must be specified in the type system. For example, `Signal` is a signal of integer values that may fail with an error of type `NSError`. More importantly, RAC allows the special type `NoError` to be used instead, which _statically guarantees_ that an event stream is not allowed to send a failure. **This eliminates many bugs caused by unexpected failure events.** In Rx systems with types, event streams only specify the type of their values—not the type of their errors—so this sort of guarantee is impossible. ### UI programming Rx is basically agnostic as to how it’s used. Although UI programming with Rx is very common, it has few features tailored to that particular case. RAC takes a lot of inspiration from [ReactiveUI](http://reactiveui.net/), including the basis for [Actions][]. Unlike ReactiveUI, which unfortunately cannot directly change Rx to make it more friendly for UI programming, **ReactiveCocoa has been improved many times specifically for this purpose**—even when it means diverging further from Rx. ## Getting started ReactiveCocoa supports `OS X 10.9+`, `iOS 8.0+`, `watchOS 2.0`, and `tvOS 9.0`. To add RAC to your application: 1. Add the ReactiveCocoa repository as a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of your application’s repository. 1. Run `script/bootstrap` from within the ReactiveCocoa folder. 1. Drag and drop `ReactiveCocoa.xcodeproj` and `Carthage/Checkouts/Result/Result.xcodeproj` into your application’s Xcode project or workspace. 1. On the “General” tab of your application target’s settings, add `ReactiveCocoa.framework` and `Result.framework` to the “Embedded Binaries” section. 1. If your application target does not contain Swift code at all, you should also set the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting to “Yes”. Or, if you’re using [Carthage](https://github.com/Carthage/Carthage), simply add ReactiveCocoa to your `Cartfile`: ``` github "ReactiveCocoa/ReactiveCocoa" ``` Make sure to add both `ReactiveCocoa.framework` and `Result.framework` to "Linked Frameworks and Libraries" and "copy-frameworks" Build Phases. If you would prefer to use [CocoaPods](https://cocoapods.org), there are some [unofficial podspecs](https://github.com/CocoaPods/Specs/tree/master/Specs/ReactiveCocoa) that have been generously contributed by third parties. Once you’ve set up your project, check out the [Framework Overview][] for a tour of ReactiveCocoa’s concepts, and the [Basic Operators][] for some introductory examples of using it. ## Playground We also provide a great Playground, so you can get used to ReactiveCocoa's operators. In order to start using it: 1. Clone the ReactiveCocoa repository. 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` 1. Open `ReactiveCocoa.xcworkspace` 1. Build `Result-Mac` scheme 1. Build `ReactiveCocoa-Mac` scheme 1. Finally open the `ReactiveCocoa.playground` 1. Choose `View > Show Debug Area` [Actions]: Documentation/FrameworkOverview.md#actions [Basic Operators]: Documentation/BasicOperators.md [CHANGELOG]: CHANGELOG.md [Code]: ReactiveCocoa [Documentation]: Documentation [Events]: Documentation/FrameworkOverview.md#events [Framework Overview]: Documentation/FrameworkOverview.md [Legacy Documentation]: Documentation/Legacy [Objective-C API]: ReactiveCocoa/Objective-C [Objective-C Bridging]: Documentation/ObjectiveCBridging.md [Schedulers]: Documentation/FrameworkOverview.md#schedulers [Signal producers]: Documentation/FrameworkOverview.md#signal-producers [Signals]: Documentation/FrameworkOverview.md#signals [Swift API]: ReactiveCocoa/Swift [flatMapLatest]: Documentation/BasicOperators.md#switching-to-the-latest [retry]: Documentation/BasicOperators.md#retrying ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright Copyright © 2014 GitHub. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/MKAnnotationView+RACSignalSupport.h ================================================ // // MKAnnotationView+RACSignalSupport.h // ReactiveCocoa // // Created by Zak Remer on 3/31/15. // Copyright (c) 2015 GitHub. All rights reserved. // #import #import @class RACSignal; @interface MKAnnotationView (RACSignalSupport) /// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon /// the receiver. /// /// Examples /// /// [[[self.cancelButton /// rac_signalForControlEvents:UIControlEventTouchUpInside] /// takeUntil:self.rac_prepareForReuseSignal] /// subscribeNext:^(UIButton *x) { /// // do other things /// }]; @property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/MKAnnotationView+RACSignalSupport.m ================================================ // // MKAnnotationView+RACSignalSupport.m // ReactiveCocoa // // Created by Zak Remer on 3/31/15. // Copyright (c) 2015 GitHub. All rights reserved. // #import "MKAnnotationView+RACSignalSupport.h" #import "NSObject+RACDescription.h" #import "NSObject+RACSelectorSignal.h" #import "RACSignal+Operations.h" #import "RACUnit.h" #import @implementation MKAnnotationView (RACSignalSupport) - (RACSignal *)rac_prepareForReuseSignal { RACSignal *signal = objc_getAssociatedObject(self, _cmd); if (signal != nil) return signal; signal = [[[self rac_signalForSelector:@selector(prepareForReuse)] mapReplace:RACUnit.defaultUnit] setNameWithFormat:@"%@ -rac_prepareForReuseSignal", RACDescription(self)]; objc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSArray+RACSequenceAdditions.h ================================================ // // NSArray+RACSequenceAdditions.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSequence; @interface NSArray (RACSequenceAdditions) /// Creates and returns a sequence corresponding to the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSArray+RACSequenceAdditions.m ================================================ // // NSArray+RACSequenceAdditions.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSArray+RACSequenceAdditions.h" #import "RACArraySequence.h" @implementation NSArray (RACSequenceAdditions) - (RACSequence *)rac_sequence { return [RACArraySequence sequenceWithArray:self offset:0]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACCommandSupport.h ================================================ // // NSControl+RACCommandSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 3/3/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACCommand<__contravariant InputType>; @interface NSControl (RACCommandSupport) /// Sets the control's command. When the control is clicked, the command is /// executed with the sender of the event. The control's enabledness is bound /// to the command's `canExecute`. /// /// Note: this will reset the control's target and action. @property (nonatomic, strong) RACCommand<__kindof NSControl *> *rac_command; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACCommandSupport.m ================================================ // // NSControl+RACCommandSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 3/3/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSControl+RACCommandSupport.h" #import "RACCommand.h" #import "RACScopedDisposable.h" #import "RACSignal+Operations.h" #import static void *NSControlRACCommandKey = &NSControlRACCommandKey; static void *NSControlEnabledDisposableKey = &NSControlEnabledDisposableKey; @implementation NSControl (RACCommandSupport) - (RACCommand *)rac_command { return objc_getAssociatedObject(self, NSControlRACCommandKey); } - (void)setRac_command:(RACCommand *)command { objc_setAssociatedObject(self, NSControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // Tear down any previous binding before setting up our new one, or else we // might get assertion failures. [objc_getAssociatedObject(self, NSControlEnabledDisposableKey) dispose]; objc_setAssociatedObject(self, NSControlEnabledDisposableKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); if (command == nil) { self.enabled = YES; return; } [self rac_hijackActionAndTargetIfNeeded]; RACScopedDisposable *disposable = [[command.enabled setKeyPath:@"enabled" onObject:self] asScopedDisposable]; objc_setAssociatedObject(self, NSControlEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (void)rac_hijackActionAndTargetIfNeeded { SEL hijackSelector = @selector(rac_commandPerformAction:); if (self.target == self && self.action == hijackSelector) return; if (self.target != nil) NSLog(@"WARNING: NSControl.rac_command hijacks the control's existing target and action."); self.target = self; self.action = hijackSelector; } - (void)rac_commandPerformAction:(id)sender { [self.rac_command execute:sender]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACTextSignalSupport.h ================================================ // // NSControl+RACTextSignalSupport.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-03-08. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; @interface NSControl (RACTextSignalSupport) /// Observes a text-based control for changes. /// /// Using this method on a control without editable text is considered undefined /// behavior. /// /// Returns a signal which sends the current string value of the receiver, then /// the new value any time it changes. - (RACSignal *)rac_textSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACTextSignalSupport.m ================================================ // // NSControl+RACTextSignalSupport.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-03-08. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSControl+RACTextSignalSupport.h" #import #import "NSObject+RACDescription.h" #import "RACDisposable.h" #import "RACSignal.h" #import "RACSubscriber.h" @implementation NSControl (RACTextSignalSupport) - (RACSignal *)rac_textSignal { @weakify(self); return [[[[RACSignal createSignal:^(id subscriber) { @strongify(self); id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSControlTextDidChangeNotification object:self queue:nil usingBlock:^(NSNotification *note) { [subscriber sendNext:note.object]; }]; return [RACDisposable disposableWithBlock:^{ [NSNotificationCenter.defaultCenter removeObserver:observer]; }]; }] map:^(NSControl *control) { return [control.stringValue copy]; }] startWith:[self.stringValue copy]] setNameWithFormat:@"%@ -rac_textSignal", RACDescription(self)]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSData+RACSupport.h ================================================ // // NSData+RACSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 5/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACScheduler; @class RACSignal; @interface NSData (RACSupport) // Read the data at the URL using -[NSData initWithContentsOfURL:options:error:]. // Sends the data or the error. // // scheduler - cannot be nil. + (RACSignal *)rac_readContentsOfURL:(NSURL *)URL options:(NSDataReadingOptions)options scheduler:(RACScheduler *)scheduler; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSData+RACSupport.m ================================================ // // NSData+RACSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 5/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSData+RACSupport.h" #import "RACReplaySubject.h" #import "RACScheduler.h" @implementation NSData (RACSupport) + (RACSignal *)rac_readContentsOfURL:(NSURL *)URL options:(NSDataReadingOptions)options scheduler:(RACScheduler *)scheduler { NSCParameterAssert(scheduler != nil); RACReplaySubject *subject = [RACReplaySubject subject]; [subject setNameWithFormat:@"+rac_readContentsOfURL: %@ options: %lu scheduler: %@", URL, (unsigned long)options, scheduler]; [scheduler schedule:^{ NSError *error = nil; NSData *data = [[NSData alloc] initWithContentsOfURL:URL options:options error:&error]; if (data == nil) { [subject sendError:error]; } else { [subject sendNext:data]; [subject sendCompleted]; } }]; return subject; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSDictionary+RACSequenceAdditions.h ================================================ // // NSDictionary+RACSequenceAdditions.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSequence; @interface NSDictionary (RACSequenceAdditions) /// Creates and returns a sequence of RACTuple key/value pairs. The key will be /// the first element in the tuple, and the value will be the second. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; /// Creates and returns a sequence corresponding to the keys in the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_keySequence; /// Creates and returns a sequence corresponding to the values in the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_valueSequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSDictionary+RACSequenceAdditions.m ================================================ // // NSDictionary+RACSequenceAdditions.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSDictionary+RACSequenceAdditions.h" #import "NSArray+RACSequenceAdditions.h" #import "RACSequence.h" #import "RACTuple.h" @implementation NSDictionary (RACSequenceAdditions) - (RACSequence *)rac_sequence { NSDictionary *immutableDict = [self copy]; // TODO: First class support for dictionary sequences. return [immutableDict.allKeys.rac_sequence map:^(id key) { id value = immutableDict[key]; return RACTuplePack(key, value); }]; } - (RACSequence *)rac_keySequence { return self.allKeys.rac_sequence; } - (RACSequence *)rac_valueSequence { return self.allValues.rac_sequence; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSEnumerator+RACSequenceAdditions.h ================================================ // // NSEnumerator+RACSequenceAdditions.h // ReactiveCocoa // // Created by Uri Baghin on 07/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSequence; @interface NSEnumerator (RACSequenceAdditions) /// Creates and returns a sequence corresponding to the receiver. /// /// The receiver is exhausted lazily as the sequence is enumerated. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSEnumerator+RACSequenceAdditions.m ================================================ // // NSEnumerator+RACSequenceAdditions.m // ReactiveCocoa // // Created by Uri Baghin on 07/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSEnumerator+RACSequenceAdditions.h" #import "RACSequence.h" @implementation NSEnumerator (RACSequenceAdditions) - (RACSequence *)rac_sequence { return [RACSequence sequenceWithHeadBlock:^{ return [self nextObject]; } tailBlock:^{ return self.rac_sequence; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSFileHandle+RACSupport.h ================================================ // // NSFileHandle+RACSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 5/10/12. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSignal; @interface NSFileHandle (RACSupport) // Read any available data in the background and send it. Completes when data // length is <= 0. - (RACSignal *)rac_readInBackground; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSFileHandle+RACSupport.m ================================================ // // NSFileHandle+RACSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 5/10/12. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSFileHandle+RACSupport.h" #import "NSNotificationCenter+RACSupport.h" #import "NSObject+RACDescription.h" #import "RACReplaySubject.h" #import "RACDisposable.h" @implementation NSFileHandle (RACSupport) - (RACSignal *)rac_readInBackground { RACReplaySubject *subject = [RACReplaySubject subject]; [subject setNameWithFormat:@"%@ -rac_readInBackground", RACDescription(self)]; RACSignal *dataNotification = [[[NSNotificationCenter defaultCenter] rac_addObserverForName:NSFileHandleReadCompletionNotification object:self] map:^(NSNotification *note) { return note.userInfo[NSFileHandleNotificationDataItem]; }]; __block RACDisposable *subscription = [dataNotification subscribeNext:^(NSData *data) { if (data.length > 0) { [subject sendNext:data]; [self readInBackgroundAndNotify]; } else { [subject sendCompleted]; [subscription dispose]; } }]; [self readInBackgroundAndNotify]; return subject; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSIndexSet+RACSequenceAdditions.h ================================================ // // NSIndexSet+RACSequenceAdditions.h // ReactiveCocoa // // Created by Sergey Gavrilyuk on 12/17/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSequence; @interface NSIndexSet (RACSequenceAdditions) /// Creates and returns a sequence of indexes (as `NSNumber`s) corresponding to /// the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSIndexSet+RACSequenceAdditions.m ================================================ // // NSIndexSet+RACSequenceAdditions.m // ReactiveCocoa // // Created by Sergey Gavrilyuk on 12/17/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSIndexSet+RACSequenceAdditions.h" #import "RACIndexSetSequence.h" @implementation NSIndexSet (RACSequenceAdditions) - (RACSequence *)rac_sequence { return [RACIndexSetSequence sequenceWithIndexSet:self]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSInvocation+RACTypeParsing.h ================================================ // // NSInvocation+RACTypeParsing.h // ReactiveCocoa // // Created by Josh Abernathy on 11/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACTuple; // A private category of methods to handle wrapping and unwrapping of values. @interface NSInvocation (RACTypeParsing) // Sets the argument for the invocation at the given index by unboxing the given // object based on the type signature of the argument. // // This does not support C arrays or unions. // // Note that calling this on a char * or const char * argument can cause all // arguments to be retained. // // object - The object to unbox and set as the argument. // index - The index of the argument to set. - (void)rac_setArgument:(id)object atIndex:(NSUInteger)index; // Gets the argument for the invocation at the given index based on the // invocation's method signature. The value is then wrapped in the appropriate // object type. // // This does not support C arrays or unions. // // index - The index of the argument to get. // // Returns the argument of the invocation, wrapped in an object. - (id)rac_argumentAtIndex:(NSUInteger)index; // Arguments tuple for the invocation. // // The arguments tuple excludes implicit variables `self` and `_cmd`. // // See -rac_argumentAtIndex: and -rac_setArgumentAtIndex: for further // description of the underlying behavior. @property (nonatomic, copy) RACTuple *rac_argumentsTuple; // Gets the return value from the invocation based on the invocation's method // signature. The value is then wrapped in the appropriate object type. // // This does not support C arrays or unions. // // Returns the return value of the invocation, wrapped in an object. Voids are // returned as `RACUnit.defaultUnit`. - (id)rac_returnValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSInvocation+RACTypeParsing.m ================================================ // // NSInvocation+RACTypeParsing.m // ReactiveCocoa // // Created by Josh Abernathy on 11/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSInvocation+RACTypeParsing.h" #import "RACTuple.h" #import "RACUnit.h" #import @implementation NSInvocation (RACTypeParsing) - (void)rac_setArgument:(id)object atIndex:(NSUInteger)index { #define PULL_AND_SET(type, selector) \ do { \ type val = [object selector]; \ [self setArgument:&val atIndex:(NSInteger)index]; \ } while (0) const char *argType = [self.methodSignature getArgumentTypeAtIndex:index]; // Skip const type qualifier. if (argType[0] == 'r') { argType++; } if (strcmp(argType, @encode(id)) == 0 || strcmp(argType, @encode(Class)) == 0) { [self setArgument:&object atIndex:(NSInteger)index]; } else if (strcmp(argType, @encode(char)) == 0) { PULL_AND_SET(char, charValue); } else if (strcmp(argType, @encode(int)) == 0) { PULL_AND_SET(int, intValue); } else if (strcmp(argType, @encode(short)) == 0) { PULL_AND_SET(short, shortValue); } else if (strcmp(argType, @encode(long)) == 0) { PULL_AND_SET(long, longValue); } else if (strcmp(argType, @encode(long long)) == 0) { PULL_AND_SET(long long, longLongValue); } else if (strcmp(argType, @encode(unsigned char)) == 0) { PULL_AND_SET(unsigned char, unsignedCharValue); } else if (strcmp(argType, @encode(unsigned int)) == 0) { PULL_AND_SET(unsigned int, unsignedIntValue); } else if (strcmp(argType, @encode(unsigned short)) == 0) { PULL_AND_SET(unsigned short, unsignedShortValue); } else if (strcmp(argType, @encode(unsigned long)) == 0) { PULL_AND_SET(unsigned long, unsignedLongValue); } else if (strcmp(argType, @encode(unsigned long long)) == 0) { PULL_AND_SET(unsigned long long, unsignedLongLongValue); } else if (strcmp(argType, @encode(float)) == 0) { PULL_AND_SET(float, floatValue); } else if (strcmp(argType, @encode(double)) == 0) { PULL_AND_SET(double, doubleValue); } else if (strcmp(argType, @encode(BOOL)) == 0) { PULL_AND_SET(BOOL, boolValue); } else if (strcmp(argType, @encode(char *)) == 0) { const char *cString = [object UTF8String]; [self setArgument:&cString atIndex:(NSInteger)index]; [self retainArguments]; } else if (strcmp(argType, @encode(void (^)(void))) == 0) { [self setArgument:&object atIndex:(NSInteger)index]; } else { NSCParameterAssert([object isKindOfClass:NSValue.class]); NSUInteger valueSize = 0; NSGetSizeAndAlignment([object objCType], &valueSize, NULL); #if DEBUG NSUInteger argSize = 0; NSGetSizeAndAlignment(argType, &argSize, NULL); NSCAssert(valueSize == argSize, @"Value size does not match argument size in -rac_setArgument: %@ atIndex: %lu", object, (unsigned long)index); #endif unsigned char valueBytes[valueSize]; [object getValue:valueBytes]; [self setArgument:valueBytes atIndex:(NSInteger)index]; } #undef PULL_AND_SET } - (id)rac_argumentAtIndex:(NSUInteger)index { #define WRAP_AND_RETURN(type) \ do { \ type val = 0; \ [self getArgument:&val atIndex:(NSInteger)index]; \ return @(val); \ } while (0) const char *argType = [self.methodSignature getArgumentTypeAtIndex:index]; // Skip const type qualifier. if (argType[0] == 'r') { argType++; } if (strcmp(argType, @encode(id)) == 0 || strcmp(argType, @encode(Class)) == 0) { __autoreleasing id returnObj; [self getArgument:&returnObj atIndex:(NSInteger)index]; return returnObj; } else if (strcmp(argType, @encode(char)) == 0) { WRAP_AND_RETURN(char); } else if (strcmp(argType, @encode(int)) == 0) { WRAP_AND_RETURN(int); } else if (strcmp(argType, @encode(short)) == 0) { WRAP_AND_RETURN(short); } else if (strcmp(argType, @encode(long)) == 0) { WRAP_AND_RETURN(long); } else if (strcmp(argType, @encode(long long)) == 0) { WRAP_AND_RETURN(long long); } else if (strcmp(argType, @encode(unsigned char)) == 0) { WRAP_AND_RETURN(unsigned char); } else if (strcmp(argType, @encode(unsigned int)) == 0) { WRAP_AND_RETURN(unsigned int); } else if (strcmp(argType, @encode(unsigned short)) == 0) { WRAP_AND_RETURN(unsigned short); } else if (strcmp(argType, @encode(unsigned long)) == 0) { WRAP_AND_RETURN(unsigned long); } else if (strcmp(argType, @encode(unsigned long long)) == 0) { WRAP_AND_RETURN(unsigned long long); } else if (strcmp(argType, @encode(float)) == 0) { WRAP_AND_RETURN(float); } else if (strcmp(argType, @encode(double)) == 0) { WRAP_AND_RETURN(double); } else if (strcmp(argType, @encode(BOOL)) == 0) { WRAP_AND_RETURN(BOOL); } else if (strcmp(argType, @encode(char *)) == 0) { WRAP_AND_RETURN(const char *); } else if (strcmp(argType, @encode(void (^)(void))) == 0) { __unsafe_unretained id block = nil; [self getArgument:&block atIndex:(NSInteger)index]; return [block copy]; } else { NSUInteger valueSize = 0; NSGetSizeAndAlignment(argType, &valueSize, NULL); unsigned char valueBytes[valueSize]; [self getArgument:valueBytes atIndex:(NSInteger)index]; return [NSValue valueWithBytes:valueBytes objCType:argType]; } return nil; #undef WRAP_AND_RETURN } - (RACTuple *)rac_argumentsTuple { NSUInteger numberOfArguments = self.methodSignature.numberOfArguments; NSMutableArray *argumentsArray = [NSMutableArray arrayWithCapacity:numberOfArguments - 2]; for (NSUInteger index = 2; index < numberOfArguments; index++) { [argumentsArray addObject:[self rac_argumentAtIndex:index] ?: RACTupleNil.tupleNil]; } return [RACTuple tupleWithObjectsFromArray:argumentsArray]; } - (void)setRac_argumentsTuple:(RACTuple *)arguments { NSCAssert(arguments.count == self.methodSignature.numberOfArguments - 2, @"Number of supplied arguments (%lu), does not match the number expected by the signature (%lu)", (unsigned long)arguments.count, (unsigned long)self.methodSignature.numberOfArguments - 2); NSUInteger index = 2; for (id arg in arguments) { [self rac_setArgument:(arg == RACTupleNil.tupleNil ? nil : arg) atIndex:index]; index++; } } - (id)rac_returnValue { #define WRAP_AND_RETURN(type) \ do { \ type val = 0; \ [self getReturnValue:&val]; \ return @(val); \ } while (0) const char *returnType = self.methodSignature.methodReturnType; // Skip const type qualifier. if (returnType[0] == 'r') { returnType++; } if (strcmp(returnType, @encode(id)) == 0 || strcmp(returnType, @encode(Class)) == 0 || strcmp(returnType, @encode(void (^)(void))) == 0) { __autoreleasing id returnObj; [self getReturnValue:&returnObj]; return returnObj; } else if (strcmp(returnType, @encode(char)) == 0) { WRAP_AND_RETURN(char); } else if (strcmp(returnType, @encode(int)) == 0) { WRAP_AND_RETURN(int); } else if (strcmp(returnType, @encode(short)) == 0) { WRAP_AND_RETURN(short); } else if (strcmp(returnType, @encode(long)) == 0) { WRAP_AND_RETURN(long); } else if (strcmp(returnType, @encode(long long)) == 0) { WRAP_AND_RETURN(long long); } else if (strcmp(returnType, @encode(unsigned char)) == 0) { WRAP_AND_RETURN(unsigned char); } else if (strcmp(returnType, @encode(unsigned int)) == 0) { WRAP_AND_RETURN(unsigned int); } else if (strcmp(returnType, @encode(unsigned short)) == 0) { WRAP_AND_RETURN(unsigned short); } else if (strcmp(returnType, @encode(unsigned long)) == 0) { WRAP_AND_RETURN(unsigned long); } else if (strcmp(returnType, @encode(unsigned long long)) == 0) { WRAP_AND_RETURN(unsigned long long); } else if (strcmp(returnType, @encode(float)) == 0) { WRAP_AND_RETURN(float); } else if (strcmp(returnType, @encode(double)) == 0) { WRAP_AND_RETURN(double); } else if (strcmp(returnType, @encode(BOOL)) == 0) { WRAP_AND_RETURN(BOOL); } else if (strcmp(returnType, @encode(char *)) == 0) { WRAP_AND_RETURN(const char *); } else if (strcmp(returnType, @encode(void)) == 0) { return RACUnit.defaultUnit; } else { NSUInteger valueSize = 0; NSGetSizeAndAlignment(returnType, &valueSize, NULL); unsigned char valueBytes[valueSize]; [self getReturnValue:valueBytes]; return [NSValue valueWithBytes:valueBytes objCType:returnType]; } return nil; #undef WRAP_AND_RETURN } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSNotificationCenter+RACSupport.h ================================================ // // NSNotificationCenter+RACSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 5/10/12. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSignal; @interface NSNotificationCenter (RACSupport) // Sends the NSNotification every time the notification is posted. - (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSNotificationCenter+RACSupport.m ================================================ // // NSNotificationCenter+RACSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 5/10/12. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSNotificationCenter+RACSupport.h" #import #import "RACSignal.h" #import "RACSubscriber.h" #import "RACDisposable.h" @implementation NSNotificationCenter (RACSupport) - (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object { @unsafeify(object); return [[RACSignal createSignal:^(id subscriber) { @strongify(object); id observer = [self addObserverForName:notificationName object:object queue:nil usingBlock:^(NSNotification *note) { [subscriber sendNext:note]; }]; return [RACDisposable disposableWithBlock:^{ [self removeObserver:observer]; }]; }] setNameWithFormat:@"-rac_addObserverForName: %@ object: <%@: %p>", notificationName, [object class], object]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACAppKitBindings.h ================================================ // // NSObject+RACAppKitBindings.h // ReactiveCocoa // // Created by Josh Abernathy on 4/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface NSObject (RACAppKitBindings) /// Invokes -rac_channelToBinding:options: without any options. - (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding; /// Applies a Cocoa binding to the receiver, then exposes a RACChannel-based /// interface for manipulating it. /// /// Creating two of the same bindings on the same object will result in undefined /// behavior. /// /// binding - The name of the binding. This must not be nil. /// options - Any options to pass to Cocoa Bindings. This may be nil. /// /// Returns a RACChannelTerminal which will send future values from the receiver, /// and update the receiver when values are sent to the terminal. - (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding options:(NSDictionary *)options; @end @interface NSObject (RACUnavailableAppKitBindings) - (void)rac_bind:(NSString *)binding toObject:(id)object withKeyPath:(NSString *)keyPath __attribute__((unavailable("Use -rac_bind:options: instead"))); - (void)rac_bind:(NSString *)binding toObject:(id)object withKeyPath:(NSString *)keyPath nilValue:(id)nilValue __attribute__((unavailable("Use -rac_bind:options: instead"))); - (void)rac_bind:(NSString *)binding toObject:(id)object withKeyPath:(NSString *)keyPath transform:(id (^)(id value))transformBlock __attribute__((unavailable("Use -rac_bind:options: instead"))); - (void)rac_bind:(NSString *)binding toObject:(id)object withNegatedKeyPath:(NSString *)keyPath __attribute__((unavailable("Use -rac_bind:options: instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACAppKitBindings.m ================================================ // // NSObject+RACAppKitBindings.m // ReactiveCocoa // // Created by Josh Abernathy on 4/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSObject+RACAppKitBindings.h" #import #import #import "NSObject+RACDeallocating.h" #import "RACChannel.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACKVOChannel.h" #import "RACValueTransformer.h" #import // Used as an object to bind to, so we can hide the object creation and just // expose a RACChannel instead. @interface RACChannelProxy : NSObject // The RACChannel used for this Cocoa binding. @property (nonatomic, strong, readonly) RACChannel *channel; // The KVC- and KVO-compliant property to be read and written by the Cocoa // binding. // // This should not be set manually. @property (nonatomic, strong) id value; // The target of the Cocoa binding. // // This should be set to nil when the target deallocates. @property (atomic, unsafe_unretained) id target; // The name of the Cocoa binding used. @property (nonatomic, copy, readonly) NSString *bindingName; // Improves the performance of KVO on the receiver. // // See the documentation for for more information. @property (atomic, assign) void *observationInfo; // Initializes the receiver and binds to the given target. // // target - The target of the Cocoa binding. This must not be nil. // bindingName - The name of the Cocoa binding to use. This must not be nil. // options - Any options to pass to the binding. This may be nil. // // Returns an initialized channel proxy. - (id)initWithTarget:(id)target bindingName:(NSString *)bindingName options:(NSDictionary *)options; @end @implementation NSObject (RACAppKitBindings) - (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding { return [self rac_channelToBinding:binding options:nil]; } - (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding options:(NSDictionary *)options { NSCParameterAssert(binding != nil); RACChannelProxy *proxy = [[RACChannelProxy alloc] initWithTarget:self bindingName:binding options:options]; return proxy.channel.leadingTerminal; } @end @implementation RACChannelProxy #pragma mark Properties - (void)setValue:(id)value { [self willChangeValueForKey:@keypath(self.value)]; _value = value; [self didChangeValueForKey:@keypath(self.value)]; } #pragma mark Lifecycle - (id)initWithTarget:(id)target bindingName:(NSString *)bindingName options:(NSDictionary *)options { NSCParameterAssert(target != nil); NSCParameterAssert(bindingName != nil); self = [super init]; if (self == nil) return nil; _target = target; _bindingName = [bindingName copy]; _channel = [[RACChannel alloc] init]; @weakify(self); void (^cleanUp)() = ^{ @strongify(self); id target = self.target; if (target == nil) return; self.target = nil; [target unbind:bindingName]; objc_setAssociatedObject(target, (__bridge void *)self, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }; // When the channel terminates, tear down this proxy. [self.channel.followingTerminal subscribeError:^(NSError *error) { cleanUp(); } completed:cleanUp]; [self.target bind:bindingName toObject:self withKeyPath:@keypath(self.value) options:options]; // Keep the proxy alive as long as the target, or until the property subject // terminates. objc_setAssociatedObject(self.target, (__bridge void *)self, self, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [[self.target rac_deallocDisposable] addDisposable:[RACDisposable disposableWithBlock:^{ @strongify(self); [self.channel.followingTerminal sendCompleted]; }]]; RACChannelTo(self, value, options[NSNullPlaceholderBindingOption]) = self.channel.followingTerminal; return self; } - (void)dealloc { [self.channel.followingTerminal sendCompleted]; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ target: %@, binding: %@ }", self.class, self, self.target, self.bindingName]; } #pragma mark NSKeyValueObserving + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { // Generating manual notifications for `value` is simpler and more // performant than having KVO swizzle our class and add its own logic. return NO; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDeallocating.h ================================================ // // NSObject+RACDeallocating.h // ReactiveCocoa // // Created by Kazuo Koga on 2013/03/15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACCompoundDisposable; @class RACDisposable; @class RACSignal; @interface NSObject (RACDeallocating) /// The compound disposable which will be disposed of when the receiver is /// deallocated. @property (atomic, readonly, strong) RACCompoundDisposable *rac_deallocDisposable; /// Returns a signal that will complete immediately before the receiver is fully /// deallocated. If already deallocated when the signal is subscribed to, /// a `completed` event will be sent immediately. - (RACSignal *)rac_willDeallocSignal; @end @interface NSObject (RACUnavailableDeallocating) - (RACSignal *)rac_didDeallocSignal __attribute__((unavailable("Use -rac_willDeallocSignal"))); - (void)rac_addDeallocDisposable:(RACDisposable *)disposable __attribute__((unavailable("Add disposables to -rac_deallocDisposable instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDeallocating.m ================================================ // // NSObject+RACDeallocating.m // ReactiveCocoa // // Created by Kazuo Koga on 2013/03/15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSObject+RACDeallocating.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACReplaySubject.h" #import #import static const void *RACObjectCompoundDisposable = &RACObjectCompoundDisposable; static NSMutableSet *swizzledClasses() { static dispatch_once_t onceToken; static NSMutableSet *swizzledClasses = nil; dispatch_once(&onceToken, ^{ swizzledClasses = [[NSMutableSet alloc] init]; }); return swizzledClasses; } static void swizzleDeallocIfNeeded(Class classToSwizzle) { @synchronized (swizzledClasses()) { NSString *className = NSStringFromClass(classToSwizzle); if ([swizzledClasses() containsObject:className]) return; SEL deallocSelector = sel_registerName("dealloc"); __block void (*originalDealloc)(__unsafe_unretained id, SEL) = NULL; id newDealloc = ^(__unsafe_unretained id self) { RACCompoundDisposable *compoundDisposable = objc_getAssociatedObject(self, RACObjectCompoundDisposable); [compoundDisposable dispose]; if (originalDealloc == NULL) { struct objc_super superInfo = { .receiver = self, .super_class = class_getSuperclass(classToSwizzle) }; void (*msgSend)(struct objc_super *, SEL) = (__typeof__(msgSend))objc_msgSendSuper; msgSend(&superInfo, deallocSelector); } else { originalDealloc(self, deallocSelector); } }; IMP newDeallocIMP = imp_implementationWithBlock(newDealloc); if (!class_addMethod(classToSwizzle, deallocSelector, newDeallocIMP, "v@:")) { // The class already contains a method implementation. Method deallocMethod = class_getInstanceMethod(classToSwizzle, deallocSelector); // We need to store original implementation before setting new implementation // in case method is called at the time of setting. originalDealloc = (__typeof__(originalDealloc))method_getImplementation(deallocMethod); // We need to store original implementation again, in case it just changed. originalDealloc = (__typeof__(originalDealloc))method_setImplementation(deallocMethod, newDeallocIMP); } [swizzledClasses() addObject:className]; } } @implementation NSObject (RACDeallocating) - (RACSignal *)rac_willDeallocSignal { RACSignal *signal = objc_getAssociatedObject(self, _cmd); if (signal != nil) return signal; RACReplaySubject *subject = [RACReplaySubject subject]; [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ [subject sendCompleted]; }]]; objc_setAssociatedObject(self, _cmd, subject, OBJC_ASSOCIATION_RETAIN); return subject; } - (RACCompoundDisposable *)rac_deallocDisposable { @synchronized (self) { RACCompoundDisposable *compoundDisposable = objc_getAssociatedObject(self, RACObjectCompoundDisposable); if (compoundDisposable != nil) return compoundDisposable; swizzleDeallocIfNeeded(self.class); compoundDisposable = [RACCompoundDisposable compoundDisposable]; objc_setAssociatedObject(self, RACObjectCompoundDisposable, compoundDisposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return compoundDisposable; } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDescription.h ================================================ // // NSObject+RACDescription.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-05-13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import // A simplified description of the object, which does not invoke -description // (and thus should be much faster in many cases). // // This is for debugging purposes only, and will return a constant string // unless the RAC_DEBUG_SIGNAL_NAMES environment variable is set. NSString *RACDescription(id object); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDescription.m ================================================ // // NSObject+RACDescription.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-05-13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSObject+RACDescription.h" #import "RACTuple.h" @implementation NSValue (RACDescription) - (NSString *)rac_description { return self.description; } @end @implementation NSString (RACDescription) - (NSString *)rac_description { return self.description; } @end @implementation RACTuple (RACDescription) - (NSString *)rac_description { if (getenv("RAC_DEBUG_SIGNAL_NAMES") != NULL) { return self.allObjects.description; } else { return @"(description skipped)"; } } @end NSString *RACDescription(id object) { if (getenv("RAC_DEBUG_SIGNAL_NAMES") != NULL) { if ([object respondsToSelector:@selector(rac_description)]) { return [object rac_description]; } else { return [[NSString alloc] initWithFormat:@"<%@: %p>", [object class], object]; } } else { return @"(description skipped)"; } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACKVOWrapper.h ================================================ // // NSObject+RACKVOWrapper.h // ReactiveCocoa // // Created by Josh Abernathy on 10/11/11. // Copyright (c) 2011 GitHub. All rights reserved. // #import @class RACDisposable; @class RACKVOTrampoline; // A private category providing a block based interface to KVO. @interface NSObject (RACKVOWrapper) // Adds the given block as the callbacks for when the key path changes. // // Unlike direct KVO observation, this handles deallocation of `weak` properties // by generating an appropriate notification. This will only occur if there is // an `@property` declaration visible in the observed class, with the `weak` // memory management attribute. // // The observation does not need to be explicitly removed. It will be removed // when the observer or the receiver deallocate. // // keyPath - The key path to observe. Must not be nil. // options - The KVO observation options. // observer - The object that requested the observation. May be nil. // block - The block called when the value at the key path changes. It is // passed the current value of the key path and the extended KVO // change dictionary including RAC-specific keys and values. Must not // be nil. // // Returns a disposable that can be used to stop the observation. - (RACDisposable *)rac_observeKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)observer block:(void (^)(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent))block; @end typedef void (^RACKVOBlock)(id target, id observer, NSDictionary *change); @interface NSObject (RACUnavailableKVOWrapper) - (RACKVOTrampoline *)rac_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block __attribute((unavailable("Use rac_observeKeyPath:options:observer:block: instead."))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACKVOWrapper.m ================================================ // // NSObject+RACKVOWrapper.m // ReactiveCocoa // // Created by Josh Abernathy on 10/11/11. // Copyright (c) 2011 GitHub. All rights reserved. // #import "NSObject+RACKVOWrapper.h" #import #import #import "NSObject+RACDeallocating.h" #import "NSString+RACKeyPathUtilities.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACKVOTrampoline.h" #import "RACSerialDisposable.h" @implementation NSObject (RACKVOWrapper) - (RACDisposable *)rac_observeKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)weakObserver block:(void (^)(id, NSDictionary *, BOOL, BOOL))block { NSCParameterAssert(block != nil); NSCParameterAssert(keyPath.rac_keyPathComponents.count > 0); keyPath = [keyPath copy]; NSObject *strongObserver = weakObserver; NSArray *keyPathComponents = keyPath.rac_keyPathComponents; BOOL keyPathHasOneComponent = (keyPathComponents.count == 1); NSString *keyPathHead = keyPathComponents[0]; NSString *keyPathTail = keyPath.rac_keyPathByDeletingFirstKeyPathComponent; RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; // The disposable that groups all disposal necessary to clean up the callbacks // added to the value of the first key path component. RACSerialDisposable *firstComponentSerialDisposable = [RACSerialDisposable serialDisposableWithDisposable:[RACCompoundDisposable compoundDisposable]]; RACCompoundDisposable * (^firstComponentDisposable)(void) = ^{ return (RACCompoundDisposable *)firstComponentSerialDisposable.disposable; }; [disposable addDisposable:firstComponentSerialDisposable]; BOOL shouldAddDeallocObserver = NO; objc_property_t property = class_getProperty(object_getClass(self), keyPathHead.UTF8String); if (property != NULL) { rac_propertyAttributes *attributes = rac_copyPropertyAttributes(property); if (attributes != NULL) { @onExit { free(attributes); }; BOOL isObject = attributes->objectClass != nil || strstr(attributes->type, @encode(id)) == attributes->type; BOOL isProtocol = attributes->objectClass == NSClassFromString(@"Protocol"); BOOL isBlock = strcmp(attributes->type, @encode(void(^)())) == 0; BOOL isWeak = attributes->weak; // If this property isn't actually an object (or is a Class object), // no point in observing the deallocation of the wrapper returned by // KVC. // // If this property is an object, but not declared `weak`, we // don't need to watch for it spontaneously being set to nil. // // Attempting to observe non-weak properties will result in // broken behavior for dynamic getters, so don't even try. shouldAddDeallocObserver = isObject && isWeak && !isBlock && !isProtocol; } } // Adds the callback block to the value's deallocation. Also adds the logic to // clean up the callback to the firstComponentDisposable. void (^addDeallocObserverToPropertyValue)(NSObject *) = ^(NSObject *value) { if (!shouldAddDeallocObserver) return; // If a key path value is the observer, commonly when a key path begins // with "self", we prevent deallocation triggered callbacks for any such key // path components. Thus, the observer's deallocation is not considered a // change to the key path. if (value == weakObserver) return; NSDictionary *change = @{ NSKeyValueChangeKindKey: @(NSKeyValueChangeSetting), NSKeyValueChangeNewKey: NSNull.null, }; RACCompoundDisposable *valueDisposable = value.rac_deallocDisposable; RACDisposable *deallocDisposable = [RACDisposable disposableWithBlock:^{ block(nil, change, YES, keyPathHasOneComponent); }]; [valueDisposable addDisposable:deallocDisposable]; [firstComponentDisposable() addDisposable:[RACDisposable disposableWithBlock:^{ [valueDisposable removeDisposable:deallocDisposable]; }]]; }; // Adds the callback block to the remaining path components on the value. Also // adds the logic to clean up the callbacks to the firstComponentDisposable. void (^addObserverToValue)(NSObject *) = ^(NSObject *value) { RACDisposable *observerDisposable = [value rac_observeKeyPath:keyPathTail options:(options & ~NSKeyValueObservingOptionInitial) observer:weakObserver block:block]; [firstComponentDisposable() addDisposable:observerDisposable]; }; // Observe only the first key path component, when the value changes clean up // the callbacks on the old value, add callbacks to the new value and call the // callback block as needed. // // Note this does not use NSKeyValueObservingOptionInitial so this only // handles changes to the value, callbacks to the initial value must be added // separately. NSKeyValueObservingOptions trampolineOptions = (options | NSKeyValueObservingOptionPrior) & ~NSKeyValueObservingOptionInitial; RACKVOTrampoline *trampoline = [[RACKVOTrampoline alloc] initWithTarget:self observer:strongObserver keyPath:keyPathHead options:trampolineOptions block:^(id trampolineTarget, id trampolineObserver, NSDictionary *change) { // If this is a prior notification, clean up all the callbacks added to the // previous value and call the callback block. Everything else is deferred // until after we get the notification after the change. if ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) { [firstComponentDisposable() dispose]; if ((options & NSKeyValueObservingOptionPrior) != 0) { block([trampolineTarget valueForKeyPath:keyPath], change, NO, keyPathHasOneComponent); } return; } // From here the notification is not prior. NSObject *value = [trampolineTarget valueForKey:keyPathHead]; // If the value has changed but is nil, there is no need to add callbacks to // it, just call the callback block. if (value == nil) { block(nil, change, NO, keyPathHasOneComponent); return; } // From here the notification is not prior and the value is not nil. // Create a new firstComponentDisposable while getting rid of the old one at // the same time, in case this is being called concurrently. RACDisposable *oldFirstComponentDisposable = [firstComponentSerialDisposable swapInDisposable:[RACCompoundDisposable compoundDisposable]]; [oldFirstComponentDisposable dispose]; addDeallocObserverToPropertyValue(value); // If there are no further key path components, there is no need to add the // other callbacks, just call the callback block with the value itself. if (keyPathHasOneComponent) { block(value, change, NO, keyPathHasOneComponent); return; } // The value has changed, is not nil, and there are more key path components // to consider. Add the callbacks to the value for the remaining key path // components and call the callback block with the current value of the full // key path. addObserverToValue(value); block([value valueForKeyPath:keyPathTail], change, NO, keyPathHasOneComponent); }]; // Stop the KVO observation when this one is disposed of. [disposable addDisposable:trampoline]; // Add the callbacks to the initial value if needed. NSObject *value = [self valueForKey:keyPathHead]; if (value != nil) { addDeallocObserverToPropertyValue(value); if (!keyPathHasOneComponent) { addObserverToValue(value); } } // Call the block with the initial value if needed. if ((options & NSKeyValueObservingOptionInitial) != 0) { id initialValue = [self valueForKeyPath:keyPath]; NSDictionary *initialChange = @{ NSKeyValueChangeKindKey: @(NSKeyValueChangeSetting), NSKeyValueChangeNewKey: initialValue ?: NSNull.null, }; block(initialValue, initialChange, NO, keyPathHasOneComponent); } RACCompoundDisposable *observerDisposable = strongObserver.rac_deallocDisposable; RACCompoundDisposable *selfDisposable = self.rac_deallocDisposable; // Dispose of this observation if the receiver or the observer deallocate. [observerDisposable addDisposable:disposable]; [selfDisposable addDisposable:disposable]; return [RACDisposable disposableWithBlock:^{ [disposable dispose]; [observerDisposable removeDisposable:disposable]; [selfDisposable removeDisposable:disposable]; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACLifting.h ================================================ // // NSObject+RACLifting.h // ReactiveCocoa // // Created by Josh Abernathy on 10/13/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACSignal; @interface NSObject (RACLifting) /// Lifts the selector on the receiver into the reactive world. The selector will /// be invoked whenever any signal argument sends a value, but only after each /// signal has sent an initial value. /// /// It will replay the most recently sent value to new subscribers. /// /// This does not support C arrays or unions. /// /// selector - The selector on self to invoke. /// firstSignal - The signal corresponding to the first method argument. This /// must not be nil. /// ... - A list of RACSignals corresponding to the remaining arguments. /// There must be a non-nil signal for each method argument. /// /// Examples /// /// [button rac_liftSelector:@selector(setTitleColor:forState:) withSignals:textColorSignal, [RACSignal return:@(UIControlStateNormal)], nil]; /// /// Returns a signal which sends the return value from each invocation of the /// selector. If the selector returns void, it instead sends RACUnit.defaultUnit. /// It completes only after all the signal arguments complete. - (RACSignal *)rac_liftSelector:(SEL)selector withSignals:(RACSignal *)firstSignal, ... NS_REQUIRES_NIL_TERMINATION; /// Like -rac_liftSelector:withSignals:, but accepts an array instead of /// a variadic list of arguments. - (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals; /// Like -rac_liftSelector:withSignals:, but accepts a signal sending tuples of /// arguments instead of a variadic list of arguments. - (RACSignal *)rac_liftSelector:(SEL)selector withSignalOfArguments:(RACSignal *)arguments; @end @interface NSObject (RACUnavailableLifting) - (RACSignal *)rac_liftSelector:(SEL)selector withObjects:(id)arg, ... __attribute__((unavailable("Use -rac_liftSelector:withSignals: instead"))); - (RACSignal *)rac_liftSelector:(SEL)selector withObjectsFromArray:(NSArray *)args __attribute__((unavailable("Use -rac_liftSelector:withSignalsFromArray: instead"))); - (RACSignal *)rac_liftBlock:(id)block withArguments:(id)arg, ... NS_REQUIRES_NIL_TERMINATION __attribute__((unavailable("Use +combineLatest:reduce: instead"))); - (RACSignal *)rac_liftBlock:(id)block withArgumentsFromArray:(NSArray *)args __attribute__((unavailable("Use +combineLatest:reduce: instead"))); - (instancetype)rac_lift __attribute__((unavailable("Use -rac_liftSelector:withSignals: instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACLifting.m ================================================ // // NSObject+RACLifting.m // ReactiveCocoa // // Created by Josh Abernathy on 10/13/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSObject+RACLifting.h" #import #import "NSInvocation+RACTypeParsing.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "RACSignal+Operations.h" #import "RACTuple.h" @implementation NSObject (RACLifting) - (RACSignal *)rac_liftSelector:(SEL)selector withSignalOfArguments:(RACSignal *)arguments { NSCParameterAssert(selector != NULL); NSCParameterAssert(arguments != nil); @unsafeify(self); NSMethodSignature *methodSignature = [self methodSignatureForSelector:selector]; NSCAssert(methodSignature != nil, @"%@ does not respond to %@", self, NSStringFromSelector(selector)); return [[[[arguments takeUntil:self.rac_willDeallocSignal] map:^(RACTuple *arguments) { @strongify(self); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; invocation.selector = selector; invocation.rac_argumentsTuple = arguments; [invocation invokeWithTarget:self]; return invocation.rac_returnValue; }] replayLast] setNameWithFormat:@"%@ -rac_liftSelector: %s withSignalsOfArguments: %@", RACDescription(self), sel_getName(selector), arguments]; } - (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals { NSCParameterAssert(signals != nil); NSCParameterAssert(signals.count > 0); NSMethodSignature *methodSignature = [self methodSignatureForSelector:selector]; NSCAssert(methodSignature != nil, @"%@ does not respond to %@", self, NSStringFromSelector(selector)); NSUInteger numberOfArguments __attribute__((unused)) = methodSignature.numberOfArguments - 2; NSCAssert(numberOfArguments == signals.count, @"Wrong number of signals for %@ (expected %lu, got %lu)", NSStringFromSelector(selector), (unsigned long)numberOfArguments, (unsigned long)signals.count); return [[self rac_liftSelector:selector withSignalOfArguments:[RACSignal combineLatest:signals]] setNameWithFormat:@"%@ -rac_liftSelector: %s withSignalsFromArray: %@", RACDescription(self), sel_getName(selector), signals]; } - (RACSignal *)rac_liftSelector:(SEL)selector withSignals:(RACSignal *)firstSignal, ... { NSCParameterAssert(firstSignal != nil); NSMutableArray *signals = [NSMutableArray array]; va_list args; va_start(args, firstSignal); for (id currentSignal = firstSignal; currentSignal != nil; currentSignal = va_arg(args, id)) { NSCAssert([currentSignal isKindOfClass:RACSignal.class], @"Argument %@ is not a RACSignal", currentSignal); [signals addObject:currentSignal]; } va_end(args); return [[self rac_liftSelector:selector withSignalsFromArray:signals] setNameWithFormat:@"%@ -rac_liftSelector: %s withSignals: %@", RACDescription(self), sel_getName(selector), signals]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACPropertySubscribing.h ================================================ // // NSObject+RACPropertySubscribing.h // ReactiveCocoa // // Created by Josh Abernathy on 3/2/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "metamacros.h" /// Creates a signal which observes `KEYPATH` on `TARGET` for changes. /// /// In either case, the observation continues until `TARGET` _or self_ is /// deallocated. If any intermediate object is deallocated instead, it will be /// assumed to have been set to nil. /// /// Make sure to `@strongify(self)` when using this macro within a block! The /// macro will _always_ reference `self`, which can silently introduce a retain /// cycle within a block. As a result, you should make sure that `self` is a weak /// reference (e.g., created by `@weakify` and `@strongify`) before the /// expression that uses `RACObserve`. /// /// Examples /// /// // Observes self, and doesn't stop until self is deallocated. /// RACSignal *selfSignal = RACObserve(self, arrayController.items); /// /// // Observes the array controller, and stops when self _or_ the array /// // controller is deallocated. /// RACSignal *arrayControllerSignal = RACObserve(self.arrayController, items); /// /// // Observes obj.arrayController, and stops when self _or_ the array /// // controller is deallocated. /// RACSignal *signal2 = RACObserve(obj.arrayController, items); /// /// @weakify(self); /// RACSignal *signal3 = [anotherSignal flattenMap:^(NSArrayController *arrayController) { /// // Avoids a retain cycle because of RACObserve implicitly referencing /// // self. /// @strongify(self); /// return RACObserve(arrayController, items); /// }]; /// /// Returns a signal which sends the current value of the key path on /// subscription, then sends the new value every time it changes, and sends /// completed if self or observer is deallocated. #define RACObserve(TARGET, KEYPATH) \ ({ \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wreceiver-is-weak\"") \ __weak id target_ = (TARGET); \ [target_ rac_valuesForKeyPath:@keypath(TARGET, KEYPATH) observer:self]; \ _Pragma("clang diagnostic pop") \ }) @class RACDisposable; @class RACSignal; @interface NSObject (RACPropertySubscribing) /// Creates a signal to observe the value at the given key path. /// /// The initial value is sent on subscription, the subsequent values are sent /// from whichever thread the change occured on, even if it doesn't have a valid /// scheduler. /// /// Returns a signal that immediately sends the receiver's current value at the /// given keypath, then any changes thereafter. #if OS_OBJECT_HAVE_OBJC_SUPPORT - (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(__weak NSObject *)observer; #else // Swift builds with OS_OBJECT_HAVE_OBJC_SUPPORT=0 for Playgrounds and LLDB :( - (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(NSObject *)observer; #endif /// Creates a signal to observe the changes of the given key path. /// /// The initial value is sent on subscription if `NSKeyValueObservingOptionInitial` is set. /// The subsequent values are sent from whichever thread the change occured on, /// even if it doesn't have a valid scheduler. /// /// Returns a signal that sends tuples containing the current value at the key /// path and the change dictionary for each KVO callback. #if OS_OBJECT_HAVE_OBJC_SUPPORT - (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)observer; #else - (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer; #endif @end #define RACAble(...) \ metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ (_RACAbleObject(self, __VA_ARGS__)) \ (_RACAbleObject(__VA_ARGS__)) #define _RACAbleObject(object, property) [object rac_signalForKeyPath:@keypath(object, property) observer:self] #define RACAbleWithStart(...) \ metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ (_RACAbleWithStartObject(self, __VA_ARGS__)) \ (_RACAbleWithStartObject(__VA_ARGS__)) #define _RACAbleWithStartObject(object, property) [object rac_signalWithStartingValueForKeyPath:@keypath(object, property) observer:self] @interface NSObject (RACUnavailablePropertySubscribing) + (RACSignal *)rac_signalFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); + (RACSignal *)rac_signalWithStartingValueFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); + (RACSignal *)rac_signalWithChangesFor:(NSObject *)object keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer __attribute__((unavailable("Use -rac_valuesAndChangesForKeyPath:options:observer: instead."))); - (RACSignal *)rac_signalForKeyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); - (RACSignal *)rac_signalWithStartingValueForKeyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); - (RACDisposable *)rac_deriveProperty:(NSString *)keyPath from:(RACSignal *)signal __attribute__((unavailable("Use -[RACSignal setKeyPath:onObject:] instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACPropertySubscribing.m ================================================ // // NSObject+RACPropertySubscribing.m // ReactiveCocoa // // Created by Josh Abernathy on 3/2/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSObject+RACPropertySubscribing.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "NSObject+RACKVOWrapper.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACKVOTrampoline.h" #import "RACSubscriber.h" #import "RACSignal+Operations.h" #import "RACTuple.h" #import @implementation NSObject (RACPropertySubscribing) - (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(__weak NSObject *)observer { return [[[self rac_valuesAndChangesForKeyPath:keyPath options:NSKeyValueObservingOptionInitial observer:observer] map:^(RACTuple *value) { // -map: because it doesn't require the block trampoline that -reduceEach: uses return value[0]; }] setNameWithFormat:@"RACObserve(%@, %@)", RACDescription(self), keyPath]; } - (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)weakObserver { NSObject *strongObserver = weakObserver; keyPath = [keyPath copy]; NSRecursiveLock *objectLock = [[NSRecursiveLock alloc] init]; objectLock.name = @"org.reactivecocoa.ReactiveCocoa.NSObjectRACPropertySubscribing"; __weak NSObject *weakSelf = self; RACSignal *deallocSignal = [[RACSignal zip:@[ self.rac_willDeallocSignal, strongObserver.rac_willDeallocSignal ?: [RACSignal never] ]] doCompleted:^{ // Forces deallocation to wait if the object variables are currently // being read on another thread. [objectLock lock]; @onExit { [objectLock unlock]; }; }]; return [[[RACSignal createSignal:^ RACDisposable * (id subscriber) { // Hold onto the lock the whole time we're setting up the KVO // observation, because any resurrection that might be caused by our // retaining below must be balanced out by the time -dealloc returns // (if another thread is waiting on the lock above). [objectLock lock]; @onExit { [objectLock unlock]; }; __strong NSObject *observer __attribute__((objc_precise_lifetime)) = weakObserver; __strong NSObject *self __attribute__((objc_precise_lifetime)) = weakSelf; if (self == nil) { [subscriber sendCompleted]; return nil; } return [self rac_observeKeyPath:keyPath options:options observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { [subscriber sendNext:RACTuplePack(value, change)]; }]; }] takeUntil:deallocSignal] setNameWithFormat:@"%@ -rac_valueAndChangesForKeyPath: %@ options: %lu observer: %@", RACDescription(self), keyPath, (unsigned long)options, RACDescription(strongObserver)]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACSelectorSignal.h ================================================ // // NSObject+RACSelectorSignal.h // ReactiveCocoa // // Created by Josh Abernathy on 3/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; /// The domain for any errors originating from -rac_signalForSelector:. extern NSString * const RACSelectorSignalErrorDomain; /// -rac_signalForSelector: was going to add a new method implementation for /// `selector`, but another thread added an implementation before it was able to. /// /// This will _not_ occur for cases where a method implementation exists before /// -rac_signalForSelector: is invoked. extern const NSInteger RACSelectorSignalErrorMethodSwizzlingRace; @interface NSObject (RACSelectorSignal) /// Creates a signal associated with the receiver, which will send a tuple of the /// method's arguments each time the given selector is invoked. /// /// If the selector is already implemented on the receiver, the existing /// implementation will be invoked _before_ the signal fires. /// /// If the selector is not yet implemented on the receiver, the injected /// implementation will have a `void` return type and accept only object /// arguments. Invoking the added implementation with non-object values, or /// expecting a return value, will result in undefined behavior. /// /// This is useful for changing an event or delegate callback into a signal. For /// example, on an NSView: /// /// [[view rac_signalForSelector:@selector(mouseDown:)] subscribeNext:^(RACTuple *args) { /// NSEvent *event = args.first; /// NSLog(@"mouse button pressed: %@", event); /// }]; /// /// selector - The selector for whose invocations are to be observed. If it /// doesn't exist, it will be implemented to accept object arguments /// and return void. This cannot have C arrays or unions as arguments /// or C arrays, unions, structs, complex or vector types as return /// type. /// /// Returns a signal which will send a tuple of arguments upon each invocation of /// the selector, then completes when the receiver is deallocated. `next` events /// will be sent synchronously from the thread that invoked the method. If /// a runtime call fails, the signal will send an error in the /// RACSelectorSignalErrorDomain. - (RACSignal *)rac_signalForSelector:(SEL)selector; /// Behaves like -rac_signalForSelector:, but if the selector is not yet /// implemented on the receiver, its method signature is looked up within /// `protocol`, and may accept non-object arguments. /// /// If the selector is not yet implemented and has a return value, the injected /// method will return all zero bits (equal to `nil`, `NULL`, 0, 0.0f, etc.). /// /// selector - The selector for whose invocations are to be observed. If it /// doesn't exist, it will be implemented using information from /// `protocol`, and may accept non-object arguments and return /// a value. This cannot have C arrays or unions as arguments or /// return type. /// protocol - The protocol in which `selector` is declared. This will be used /// for type information if the selector is not already implemented on /// the receiver. This must not be `NULL`, and `selector` must exist /// in this protocol. /// /// Returns a signal which will send a tuple of arguments on each invocation of /// the selector, or an error in RACSelectorSignalErrorDomain if a runtime /// call fails. - (RACSignal *)rac_signalForSelector:(SEL)selector fromProtocol:(Protocol *)protocol; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACSelectorSignal.m ================================================ // // NSObject+RACSelectorSignal.m // ReactiveCocoa // // Created by Josh Abernathy on 3/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSObject+RACSelectorSignal.h" #import #import "NSInvocation+RACTypeParsing.h" #import "NSObject+RACDeallocating.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSubject.h" #import "RACTuple.h" #import "NSObject+RACDescription.h" #import #import NSString * const RACSelectorSignalErrorDomain = @"RACSelectorSignalErrorDomain"; const NSInteger RACSelectorSignalErrorMethodSwizzlingRace = 1; static NSString * const RACSignalForSelectorAliasPrefix = @"rac_alias_"; static NSString * const RACSubclassSuffix = @"_RACSelectorSignal"; static void *RACSubclassAssociationKey = &RACSubclassAssociationKey; static NSMutableSet *swizzledClasses() { static NSMutableSet *set; static dispatch_once_t pred; dispatch_once(&pred, ^{ set = [[NSMutableSet alloc] init]; }); return set; } @implementation NSObject (RACSelectorSignal) static BOOL RACForwardInvocation(id self, NSInvocation *invocation) { SEL aliasSelector = RACAliasForSelector(invocation.selector); RACSubject *subject = objc_getAssociatedObject(self, aliasSelector); Class class = object_getClass(invocation.target); BOOL respondsToAlias = [class instancesRespondToSelector:aliasSelector]; if (respondsToAlias) { invocation.selector = aliasSelector; [invocation invoke]; } if (subject == nil) return respondsToAlias; [subject sendNext:invocation.rac_argumentsTuple]; return YES; } static void RACSwizzleForwardInvocation(Class class) { SEL forwardInvocationSEL = @selector(forwardInvocation:); Method forwardInvocationMethod = class_getInstanceMethod(class, forwardInvocationSEL); // Preserve any existing implementation of -forwardInvocation:. void (*originalForwardInvocation)(id, SEL, NSInvocation *) = NULL; if (forwardInvocationMethod != NULL) { originalForwardInvocation = (__typeof__(originalForwardInvocation))method_getImplementation(forwardInvocationMethod); } // Set up a new version of -forwardInvocation:. // // If the selector has been passed to -rac_signalForSelector:, invoke // the aliased method, and forward the arguments to any attached signals. // // If the selector has not been passed to -rac_signalForSelector:, // invoke any existing implementation of -forwardInvocation:. If there // was no existing implementation, throw an unrecognized selector // exception. id newForwardInvocation = ^(id self, NSInvocation *invocation) { BOOL matched = RACForwardInvocation(self, invocation); if (matched) return; if (originalForwardInvocation == NULL) { [self doesNotRecognizeSelector:invocation.selector]; } else { originalForwardInvocation(self, forwardInvocationSEL, invocation); } }; class_replaceMethod(class, forwardInvocationSEL, imp_implementationWithBlock(newForwardInvocation), "v@:@"); } static void RACSwizzleRespondsToSelector(Class class) { SEL respondsToSelectorSEL = @selector(respondsToSelector:); // Preserve existing implementation of -respondsToSelector:. Method respondsToSelectorMethod = class_getInstanceMethod(class, respondsToSelectorSEL); BOOL (*originalRespondsToSelector)(id, SEL, SEL) = (__typeof__(originalRespondsToSelector))method_getImplementation(respondsToSelectorMethod); // Set up a new version of -respondsToSelector: that returns YES for methods // added by -rac_signalForSelector:. // // If the selector has a method defined on the receiver's actual class, and // if that method's implementation is _objc_msgForward, then returns whether // the instance has a signal for the selector. // Otherwise, call the original -respondsToSelector:. id newRespondsToSelector = ^ BOOL (id self, SEL selector) { Method method = rac_getImmediateInstanceMethod(class, selector); if (method != NULL && method_getImplementation(method) == _objc_msgForward) { SEL aliasSelector = RACAliasForSelector(selector); if (objc_getAssociatedObject(self, aliasSelector) != nil) return YES; } return originalRespondsToSelector(self, respondsToSelectorSEL, selector); }; class_replaceMethod(class, respondsToSelectorSEL, imp_implementationWithBlock(newRespondsToSelector), method_getTypeEncoding(respondsToSelectorMethod)); } static void RACSwizzleGetClass(Class class, Class statedClass) { SEL selector = @selector(class); Method method = class_getInstanceMethod(class, selector); IMP newIMP = imp_implementationWithBlock(^(id self) { return statedClass; }); class_replaceMethod(class, selector, newIMP, method_getTypeEncoding(method)); } static void RACSwizzleMethodSignatureForSelector(Class class) { IMP newIMP = imp_implementationWithBlock(^(id self, SEL selector) { // Don't send the -class message to the receiver because we've changed // that to return the original class. Class actualClass = object_getClass(self); Method method = class_getInstanceMethod(actualClass, selector); if (method == NULL) { // Messages that the original class dynamically implements fall // here. // // Call the original class' -methodSignatureForSelector:. struct objc_super target = { .super_class = class_getSuperclass(class), .receiver = self, }; NSMethodSignature * (*messageSend)(struct objc_super *, SEL, SEL) = (__typeof__(messageSend))objc_msgSendSuper; return messageSend(&target, @selector(methodSignatureForSelector:), selector); } char const *encoding = method_getTypeEncoding(method); return [NSMethodSignature signatureWithObjCTypes:encoding]; }); SEL selector = @selector(methodSignatureForSelector:); Method methodSignatureForSelectorMethod = class_getInstanceMethod(class, selector); class_replaceMethod(class, selector, newIMP, method_getTypeEncoding(methodSignatureForSelectorMethod)); } // It's hard to tell which struct return types use _objc_msgForward, and // which use _objc_msgForward_stret instead, so just exclude all struct, array, // union, complex and vector return types. static void RACCheckTypeEncoding(const char *typeEncoding) { #if !NS_BLOCK_ASSERTIONS // Some types, including vector types, are not encoded. In these cases the // signature starts with the size of the argument frame. NSCAssert(*typeEncoding < '1' || *typeEncoding > '9', @"unknown method return type not supported in type encoding: %s", typeEncoding); NSCAssert(strstr(typeEncoding, "(") != typeEncoding, @"union method return type not supported"); NSCAssert(strstr(typeEncoding, "{") != typeEncoding, @"struct method return type not supported"); NSCAssert(strstr(typeEncoding, "[") != typeEncoding, @"array method return type not supported"); NSCAssert(strstr(typeEncoding, @encode(_Complex float)) != typeEncoding, @"complex float method return type not supported"); NSCAssert(strstr(typeEncoding, @encode(_Complex double)) != typeEncoding, @"complex double method return type not supported"); NSCAssert(strstr(typeEncoding, @encode(_Complex long double)) != typeEncoding, @"complex long double method return type not supported"); #endif // !NS_BLOCK_ASSERTIONS } static RACSignal *NSObjectRACSignalForSelector(NSObject *self, SEL selector, Protocol *protocol) { SEL aliasSelector = RACAliasForSelector(selector); @synchronized (self) { RACSubject *subject = objc_getAssociatedObject(self, aliasSelector); if (subject != nil) return subject; Class class = RACSwizzleClass(self); NSCAssert(class != nil, @"Could not swizzle class of %@", self); subject = [[RACSubject subject] setNameWithFormat:@"%@ -rac_signalForSelector: %s", RACDescription(self), sel_getName(selector)]; objc_setAssociatedObject(self, aliasSelector, subject, OBJC_ASSOCIATION_RETAIN); [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ [subject sendCompleted]; }]]; Method targetMethod = class_getInstanceMethod(class, selector); if (targetMethod == NULL) { const char *typeEncoding; if (protocol == NULL) { typeEncoding = RACSignatureForUndefinedSelector(selector); } else { // Look for the selector as an optional instance method. struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); if (methodDescription.name == NULL) { // Then fall back to looking for a required instance // method. methodDescription = protocol_getMethodDescription(protocol, selector, YES, YES); NSCAssert(methodDescription.name != NULL, @"Selector %@ does not exist in <%s>", NSStringFromSelector(selector), protocol_getName(protocol)); } typeEncoding = methodDescription.types; } RACCheckTypeEncoding(typeEncoding); // Define the selector to call -forwardInvocation:. if (!class_addMethod(class, selector, _objc_msgForward, typeEncoding)) { NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedString(@"A race condition occurred implementing %@ on class %@", nil), NSStringFromSelector(selector), class], NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Invoke -rac_signalForSelector: again to override the implementation.", nil) }; return [RACSignal error:[NSError errorWithDomain:RACSelectorSignalErrorDomain code:RACSelectorSignalErrorMethodSwizzlingRace userInfo:userInfo]]; } } else if (method_getImplementation(targetMethod) != _objc_msgForward) { // Make a method alias for the existing method implementation. const char *typeEncoding = method_getTypeEncoding(targetMethod); RACCheckTypeEncoding(typeEncoding); BOOL addedAlias __attribute__((unused)) = class_addMethod(class, aliasSelector, method_getImplementation(targetMethod), typeEncoding); NSCAssert(addedAlias, @"Original implementation for %@ is already copied to %@ on %@", NSStringFromSelector(selector), NSStringFromSelector(aliasSelector), class); // Redefine the selector to call -forwardInvocation:. class_replaceMethod(class, selector, _objc_msgForward, method_getTypeEncoding(targetMethod)); } return subject; } } static SEL RACAliasForSelector(SEL originalSelector) { NSString *selectorName = NSStringFromSelector(originalSelector); return NSSelectorFromString([RACSignalForSelectorAliasPrefix stringByAppendingString:selectorName]); } static const char *RACSignatureForUndefinedSelector(SEL selector) { const char *name = sel_getName(selector); NSMutableString *signature = [NSMutableString stringWithString:@"v@:"]; while ((name = strchr(name, ':')) != NULL) { [signature appendString:@"@"]; name++; } return signature.UTF8String; } static Class RACSwizzleClass(NSObject *self) { Class statedClass = self.class; Class baseClass = object_getClass(self); // The "known dynamic subclass" is the subclass generated by RAC. // It's stored as an associated object on every instance that's already // been swizzled, so that even if something else swizzles the class of // this instance, we can still access the RAC generated subclass. Class knownDynamicSubclass = objc_getAssociatedObject(self, RACSubclassAssociationKey); if (knownDynamicSubclass != Nil) return knownDynamicSubclass; NSString *className = NSStringFromClass(baseClass); if (statedClass != baseClass) { // If the class is already lying about what it is, it's probably a KVO // dynamic subclass or something else that we shouldn't subclass // ourselves. // // Just swizzle -forwardInvocation: in-place. Since the object's class // was almost certainly dynamically changed, we shouldn't see another of // these classes in the hierarchy. // // Additionally, swizzle -respondsToSelector: because the default // implementation may be ignorant of methods added to this class. @synchronized (swizzledClasses()) { if (![swizzledClasses() containsObject:className]) { RACSwizzleForwardInvocation(baseClass); RACSwizzleRespondsToSelector(baseClass); RACSwizzleGetClass(baseClass, statedClass); RACSwizzleGetClass(object_getClass(baseClass), statedClass); RACSwizzleMethodSignatureForSelector(baseClass); [swizzledClasses() addObject:className]; } } return baseClass; } const char *subclassName = [className stringByAppendingString:RACSubclassSuffix].UTF8String; Class subclass = objc_getClass(subclassName); if (subclass == nil) { subclass = objc_allocateClassPair(baseClass, subclassName, 0); if (subclass == nil) return nil; RACSwizzleForwardInvocation(subclass); RACSwizzleRespondsToSelector(subclass); RACSwizzleGetClass(subclass, statedClass); RACSwizzleGetClass(object_getClass(subclass), statedClass); RACSwizzleMethodSignatureForSelector(subclass); objc_registerClassPair(subclass); } object_setClass(self, subclass); objc_setAssociatedObject(self, RACSubclassAssociationKey, subclass, OBJC_ASSOCIATION_ASSIGN); return subclass; } - (RACSignal *)rac_signalForSelector:(SEL)selector { NSCParameterAssert(selector != NULL); return NSObjectRACSignalForSelector(self, selector, NULL); } - (RACSignal *)rac_signalForSelector:(SEL)selector fromProtocol:(Protocol *)protocol { NSCParameterAssert(selector != NULL); NSCParameterAssert(protocol != NULL); return NSObjectRACSignalForSelector(self, selector, protocol); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSOrderedSet+RACSequenceAdditions.h ================================================ // // NSOrderedSet+RACSequenceAdditions.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSequence; @interface NSOrderedSet (RACSequenceAdditions) /// Creates and returns a sequence corresponding to the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSOrderedSet+RACSequenceAdditions.m ================================================ // // NSOrderedSet+RACSequenceAdditions.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSOrderedSet+RACSequenceAdditions.h" #import "NSArray+RACSequenceAdditions.h" @implementation NSOrderedSet (RACSequenceAdditions) - (RACSequence *)rac_sequence { // TODO: First class support for ordered set sequences. return self.array.rac_sequence; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSSet+RACSequenceAdditions.h ================================================ // // NSSet+RACSequenceAdditions.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSequence; @interface NSSet (RACSequenceAdditions) /// Creates and returns a sequence corresponding to the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSSet+RACSequenceAdditions.m ================================================ // // NSSet+RACSequenceAdditions.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSSet+RACSequenceAdditions.h" #import "NSArray+RACSequenceAdditions.h" @implementation NSSet (RACSequenceAdditions) - (RACSequence *)rac_sequence { // TODO: First class support for set sequences. return self.allObjects.rac_sequence; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACKeyPathUtilities.h ================================================ // // NSString+RACKeyPathUtilities.h // ReactiveCocoa // // Created by Uri Baghin on 05/05/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import // A private category of methods to extract parts of a key path. @interface NSString (RACKeyPathUtilities) // Returns an array of the components of the receiver. // // Calling this method on a string that isn't a key path is considered undefined // behavior. - (NSArray *)rac_keyPathComponents; // Returns a key path with all the components of the receiver except for the // last one. // // Calling this method on a string that isn't a key path is considered undefined // behavior. - (NSString *)rac_keyPathByDeletingLastKeyPathComponent; // Returns a key path with all the components of the receiver expect for the // first one. // // Calling this method on a string that isn't a key path is considered undefined // behavior. - (NSString *)rac_keyPathByDeletingFirstKeyPathComponent; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACKeyPathUtilities.m ================================================ // // NSString+RACKeyPathUtilities.m // ReactiveCocoa // // Created by Uri Baghin on 05/05/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSString+RACKeyPathUtilities.h" @implementation NSString (RACKeyPathUtilities) - (NSArray *)rac_keyPathComponents { if (self.length == 0) { return nil; } return [self componentsSeparatedByString:@"."]; } - (NSString *)rac_keyPathByDeletingLastKeyPathComponent { NSUInteger lastDotIndex = [self rangeOfString:@"." options:NSBackwardsSearch].location; if (lastDotIndex == NSNotFound) { return nil; } return [self substringToIndex:lastDotIndex]; } - (NSString *)rac_keyPathByDeletingFirstKeyPathComponent { NSUInteger firstDotIndex = [self rangeOfString:@"."].location; if (firstDotIndex == NSNotFound) { return nil; } return [self substringFromIndex:firstDotIndex + 1]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSequenceAdditions.h ================================================ // // NSString+RACSequenceAdditions.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import @class RACSequence; @interface NSString (RACSequenceAdditions) /// Creates and returns a sequence containing strings corresponding to each /// composed character sequence in the receiver. /// /// Mutating the receiver will not affect the sequence after it's been created. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSequenceAdditions.m ================================================ // // NSString+RACSequenceAdditions.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "NSString+RACSequenceAdditions.h" #import "RACStringSequence.h" @implementation NSString (RACSequenceAdditions) - (RACSequence *)rac_sequence { return [RACStringSequence sequenceWithString:self offset:0]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSupport.h ================================================ // // NSString+RACSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 5/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACScheduler; @class RACSignal; @interface NSString (RACSupport) // Reads in the contents of the file using +[NSString stringWithContentsOfURL:usedEncoding:error:]. // Note that encoding won't be valid until the signal completes successfully. // // scheduler - cannot be nil. + (RACSignal *)rac_readContentsOfURL:(NSURL *)URL usedEncoding:(NSStringEncoding *)encoding scheduler:(RACScheduler *)scheduler; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSupport.m ================================================ // // NSString+RACSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 5/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "NSString+RACSupport.h" #import "RACReplaySubject.h" #import "RACScheduler.h" @implementation NSString (RACSupport) + (RACSignal *)rac_readContentsOfURL:(NSURL *)URL usedEncoding:(NSStringEncoding *)encoding scheduler:(RACScheduler *)scheduler { NSCParameterAssert(scheduler != nil); RACReplaySubject *subject = [RACReplaySubject subject]; [subject setNameWithFormat:@"+rac_readContentsOfURL: %@ usedEncoding:scheduler: %@", URL, scheduler]; [scheduler schedule:^{ NSError *error = nil; NSString *string = [NSString stringWithContentsOfURL:URL usedEncoding:encoding error:&error]; if (string == nil) { [subject sendError:error]; } else { [subject sendNext:string]; [subject sendCompleted]; } }]; return subject; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSText+RACSignalSupport.h ================================================ // // NSText+RACSignalSupport.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-03-08. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; @interface NSText (RACSignalSupport) /// Returns a signal which sends the current `string` of the receiver, then the /// new value any time it changes. - (RACSignal *)rac_textSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSText+RACSignalSupport.m ================================================ // // NSText+RACSignalSupport.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-03-08. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSText+RACSignalSupport.h" #import #import "NSObject+RACDescription.h" #import "RACDisposable.h" #import "RACSignal.h" #import "RACSubscriber.h" @implementation NSText (RACSignalSupport) - (RACSignal *)rac_textSignal { @unsafeify(self); return [[[[RACSignal createSignal:^(id subscriber) { @strongify(self); id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSTextDidChangeNotification object:self queue:nil usingBlock:^(NSNotification *note) { [subscriber sendNext:note.object]; }]; return [RACDisposable disposableWithBlock:^{ [NSNotificationCenter.defaultCenter removeObserver:observer]; }]; }] map:^(NSText *text) { return [text.string copy]; }] startWith:[self.string copy]] setNameWithFormat:@"%@ -rac_textSignal", RACDescription(self)]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSURLConnection+RACSupport.h ================================================ // // NSURLConnection+RACSupport.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; @interface NSURLConnection (RACSupport) // Lazily loads data for the given request in the background. // // request - The URL request to load. This must not be nil. // // Returns a signal which will begin loading the request upon each subscription, // then send a `RACTuple` of the received `NSURLResponse` and downloaded // `NSData`, and complete on a background thread. If any errors occur, the // returned signal will error out. + (RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest *)request; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSURLConnection+RACSupport.m ================================================ // // NSURLConnection+RACSupport.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSURLConnection+RACSupport.h" #import "RACDisposable.h" #import "RACSignal.h" #import "RACSubscriber.h" #import "RACTuple.h" @implementation NSURLConnection (RACSupport) + (RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest *)request { NSCParameterAssert(request != nil); return [[RACSignal createSignal:^(id subscriber) { NSOperationQueue *queue = [[NSOperationQueue alloc] init]; queue.name = @"org.reactivecocoa.ReactiveCocoa.NSURLConnectionRACSupport"; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { // The docs say that `nil` data means an error occurred, but // `nil` responses can also occur in practice (circumstances // unknown). Consider either to be an error. // // Note that _empty_ data is not necessarily erroneous, as there // may be headers but no HTTP body. if (response == nil || data == nil) { [subscriber sendError:error]; } else { [subscriber sendNext:RACTuplePack(response, data)]; [subscriber sendCompleted]; } }]; #pragma clang diagnostic pop return [RACDisposable disposableWithBlock:^{ // It's not clear if this will actually cancel the connection, // but we can at least prevent _some_ unnecessary work -- // without writing all the code for a proper delegate, which // doesn't really belong in RAC. queue.suspended = YES; [queue cancelAllOperations]; }]; }] setNameWithFormat:@"+rac_sendAsynchronousRequest: %@", request]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSUserDefaults+RACSupport.h ================================================ // // NSUserDefaults+RACSupport.h // ReactiveCocoa // // Created by Matt Diephouse on 12/19/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface NSUserDefaults (RACSupport) /// Creates and returns a terminal for binding the user defaults key. /// /// **Note:** The value in the user defaults is *asynchronously* updated with /// values sent to the channel. /// /// key - The user defaults key to create the channel terminal for. /// /// Returns a channel terminal that sends the value of the user defaults key /// upon subscription, sends an updated value whenever the default changes, and /// updates the default asynchronously with values it receives. - (RACChannelTerminal *)rac_channelTerminalForKey:(NSString *)key; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSUserDefaults+RACSupport.m ================================================ // // NSUserDefaults+RACSupport.m // ReactiveCocoa // // Created by Matt Diephouse on 12/19/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "NSUserDefaults+RACSupport.h" #import #import "NSNotificationCenter+RACSupport.h" #import "NSObject+RACDeallocating.h" #import "RACChannel.h" #import "RACScheduler.h" #import "RACSignal+Operations.h" @implementation NSUserDefaults (RACSupport) - (RACChannelTerminal *)rac_channelTerminalForKey:(NSString *)key { RACChannel *channel = [RACChannel new]; RACScheduler *scheduler = [RACScheduler scheduler]; __block BOOL ignoreNextValue = NO; @weakify(self); [[[[[[[NSNotificationCenter.defaultCenter rac_addObserverForName:NSUserDefaultsDidChangeNotification object:self] map:^(id _) { @strongify(self); return [self objectForKey:key]; }] startWith:[self objectForKey:key]] // Don't send values that were set on the other side of the terminal. filter:^ BOOL (id _) { if (RACScheduler.currentScheduler == scheduler && ignoreNextValue) { ignoreNextValue = NO; return NO; } return YES; }] distinctUntilChanged] takeUntil:self.rac_willDeallocSignal] subscribe:channel.leadingTerminal]; [[channel.leadingTerminal deliverOn:scheduler] subscribeNext:^(id value) { @strongify(self); ignoreNextValue = YES; [self setObject:value forKey:key]; }]; return channel.followingTerminal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACArraySequence.h ================================================ // // RACArraySequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACSequence.h" // Private class that adapts an array to the RACSequence interface. @interface RACArraySequence : RACSequence // Returns a sequence for enumerating over the given array, starting from the // given offset. The array will be copied to prevent mutation. + (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACArraySequence.m ================================================ // // RACArraySequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACArraySequence.h" @interface RACArraySequence () // Redeclared from the superclass and marked deprecated to prevent using `array` // where `backingArray` is intended. @property (nonatomic, copy, readonly) NSArray *array __attribute__((deprecated)); // The array being sequenced. @property (nonatomic, copy, readonly) NSArray *backingArray; // The index in the array from which the sequence starts. @property (nonatomic, assign, readonly) NSUInteger offset; @end @implementation RACArraySequence #pragma mark Lifecycle + (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset { NSCParameterAssert(offset <= array.count); if (offset == array.count) return self.empty; RACArraySequence *seq = [[self alloc] init]; seq->_backingArray = [array copy]; seq->_offset = offset; return seq; } #pragma mark RACSequence - (id)head { return self.backingArray[self.offset]; } - (RACSequence *)tail { RACSequence *sequence = [self.class sequenceWithArray:self.backingArray offset:self.offset + 1]; sequence.name = self.name; return sequence; } #pragma mark NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id[])stackbuf count:(NSUInteger)len { NSCParameterAssert(len > 0); if (state->state >= self.backingArray.count) { // Enumeration has completed. return 0; } if (state->state == 0) { state->state = self.offset; // Since a sequence doesn't mutate, this just needs to be set to // something non-NULL. state->mutationsPtr = state->extra; } state->itemsPtr = stackbuf; NSUInteger startIndex = state->state; NSUInteger index = 0; for (id value in self.backingArray) { // Constructing an index set for -enumerateObjectsAtIndexes: can actually be // slower than just skipping the items we don't care about. if (index < startIndex) { ++index; continue; } stackbuf[index - startIndex] = value; ++index; if (index - startIndex >= len) break; } NSCAssert(index > startIndex, @"Final index (%lu) should be greater than start index (%lu)", (unsigned long)index, (unsigned long)startIndex); state->state = index; return index - startIndex; } #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-implementations" - (NSArray *)array { return [self.backingArray subarrayWithRange:NSMakeRange(self.offset, self.backingArray.count - self.offset)]; } #pragma clang diagnostic pop #pragma mark NSCoding - (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self == nil) return nil; _backingArray = [coder decodeObjectForKey:@"array"]; _offset = 0; return self; } - (void)encodeWithCoder:(NSCoder *)coder { // Encoding is handled in RACSequence. [super encodeWithCoder:coder]; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ name = %@, array = %@ }", self.class, self, self.name, self.backingArray]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBehaviorSubject.h ================================================ // // RACBehaviorSubject.h // ReactiveCocoa // // Created by Josh Abernathy on 3/16/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubject.h" /// A behavior subject sends the last value it received when it is subscribed to. @interface RACBehaviorSubject : RACSubject /// Creates a new behavior subject with a default value. If it hasn't received /// any values when it gets subscribed to, it sends the default value. + (instancetype)behaviorSubjectWithDefaultValue:(id)value; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBehaviorSubject.m ================================================ // // RACBehaviorSubject.m // ReactiveCocoa // // Created by Josh Abernathy on 3/16/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACBehaviorSubject.h" #import "RACDisposable.h" #import "RACScheduler+Private.h" @interface RACBehaviorSubject () // This property should only be used while synchronized on self. @property (nonatomic, strong) id currentValue; @end @implementation RACBehaviorSubject #pragma mark Lifecycle + (instancetype)behaviorSubjectWithDefaultValue:(id)value { RACBehaviorSubject *subject = [self subject]; subject.currentValue = value; return subject; } #pragma mark RACSignal - (RACDisposable *)subscribe:(id)subscriber { RACDisposable *subscriptionDisposable = [super subscribe:subscriber]; RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{ @synchronized (self) { [subscriber sendNext:self.currentValue]; } }]; return [RACDisposable disposableWithBlock:^{ [subscriptionDisposable dispose]; [schedulingDisposable dispose]; }]; } #pragma mark RACSubscriber - (void)sendNext:(id)value { @synchronized (self) { self.currentValue = value; [super sendNext:value]; } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBlockTrampoline.h ================================================ // // RACBlockTrampoline.h // ReactiveCocoa // // Created by Josh Abernathy on 10/21/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACTuple; // A private class that allows a limited type of dynamic block invocation. @interface RACBlockTrampoline : NSObject // Invokes the given block with the given arguments. All of the block's // argument types must be objects and it must be typed to return an object. // // At this time, it only supports blocks that take up to 15 arguments. Any more // is just cray. // // block - The block to invoke. Must accept as many arguments as are given in // the arguments array. Cannot be nil. // arguments - The arguments with which to invoke the block. `RACTupleNil`s will // be passed as nils. // // Returns the return value of invoking the block. + (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBlockTrampoline.m ================================================ // // RACBlockTrampoline.m // ReactiveCocoa // // Created by Josh Abernathy on 10/21/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACBlockTrampoline.h" #import "RACTuple.h" @interface RACBlockTrampoline () @property (nonatomic, readonly, copy) id block; @end @implementation RACBlockTrampoline #pragma mark API - (id)initWithBlock:(id)block { self = [super init]; if (self == nil) return nil; _block = [block copy]; return self; } + (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments { NSCParameterAssert(block != NULL); RACBlockTrampoline *trampoline = [[self alloc] initWithBlock:block]; return [trampoline invokeWithArguments:arguments]; } - (id)invokeWithArguments:(RACTuple *)arguments { SEL selector = [self selectorForArgumentCount:arguments.count]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:selector]]; invocation.selector = selector; invocation.target = self; for (NSUInteger i = 0; i < arguments.count; i++) { id arg = arguments[i]; NSInteger argIndex = (NSInteger)(i + 2); [invocation setArgument:&arg atIndex:argIndex]; } [invocation invoke]; __unsafe_unretained id returnVal; [invocation getReturnValue:&returnVal]; return returnVal; } - (SEL)selectorForArgumentCount:(NSUInteger)count { NSCParameterAssert(count > 0); switch (count) { case 0: return NULL; case 1: return @selector(performWith:); case 2: return @selector(performWith::); case 3: return @selector(performWith:::); case 4: return @selector(performWith::::); case 5: return @selector(performWith:::::); case 6: return @selector(performWith::::::); case 7: return @selector(performWith:::::::); case 8: return @selector(performWith::::::::); case 9: return @selector(performWith:::::::::); case 10: return @selector(performWith::::::::::); case 11: return @selector(performWith:::::::::::); case 12: return @selector(performWith::::::::::::); case 13: return @selector(performWith:::::::::::::); case 14: return @selector(performWith::::::::::::::); case 15: return @selector(performWith:::::::::::::::); } NSCAssert(NO, @"The argument count is too damn high! Only blocks of up to 15 arguments are currently supported."); return NULL; } - (id)performWith:(id)obj1 { id (^block)(id) = self.block; return block(obj1); } - (id)performWith:(id)obj1 :(id)obj2 { id (^block)(id, id) = self.block; return block(obj1, obj2); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 { id (^block)(id, id, id) = self.block; return block(obj1, obj2, obj3); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 { id (^block)(id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 { id (^block)(id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 { id (^block)(id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 { id (^block)(id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 { id (^block)(id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 { id (^block)(id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 { id (^block)(id, id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 { id (^block)(id, id, id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 { id (^block)(id, id, id, id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 { id (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 :(id)obj14 { id (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14); } - (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 :(id)obj14 :(id)obj15 { id (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block; return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14, obj15); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACChannel.h ================================================ // // RACChannel.h // ReactiveCocoa // // Created by Uri Baghin on 01/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSignal.h" #import "RACSubscriber.h" @class RACChannelTerminal; /// A two-way channel. /// /// Conceptually, RACChannel can be thought of as a bidirectional connection, /// composed of two controllable signals that work in parallel. /// /// For example, when connecting between a view and a model: /// /// Model View /// `leadingTerminal` ------> `followingTerminal` /// `leadingTerminal` <------ `followingTerminal` /// /// The initial value of the model and all future changes to it are _sent on_ the /// `leadingTerminal`, and _received by_ subscribers of the `followingTerminal`. /// /// Likewise, whenever the user changes the value of the view, that value is sent /// on the `followingTerminal`, and received in the model from the /// `leadingTerminal`. However, the initial value of the view is not received /// from the `leadingTerminal` (only future changes). @interface RACChannel : NSObject /// The terminal which "leads" the channel, by sending its latest value /// immediately to new subscribers of the `followingTerminal`. /// /// New subscribers to this terminal will not receive a starting value, but will /// receive all future values that are sent to the `followingTerminal`. @property (nonatomic, strong, readonly) RACChannelTerminal *leadingTerminal; /// The terminal which "follows" the lead of the other terminal, only sending /// _future_ values to the subscribers of the `leadingTerminal`. /// /// The latest value sent to the `leadingTerminal` (if any) will be sent /// immediately to new subscribers of this terminal, and then all future values /// as well. @property (nonatomic, strong, readonly) RACChannelTerminal *followingTerminal; @end /// Represents one end of a RACChannel. /// /// An terminal is similar to a socket or pipe -- it represents one end of /// a connection (the RACChannel, in this case). Values sent to this terminal /// will _not_ be received by its subscribers. Instead, the values will be sent /// to the subscribers of the RACChannel's _other_ terminal. /// /// For example, when using the `followingTerminal`, _sent_ values can only be /// _received_ from the `leadingTerminal`, and vice versa. /// /// To make it easy to terminate a RACChannel, `error` and `completed` events /// sent to either terminal will be received by the subscribers of _both_ /// terminals. /// /// Do not instantiate this class directly. Create a RACChannel instead. @interface RACChannelTerminal : RACSignal - (id)init __attribute__((unavailable("Instantiate a RACChannel instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACChannel.m ================================================ // // RACChannel.m // ReactiveCocoa // // Created by Uri Baghin on 01/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACChannel.h" #import "RACDisposable.h" #import "RACReplaySubject.h" #import "RACSignal+Operations.h" @interface RACChannelTerminal () // The values for this terminal. @property (nonatomic, strong, readonly) RACSignal *values; // A subscriber will will send values to the other terminal. @property (nonatomic, strong, readonly) id otherTerminal; - (id)initWithValues:(RACSignal *)values otherTerminal:(id)otherTerminal; @end @implementation RACChannel - (id)init { self = [super init]; if (self == nil) return nil; // We don't want any starting value from the leadingSubject, but we do want // error and completion to be replayed. RACReplaySubject *leadingSubject = [[RACReplaySubject replaySubjectWithCapacity:0] setNameWithFormat:@"leadingSubject"]; RACReplaySubject *followingSubject = [[RACReplaySubject replaySubjectWithCapacity:1] setNameWithFormat:@"followingSubject"]; // Propagate errors and completion to everything. [[leadingSubject ignoreValues] subscribe:followingSubject]; [[followingSubject ignoreValues] subscribe:leadingSubject]; _leadingTerminal = [[[RACChannelTerminal alloc] initWithValues:leadingSubject otherTerminal:followingSubject] setNameWithFormat:@"leadingTerminal"]; _followingTerminal = [[[RACChannelTerminal alloc] initWithValues:followingSubject otherTerminal:leadingSubject] setNameWithFormat:@"followingTerminal"]; return self; } @end @implementation RACChannelTerminal #pragma mark Lifecycle - (id)initWithValues:(RACSignal *)values otherTerminal:(id)otherTerminal { NSCParameterAssert(values != nil); NSCParameterAssert(otherTerminal != nil); self = [super init]; if (self == nil) return nil; _values = values; _otherTerminal = otherTerminal; return self; } #pragma mark RACSignal - (RACDisposable *)subscribe:(id)subscriber { return [self.values subscribe:subscriber]; } #pragma mark - (void)sendNext:(id)value { [self.otherTerminal sendNext:value]; } - (void)sendError:(NSError *)error { [self.otherTerminal sendError:error]; } - (void)sendCompleted { [self.otherTerminal sendCompleted]; } - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable { [self.otherTerminal didSubscribeWithDisposable:disposable]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCommand.h ================================================ // // RACCommand.h // ReactiveCocoa // // Created by Josh Abernathy on 3/3/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACSignal; /// The domain for errors originating within `RACCommand`. extern NSString * const RACCommandErrorDomain; /// -execute: was invoked while the command was disabled. extern const NSInteger RACCommandErrorNotEnabled; /// A `userInfo` key for an error, associated with the `RACCommand` that the /// error originated from. /// /// This is included only when the error code is `RACCommandErrorNotEnabled`. extern NSString * const RACUnderlyingCommandErrorKey; /// A command is a signal triggered in response to some action, typically /// UI-related. @interface RACCommand<__contravariant InputType> : NSObject /// A signal of the signals returned by successful invocations of -execute: /// (i.e., while the receiver is `enabled`). /// /// Errors will be automatically caught upon the inner signals, and sent upon /// `errors` instead. If you _want_ to receive inner errors, use -execute: or /// -[RACSignal materialize]. /// /// Only executions that begin _after_ subscription will be sent upon this /// signal. All inner signals will arrive upon the main thread. @property (nonatomic, strong, readonly) RACSignal *executionSignals; /// A signal of whether this command is currently executing. /// /// This will send YES whenever -execute: is invoked and the created signal has /// not yet terminated. Once all executions have terminated, `executing` will /// send NO. /// /// This signal will send its current value upon subscription, and then all /// future values on the main thread. @property (nonatomic, strong, readonly) RACSignal *executing; /// A signal of whether this command is able to execute. /// /// This will send NO if: /// /// - The command was created with an `enabledSignal`, and NO is sent upon that /// signal, or /// - `allowsConcurrentExecution` is NO and the command has started executing. /// /// Once the above conditions are no longer met, the signal will send YES. /// /// This signal will send its current value upon subscription, and then all /// future values on the main thread. @property (nonatomic, strong, readonly) RACSignal *enabled; /// Forwards any errors that occur within signals returned by -execute:. /// /// When an error occurs on a signal returned from -execute:, this signal will /// send the associated NSError value as a `next` event (since an `error` event /// would terminate the stream). /// /// After subscription, this signal will send all future errors on the main /// thread. @property (nonatomic, strong, readonly) RACSignal *errors; /// Whether the command allows multiple executions to proceed concurrently. /// /// The default value for this property is NO. @property (atomic, assign) BOOL allowsConcurrentExecution; /// Invokes -initWithEnabled:signalBlock: with a nil `enabledSignal`. - (id)initWithSignalBlock:(RACSignal * (^)(InputType input))signalBlock; /// Initializes a command that is conditionally enabled. /// /// This is the designated initializer for this class. /// /// enabledSignal - A signal of BOOLs which indicate whether the command should /// be enabled. `enabled` will be based on the latest value sent /// from this signal. Before any values are sent, `enabled` will /// default to YES. This argument may be nil. /// signalBlock - A block which will map each input value (passed to -execute:) /// to a signal of work. The returned signal will be multicasted /// to a replay subject, sent on `executionSignals`, then /// subscribed to synchronously. Neither the block nor the /// returned signal may be nil. - (id)initWithEnabled:(RACSignal *)enabledSignal signalBlock:(RACSignal * (^)(InputType input))signalBlock; /// If the receiver is enabled, this method will: /// /// 1. Invoke the `signalBlock` given at the time of initialization. /// 2. Multicast the returned signal to a RACReplaySubject. /// 3. Send the multicasted signal on `executionSignals`. /// 4. Subscribe (connect) to the original signal on the main thread. /// /// input - The input value to pass to the receiver's `signalBlock`. This may be /// nil. /// /// Returns the multicasted signal, after subscription. If the receiver is not /// enabled, returns a signal that will send an error with code /// RACCommandErrorNotEnabled. - (RACSignal *)execute:(InputType)input; @end @interface RACCommand (Unavailable) @property (atomic, readonly) BOOL canExecute __attribute__((unavailable("Use the 'enabled' signal instead"))); + (instancetype)command __attribute__((unavailable("Use -initWithSignalBlock: instead"))); + (instancetype)commandWithCanExecuteSignal:(RACSignal *)canExecuteSignal __attribute__((unavailable("Use -initWithEnabled:signalBlock: instead"))); - (id)initWithCanExecuteSignal:(RACSignal *)canExecuteSignal __attribute__((unavailable("Use -initWithEnabled:signalBlock: instead"))); - (RACSignal *)addSignalBlock:(RACSignal * (^)(id value))signalBlock __attribute__((unavailable("Pass the signalBlock to -initWithSignalBlock: instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCommand.m ================================================ // // RACCommand.m // ReactiveCocoa // // Created by Josh Abernathy on 3/3/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACCommand.h" #import #import "NSArray+RACSequenceAdditions.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "NSObject+RACPropertySubscribing.h" #import "RACMulticastConnection.h" #import "RACReplaySubject.h" #import "RACScheduler.h" #import "RACSequence.h" #import "RACSignal+Operations.h" #import NSString * const RACCommandErrorDomain = @"RACCommandErrorDomain"; NSString * const RACUnderlyingCommandErrorKey = @"RACUnderlyingCommandErrorKey"; const NSInteger RACCommandErrorNotEnabled = 1; @interface RACCommand () { // Atomic backing variable for `allowsConcurrentExecution`. volatile uint32_t _allowsConcurrentExecution; } /// A subject that sends added execution signals. @property (nonatomic, strong, readonly) RACSubject *addedExecutionSignalsSubject; /// A subject that sends the new value of `allowsConcurrentExecution` whenever it changes. @property (nonatomic, strong, readonly) RACSubject *allowsConcurrentExecutionSubject; // `enabled`, but without a hop to the main thread. // // Values from this signal may arrive on any thread. @property (nonatomic, strong, readonly) RACSignal *immediateEnabled; // The signal block that the receiver was initialized with. @property (nonatomic, copy, readonly) RACSignal * (^signalBlock)(id input); @end @implementation RACCommand #pragma mark Properties - (BOOL)allowsConcurrentExecution { return _allowsConcurrentExecution != 0; } - (void)setAllowsConcurrentExecution:(BOOL)allowed { if (allowed) { OSAtomicOr32Barrier(1, &_allowsConcurrentExecution); } else { OSAtomicAnd32Barrier(0, &_allowsConcurrentExecution); } [self.allowsConcurrentExecutionSubject sendNext:@(_allowsConcurrentExecution)]; } #pragma mark Lifecycle - (id)init { NSCAssert(NO, @"Use -initWithSignalBlock: instead"); return nil; } - (id)initWithSignalBlock:(RACSignal * (^)(id input))signalBlock { return [self initWithEnabled:nil signalBlock:signalBlock]; } - (void)dealloc { [_addedExecutionSignalsSubject sendCompleted]; [_allowsConcurrentExecutionSubject sendCompleted]; } - (id)initWithEnabled:(RACSignal *)enabledSignal signalBlock:(RACSignal * (^)(id input))signalBlock { NSCParameterAssert(signalBlock != nil); self = [super init]; if (self == nil) return nil; _addedExecutionSignalsSubject = [RACSubject new]; _allowsConcurrentExecutionSubject = [RACSubject new]; _signalBlock = [signalBlock copy]; _executionSignals = [[[self.addedExecutionSignalsSubject map:^(RACSignal *signal) { return [signal catchTo:[RACSignal empty]]; }] deliverOn:RACScheduler.mainThreadScheduler] setNameWithFormat:@"%@ -executionSignals", self]; // `errors` needs to be multicasted so that it picks up all // `activeExecutionSignals` that are added. // // In other words, if someone subscribes to `errors` _after_ an execution // has started, it should still receive any error from that execution. RACMulticastConnection *errorsConnection = [[[self.addedExecutionSignalsSubject flattenMap:^(RACSignal *signal) { return [[signal ignoreValues] catch:^(NSError *error) { return [RACSignal return:error]; }]; }] deliverOn:RACScheduler.mainThreadScheduler] publish]; _errors = [errorsConnection.signal setNameWithFormat:@"%@ -errors", self]; [errorsConnection connect]; RACSignal *immediateExecuting = [[[[self.addedExecutionSignalsSubject flattenMap:^(RACSignal *signal) { return [[[signal catchTo:[RACSignal empty]] then:^{ return [RACSignal return:@-1]; }] startWith:@1]; }] scanWithStart:@0 reduce:^(NSNumber *running, NSNumber *next) { return @(running.integerValue + next.integerValue); }] map:^(NSNumber *count) { return @(count.integerValue > 0); }] startWith:@NO]; _executing = [[[[[immediateExecuting deliverOn:RACScheduler.mainThreadScheduler] // This is useful before the first value arrives on the main thread. startWith:@NO] distinctUntilChanged] replayLast] setNameWithFormat:@"%@ -executing", self]; RACSignal *moreExecutionsAllowed = [RACSignal if:[self.allowsConcurrentExecutionSubject startWith:@NO] then:[RACSignal return:@YES] else:[immediateExecuting not]]; if (enabledSignal == nil) { enabledSignal = [RACSignal return:@YES]; } else { enabledSignal = [enabledSignal startWith:@YES]; } _immediateEnabled = [[[[RACSignal combineLatest:@[ enabledSignal, moreExecutionsAllowed ]] and] takeUntil:self.rac_willDeallocSignal] replayLast]; _enabled = [[[[[self.immediateEnabled take:1] concat:[[self.immediateEnabled skip:1] deliverOn:RACScheduler.mainThreadScheduler]] distinctUntilChanged] replayLast] setNameWithFormat:@"%@ -enabled", self]; return self; } #pragma mark Execution - (RACSignal *)execute:(id)input { // `immediateEnabled` is guaranteed to send a value upon subscription, so // -first is acceptable here. BOOL enabled = [[self.immediateEnabled first] boolValue]; if (!enabled) { NSError *error = [NSError errorWithDomain:RACCommandErrorDomain code:RACCommandErrorNotEnabled userInfo:@{ NSLocalizedDescriptionKey: NSLocalizedString(@"The command is disabled and cannot be executed", nil), RACUnderlyingCommandErrorKey: self }]; return [RACSignal error:error]; } RACSignal *signal = self.signalBlock(input); NSCAssert(signal != nil, @"nil signal returned from signal block for value: %@", input); // We subscribe to the signal on the main thread so that it occurs _after_ // -addActiveExecutionSignal: completes below. // // This means that `executing` and `enabled` will send updated values before // the signal actually starts performing work. RACMulticastConnection *connection = [[signal subscribeOn:RACScheduler.mainThreadScheduler] multicast:[RACReplaySubject subject]]; [self.addedExecutionSignalsSubject sendNext:connection.signal]; [connection connect]; return [connection.signal setNameWithFormat:@"%@ -execute: %@", self, RACDescription(input)]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCompoundDisposable.h ================================================ // // RACCompoundDisposable.h // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACDisposable.h" /// A disposable of disposables. When it is disposed, it disposes of all its /// contained disposables. /// /// If -addDisposable: is called after the compound disposable has been disposed /// of, the given disposable is immediately disposed. This allows a compound /// disposable to act as a stand-in for a disposable that will be delivered /// asynchronously. @interface RACCompoundDisposable : RACDisposable /// Creates and returns a new compound disposable. + (instancetype)compoundDisposable; /// Creates and returns a new compound disposable containing the given /// disposables. + (instancetype)compoundDisposableWithDisposables:(NSArray *)disposables; /// Adds the given disposable. If the receiving disposable has already been /// disposed of, the given disposable is disposed immediately. /// /// This method is thread-safe. /// /// disposable - The disposable to add. This may be nil, in which case nothing /// happens. - (void)addDisposable:(RACDisposable *)disposable; /// Removes the specified disposable from the compound disposable (regardless of /// its disposed status), or does nothing if it's not in the compound disposable. /// /// This is mainly useful for limiting the memory usage of the compound /// disposable for long-running operations. /// /// This method is thread-safe. /// /// disposable - The disposable to remove. This argument may be nil (to make the /// use of weak references easier). - (void)removeDisposable:(RACDisposable *)disposable; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCompoundDisposable.m ================================================ // // RACCompoundDisposable.m // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACCompoundDisposable.h" #import "RACCompoundDisposableProvider.h" #import // The number of child disposables for which space will be reserved directly in // `RACCompoundDisposable`. // // This number has been empirically determined to provide a good tradeoff // between performance, memory usage, and `RACCompoundDisposable` instance size // in a moderately complex GUI application. // // Profile any change! #define RACCompoundDisposableInlineCount 2 static CFMutableArrayRef RACCreateDisposablesArray(void) { // Compare values using only pointer equality. CFArrayCallBacks callbacks = kCFTypeArrayCallBacks; callbacks.equal = NULL; return CFArrayCreateMutable(NULL, 0, &callbacks); } @interface RACCompoundDisposable () { // Used for synchronization. pthread_mutex_t _mutex; #if RACCompoundDisposableInlineCount // A fast array to the first N of the receiver's disposables. // // Once this is full, `_disposables` will be created and used for additional // disposables. // // This array should only be manipulated while _mutex is held. RACDisposable *_inlineDisposables[RACCompoundDisposableInlineCount]; #endif // Contains the receiver's disposables. // // This array should only be manipulated while _mutex is held. If // `_disposed` is YES, this may be NULL. CFMutableArrayRef _disposables; // Whether the receiver has already been disposed. // // This ivar should only be accessed while _mutex is held. BOOL _disposed; } @end @implementation RACCompoundDisposable #pragma mark Properties - (BOOL)isDisposed { pthread_mutex_lock(&_mutex); BOOL disposed = _disposed; pthread_mutex_unlock(&_mutex); return disposed; } #pragma mark Lifecycle + (instancetype)compoundDisposable { return [[self alloc] initWithDisposables:nil]; } + (instancetype)compoundDisposableWithDisposables:(NSArray *)disposables { return [[self alloc] initWithDisposables:disposables]; } - (instancetype)init { self = [super init]; if (self == nil) return nil; const int result = pthread_mutex_init(&_mutex, NULL); NSCAssert(0 == result, @"Failed to initialize mutex with error %d.", result); return self; } - (instancetype)initWithDisposables:(NSArray *)otherDisposables { self = [self init]; if (self == nil) return nil; #if RACCompoundDisposableInlineCount [otherDisposables enumerateObjectsUsingBlock:^(RACDisposable *disposable, NSUInteger index, BOOL *stop) { _inlineDisposables[index] = disposable; // Stop after this iteration if we've reached the end of the inlined // array. if (index == RACCompoundDisposableInlineCount - 1) *stop = YES; }]; #endif if (otherDisposables.count > RACCompoundDisposableInlineCount) { _disposables = RACCreateDisposablesArray(); CFRange range = CFRangeMake(RACCompoundDisposableInlineCount, (CFIndex)otherDisposables.count - RACCompoundDisposableInlineCount); CFArrayAppendArray(_disposables, (__bridge CFArrayRef)otherDisposables, range); } return self; } - (instancetype)initWithBlock:(void (^)(void))block { RACDisposable *disposable = [RACDisposable disposableWithBlock:block]; return [self initWithDisposables:@[ disposable ]]; } - (void)dealloc { #if RACCompoundDisposableInlineCount for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { _inlineDisposables[i] = nil; } #endif if (_disposables != NULL) { CFRelease(_disposables); _disposables = NULL; } const int result = pthread_mutex_destroy(&_mutex); NSCAssert(0 == result, @"Failed to destroy mutex with error %d.", result); } #pragma mark Addition and Removal - (void)addDisposable:(RACDisposable *)disposable { NSCParameterAssert(disposable != self); if (disposable == nil || disposable.disposed) return; BOOL shouldDispose = NO; pthread_mutex_lock(&_mutex); { if (_disposed) { shouldDispose = YES; } else { #if RACCompoundDisposableInlineCount for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { if (_inlineDisposables[i] == nil) { _inlineDisposables[i] = disposable; goto foundSlot; } } #endif if (_disposables == NULL) _disposables = RACCreateDisposablesArray(); CFArrayAppendValue(_disposables, (__bridge void *)disposable); if (RACCOMPOUNDDISPOSABLE_ADDED_ENABLED()) { RACCOMPOUNDDISPOSABLE_ADDED(self.description.UTF8String, disposable.description.UTF8String, CFArrayGetCount(_disposables) + RACCompoundDisposableInlineCount); } #if RACCompoundDisposableInlineCount foundSlot:; #endif } } pthread_mutex_unlock(&_mutex); // Performed outside of the lock in case the compound disposable is used // recursively. if (shouldDispose) [disposable dispose]; } - (void)removeDisposable:(RACDisposable *)disposable { if (disposable == nil) return; pthread_mutex_lock(&_mutex); { if (!_disposed) { #if RACCompoundDisposableInlineCount for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { if (_inlineDisposables[i] == disposable) _inlineDisposables[i] = nil; } #endif if (_disposables != NULL) { CFIndex count = CFArrayGetCount(_disposables); for (CFIndex i = count - 1; i >= 0; i--) { const void *item = CFArrayGetValueAtIndex(_disposables, i); if (item == (__bridge void *)disposable) { CFArrayRemoveValueAtIndex(_disposables, i); } } if (RACCOMPOUNDDISPOSABLE_REMOVED_ENABLED()) { RACCOMPOUNDDISPOSABLE_REMOVED(self.description.UTF8String, disposable.description.UTF8String, CFArrayGetCount(_disposables) + RACCompoundDisposableInlineCount); } } } } pthread_mutex_unlock(&_mutex); } #pragma mark RACDisposable static void disposeEach(const void *value, void *context) { RACDisposable *disposable = (__bridge id)value; [disposable dispose]; } - (void)dispose { #if RACCompoundDisposableInlineCount RACDisposable *inlineCopy[RACCompoundDisposableInlineCount]; #endif CFArrayRef remainingDisposables = NULL; pthread_mutex_lock(&_mutex); { _disposed = YES; #if RACCompoundDisposableInlineCount for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { inlineCopy[i] = _inlineDisposables[i]; _inlineDisposables[i] = nil; } #endif remainingDisposables = _disposables; _disposables = NULL; } pthread_mutex_unlock(&_mutex); #if RACCompoundDisposableInlineCount // Dispose outside of the lock in case the compound disposable is used // recursively. for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { [inlineCopy[i] dispose]; } #endif if (remainingDisposables == NULL) return; CFIndex count = CFArrayGetCount(remainingDisposables); CFArrayApplyFunction(remainingDisposables, CFRangeMake(0, count), &disposeEach, NULL); CFRelease(remainingDisposables); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCompoundDisposableProvider.d ================================================ provider RACCompoundDisposable { probe added(char *compoundDisposable, char *disposable, long newTotal); probe removed(char *compoundDisposable, char *disposable, long newTotal); }; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDelegateProxy.h ================================================ // // RACDelegateProxy.h // ReactiveCocoa // // Created by Cody Krieger on 5/19/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACSignal; // A private delegate object suitable for using // -rac_signalForSelector:fromProtocol: upon. @interface RACDelegateProxy : NSObject // The delegate to which messages should be forwarded if not handled by // any -signalForSelector: applications. @property (nonatomic, unsafe_unretained) id rac_proxiedDelegate; // Creates a delegate proxy capable of responding to selectors from `protocol`. - (instancetype)initWithProtocol:(Protocol *)protocol; // Calls -rac_signalForSelector:fromProtocol: using the `protocol` specified // during initialization. - (RACSignal *)signalForSelector:(SEL)selector; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDelegateProxy.m ================================================ // // RACDelegateProxy.m // ReactiveCocoa // // Created by Cody Krieger on 5/19/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACDelegateProxy.h" #import "NSObject+RACSelectorSignal.h" #import @interface RACDelegateProxy () { // Declared as an ivar to avoid method naming conflicts. Protocol *_protocol; } @end @implementation RACDelegateProxy #pragma mark Lifecycle - (instancetype)initWithProtocol:(Protocol *)protocol { NSCParameterAssert(protocol != NULL); self = [super init]; if (self == nil) return nil; class_addProtocol(self.class, protocol); _protocol = protocol; return self; } #pragma mark API - (RACSignal *)signalForSelector:(SEL)selector { return [self rac_signalForSelector:selector fromProtocol:_protocol]; } #pragma mark NSObject - (BOOL)isProxy { return YES; } - (void)forwardInvocation:(NSInvocation *)invocation { [invocation invokeWithTarget:self.rac_proxiedDelegate]; } - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { // Look for the selector as an optional instance method. struct objc_method_description methodDescription = protocol_getMethodDescription(_protocol, selector, NO, YES); if (methodDescription.name == NULL) { // Then fall back to looking for a required instance // method. methodDescription = protocol_getMethodDescription(_protocol, selector, YES, YES); if (methodDescription.name == NULL) return [super methodSignatureForSelector:selector]; } return [NSMethodSignature signatureWithObjCTypes:methodDescription.types]; } - (BOOL)respondsToSelector:(SEL)selector { // Add the delegate to the autorelease pool, so it doesn't get deallocated // between this method call and -forwardInvocation:. __autoreleasing id delegate = self.rac_proxiedDelegate; if ([delegate respondsToSelector:selector]) return YES; return [super respondsToSelector:selector]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDisposable.h ================================================ // // RACDisposable.h // ReactiveCocoa // // Created by Josh Abernathy on 3/16/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACScopedDisposable; /// A disposable encapsulates the work necessary to tear down and cleanup a /// subscription. @interface RACDisposable : NSObject /// Whether the receiver has been disposed. /// /// Use of this property is discouraged, since it may be set to `YES` /// concurrently at any time. /// /// This property is not KVO-compliant. @property (atomic, assign, getter = isDisposed, readonly) BOOL disposed; + (instancetype)disposableWithBlock:(void (^)(void))block; /// Performs the disposal work. Can be called multiple times, though subsequent /// calls won't do anything. - (void)dispose; /// Returns a new disposable which will dispose of this disposable when it gets /// dealloc'd. - (RACScopedDisposable *)asScopedDisposable; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDisposable.m ================================================ // // RACDisposable.m // ReactiveCocoa // // Created by Josh Abernathy on 3/16/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACDisposable.h" #import "RACScopedDisposable.h" #import @interface RACDisposable () { // A copied block of type void (^)(void) containing the logic for disposal, // a pointer to `self` if no logic should be performed upon disposal, or // NULL if the receiver is already disposed. // // This should only be used atomically. void * volatile _disposeBlock; } @end @implementation RACDisposable #pragma mark Properties - (BOOL)isDisposed { return _disposeBlock == NULL; } #pragma mark Lifecycle - (id)init { self = [super init]; if (self == nil) return nil; _disposeBlock = (__bridge void *)self; OSMemoryBarrier(); return self; } - (id)initWithBlock:(void (^)(void))block { NSCParameterAssert(block != nil); self = [super init]; if (self == nil) return nil; _disposeBlock = (void *)CFBridgingRetain([block copy]); OSMemoryBarrier(); return self; } + (instancetype)disposableWithBlock:(void (^)(void))block { return [[self alloc] initWithBlock:block]; } - (void)dealloc { if (_disposeBlock == NULL || _disposeBlock == (__bridge void *)self) return; CFRelease(_disposeBlock); _disposeBlock = NULL; } #pragma mark Disposal - (void)dispose { void (^disposeBlock)(void) = NULL; while (YES) { void *blockPtr = _disposeBlock; if (OSAtomicCompareAndSwapPtrBarrier(blockPtr, NULL, &_disposeBlock)) { if (blockPtr != (__bridge void *)self) { disposeBlock = CFBridgingRelease(blockPtr); } break; } } if (disposeBlock != nil) disposeBlock(); } #pragma mark Scoped Disposables - (RACScopedDisposable *)asScopedDisposable { return [RACScopedDisposable scopedDisposableWithDisposable:self]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicPropertySuperclass.h ================================================ // Copyright (c) 2015 GitHub. All rights reserved. #import /// This superclass is an implementation detail of DynamicProperty. Do /// not use it. @interface RACDynamicPropertySuperclass : NSObject @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicPropertySuperclass.m ================================================ // Copyright (c) 2015 GitHub. All rights reserved. #import "RACDynamicPropertySuperclass.h" @interface RACDynamicPropertySuperclass () @property id value; @property id rac_value; @end @implementation RACDynamicPropertySuperclass - (id)value { return self.rac_value; } - (void)setValue:(id)value { self.rac_value = value; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSequence.h ================================================ // // RACDynamicSequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACSequence.h" // Private class that implements a sequence dynamically using blocks. @interface RACDynamicSequence : RACSequence // Returns a sequence which evaluates `dependencyBlock` only once, the first // time either `headBlock` or `tailBlock` is evaluated. The result of // `dependencyBlock` will be passed into `headBlock` and `tailBlock` when // invoked. + (RACSequence *)sequenceWithLazyDependency:(id (^)(void))dependencyBlock headBlock:(id (^)(id dependency))headBlock tailBlock:(RACSequence *(^)(id dependency))tailBlock; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSequence.m ================================================ // // RACDynamicSequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACDynamicSequence.h" #import // Determines how RACDynamicSequences will be deallocated before the next one is // shifted onto the autorelease pool. // // This avoids stack overflows when deallocating long chains of dynamic // sequences. #define DEALLOC_OVERFLOW_GUARD 100 @interface RACDynamicSequence () { // The value for the "head" property, if it's been evaluated already. // // Because it's legal for head to be nil, this ivar is valid any time // headBlock is nil. // // This ivar should only be accessed while synchronized on self. id _head; // The value for the "tail" property, if it's been evaluated already. // // Because it's legal for tail to be nil, this ivar is valid any time // tailBlock is nil. // // This ivar should only be accessed while synchronized on self. RACSequence *_tail; // The result of an evaluated `dependencyBlock`. // // This ivar is valid any time `hasDependency` is YES and `dependencyBlock` // is nil. // // This ivar should only be accessed while synchronized on self. id _dependency; } // A block used to evaluate head. This should be set to nil after `_head` has been // initialized. // // This is marked `strong` instead of `copy` because of some bizarre block // copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506. // // The signature of this block varies based on the value of `hasDependency`: // // - If YES, this block is of type `id (^)(id)`. // - If NO, this block is of type `id (^)(void)`. // // This property should only be accessed while synchronized on self. @property (nonatomic, strong) id headBlock; // A block used to evaluate tail. This should be set to nil after `_tail` has been // initialized. // // This is marked `strong` instead of `copy` because of some bizarre block // copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506. // // The signature of this block varies based on the value of `hasDependency`: // // - If YES, this block is of type `RACSequence * (^)(id)`. // - If NO, this block is of type `RACSequence * (^)(void)`. // // This property should only be accessed while synchronized on self. @property (nonatomic, strong) id tailBlock; // Whether the receiver was initialized with a `dependencyBlock`. // // This property should only be accessed while synchronized on self. @property (nonatomic, assign) BOOL hasDependency; // A dependency which must be evaluated before `headBlock` and `tailBlock`. This // should be set to nil after `_dependency` and `dependencyBlockExecuted` have // been set. // // This is marked `strong` instead of `copy` because of some bizarre block // copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506. // // This property should only be accessed while synchronized on self. @property (nonatomic, strong) id (^dependencyBlock)(void); @end @implementation RACDynamicSequence #pragma mark Lifecycle + (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock { NSCParameterAssert(headBlock != nil); RACDynamicSequence *seq = [[RACDynamicSequence alloc] init]; seq.headBlock = [headBlock copy]; seq.tailBlock = [tailBlock copy]; seq.hasDependency = NO; return seq; } + (RACSequence *)sequenceWithLazyDependency:(id (^)(void))dependencyBlock headBlock:(id (^)(id dependency))headBlock tailBlock:(RACSequence *(^)(id dependency))tailBlock { NSCParameterAssert(dependencyBlock != nil); NSCParameterAssert(headBlock != nil); RACDynamicSequence *seq = [[RACDynamicSequence alloc] init]; seq.headBlock = [headBlock copy]; seq.tailBlock = [tailBlock copy]; seq.dependencyBlock = [dependencyBlock copy]; seq.hasDependency = YES; return seq; } - (void)dealloc { static volatile int32_t directDeallocCount = 0; if (OSAtomicIncrement32(&directDeallocCount) >= DEALLOC_OVERFLOW_GUARD) { OSAtomicAdd32(-DEALLOC_OVERFLOW_GUARD, &directDeallocCount); // Put this sequence's tail onto the autorelease pool so we stop // recursing. __autoreleasing RACSequence *tail __attribute__((unused)) = _tail; } _tail = nil; } #pragma mark RACSequence - (id)head { @synchronized (self) { id untypedHeadBlock = self.headBlock; if (untypedHeadBlock == nil) return _head; if (self.hasDependency) { if (self.dependencyBlock != nil) { _dependency = self.dependencyBlock(); self.dependencyBlock = nil; } id (^headBlock)(id) = untypedHeadBlock; _head = headBlock(_dependency); } else { id (^headBlock)(void) = untypedHeadBlock; _head = headBlock(); } self.headBlock = nil; return _head; } } - (RACSequence *)tail { @synchronized (self) { id untypedTailBlock = self.tailBlock; if (untypedTailBlock == nil) return _tail; if (self.hasDependency) { if (self.dependencyBlock != nil) { _dependency = self.dependencyBlock(); self.dependencyBlock = nil; } RACSequence * (^tailBlock)(id) = untypedTailBlock; _tail = tailBlock(_dependency); } else { RACSequence * (^tailBlock)(void) = untypedTailBlock; _tail = tailBlock(); } if (_tail.name == nil) _tail.name = self.name; self.tailBlock = nil; return _tail; } } #pragma mark NSObject - (NSString *)description { id head = @"(unresolved)"; id tail = @"(unresolved)"; @synchronized (self) { if (self.headBlock == nil) head = _head; if (self.tailBlock == nil) { tail = _tail; if (tail == self) tail = @"(self)"; } } return [NSString stringWithFormat:@"<%@: %p>{ name = %@, head = %@, tail = %@ }", self.class, self, self.name, head, tail]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSignal.h ================================================ // // RACDynamicSignal.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSignal.h" // A private `RACSignal` subclasses that implements its subscription behavior // using a block. @interface RACDynamicSignal : RACSignal + (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSignal.m ================================================ // // RACDynamicSignal.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACDynamicSignal.h" #import #import "RACCompoundDisposable.h" #import "RACPassthroughSubscriber.h" #import "RACScheduler+Private.h" #import "RACSubscriber.h" #import @interface RACDynamicSignal () // The block to invoke for each subscriber. @property (nonatomic, copy, readonly) RACDisposable * (^didSubscribe)(id subscriber); @end @implementation RACDynamicSignal #pragma mark Lifecycle + (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe { RACDynamicSignal *signal = [[self alloc] init]; signal->_didSubscribe = [didSubscribe copy]; return [signal setNameWithFormat:@"+createSignal:"]; } #pragma mark Managing Subscribers - (RACDisposable *)subscribe:(id)subscriber { NSCParameterAssert(subscriber != nil); RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; subscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable]; if (self.didSubscribe != NULL) { RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{ RACDisposable *innerDisposable = self.didSubscribe(subscriber); [disposable addDisposable:innerDisposable]; }]; [disposable addDisposable:schedulingDisposable]; } return disposable; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEagerSequence.h ================================================ // // RACEagerSequence.h // ReactiveCocoa // // Created by Uri Baghin on 02/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACArraySequence.h" // Private class that implements an eager sequence. @interface RACEagerSequence : RACArraySequence @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEagerSequence.m ================================================ // // RACEagerSequence.m // ReactiveCocoa // // Created by Uri Baghin on 02/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACEagerSequence.h" #import "NSObject+RACDescription.h" #import "RACArraySequence.h" @implementation RACEagerSequence #pragma mark RACStream + (instancetype)return:(id)value { return [[self sequenceWithArray:@[ value ] offset:0] setNameWithFormat:@"+return: %@", RACDescription(value)]; } - (instancetype)bind:(RACStreamBindBlock (^)(void))block { NSCParameterAssert(block != nil); RACStreamBindBlock bindBlock = block(); NSArray *currentArray = self.array; NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:currentArray.count]; for (id value in currentArray) { BOOL stop = NO; RACSequence *boundValue = (id)bindBlock(value, &stop); if (boundValue == nil) break; for (id x in boundValue) { [resultArray addObject:x]; } if (stop) break; } return [[self.class sequenceWithArray:resultArray offset:0] setNameWithFormat:@"[%@] -bind:", self.name]; } - (instancetype)concat:(RACSequence *)sequence { NSCParameterAssert(sequence != nil); NSCParameterAssert([sequence isKindOfClass:RACSequence.class]); NSArray *array = [self.array arrayByAddingObjectsFromArray:sequence.array]; return [[self.class sequenceWithArray:array offset:0] setNameWithFormat:@"[%@] -concat: %@", self.name, sequence]; } #pragma mark Extended methods - (RACSequence *)eagerSequence { return self; } - (RACSequence *)lazySequence { return [RACArraySequence sequenceWithArray:self.array offset:0]; } - (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *rest))reduce { return [super foldRightWithStart:start reduce:^(id first, RACSequence *rest) { return reduce(first, rest.eagerSequence); }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySequence.h ================================================ // // RACEmptySequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACSequence.h" // Private class representing an empty sequence. @interface RACEmptySequence : RACSequence @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySequence.m ================================================ // // RACEmptySequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACEmptySequence.h" @implementation RACEmptySequence #pragma mark Lifecycle + (instancetype)empty { static id singleton; static dispatch_once_t pred; dispatch_once(&pred, ^{ singleton = [[self alloc] init]; }); return singleton; } #pragma mark RACSequence - (id)head { return nil; } - (RACSequence *)tail { return nil; } - (RACSequence *)bind:(RACStreamBindBlock)bindBlock passingThroughValuesFromSequence:(RACSequence *)passthroughSequence { return passthroughSequence ?: self; } #pragma mark NSCoding - (Class)classForCoder { // Empty sequences should be encoded as themselves, not array sequences. return self.class; } - (id)initWithCoder:(NSCoder *)coder { // Return the singleton. return self.class.empty; } - (void)encodeWithCoder:(NSCoder *)coder { } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ name = %@ }", self.class, self, self.name]; } - (NSUInteger)hash { // This hash isn't ideal, but it's better than -[RACSequence hash], which // would just be zero because we have no head. return (NSUInteger)(__bridge void *)self; } - (BOOL)isEqual:(RACSequence *)seq { return (self == seq); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySignal.h ================================================ // // RACEmptySignal.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSignal.h" // A private `RACSignal` subclasses that synchronously sends completed to any // subscribers. @interface RACEmptySignal : RACSignal + (RACSignal *)empty; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySignal.m ================================================ // // RACEmptySignal.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACEmptySignal.h" #import "RACScheduler+Private.h" #import "RACSubscriber.h" @implementation RACEmptySignal #pragma mark Properties // Only allow this signal's name to be customized in DEBUG, since it's // a singleton in release builds (see +empty). - (void)setName:(NSString *)name { #ifdef DEBUG [super setName:name]; #endif } - (NSString *)name { #ifdef DEBUG return super.name; #else return @"+empty"; #endif } #pragma mark Lifecycle + (RACSignal *)empty { #ifdef DEBUG // Create multiple instances of this class in DEBUG so users can set custom // names on each. return [[[self alloc] init] setNameWithFormat:@"+empty"]; #else static id singleton; static dispatch_once_t pred; dispatch_once(&pred, ^{ singleton = [[self alloc] init]; }); return singleton; #endif } #pragma mark Subscription - (RACDisposable *)subscribe:(id)subscriber { NSCParameterAssert(subscriber != nil); return [RACScheduler.subscriptionScheduler schedule:^{ [subscriber sendCompleted]; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACErrorSignal.h ================================================ // // RACErrorSignal.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSignal.h" // A private `RACSignal` subclasses that synchronously sends an error to any // subscribers. @interface RACErrorSignal : RACSignal + (RACSignal *)error:(NSError *)error; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACErrorSignal.m ================================================ // // RACErrorSignal.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACErrorSignal.h" #import "RACScheduler+Private.h" #import "RACSubscriber.h" @interface RACErrorSignal () // The error to send upon subscription. @property (nonatomic, strong, readonly) NSError *error; @end @implementation RACErrorSignal #pragma mark Lifecycle + (RACSignal *)error:(NSError *)error { RACErrorSignal *signal = [[self alloc] init]; signal->_error = error; #ifdef DEBUG [signal setNameWithFormat:@"+error: %@", error]; #else signal.name = @"+error:"; #endif return signal; } #pragma mark Subscription - (RACDisposable *)subscribe:(id)subscriber { NSCParameterAssert(subscriber != nil); return [RACScheduler.subscriptionScheduler schedule:^{ [subscriber sendError:self.error]; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEvent.h ================================================ // // RACEvent.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-01-07. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import /// Describes the type of a RACEvent. /// /// RACEventTypeCompleted - A `completed` event. /// RACEventTypeError - An `error` event. /// RACEventTypeNext - A `next` event. typedef NS_ENUM(NSUInteger, RACEventType) { RACEventTypeCompleted, RACEventTypeError, RACEventTypeNext }; /// Represents an event sent by a RACSignal. /// /// This corresponds to the `Notification` class in Rx. @interface RACEvent : NSObject /// Returns a singleton RACEvent representing the `completed` event. + (instancetype)completedEvent; /// Returns a new event of type RACEventTypeError, containing the given error. + (instancetype)eventWithError:(NSError *)error; /// Returns a new event of type RACEventTypeNext, containing the given value. + (instancetype)eventWithValue:(id)value; /// The type of event represented by the receiver. @property (nonatomic, assign, readonly) RACEventType eventType; /// Returns whether the receiver is of type RACEventTypeCompleted or /// RACEventTypeError. @property (nonatomic, getter = isFinished, assign, readonly) BOOL finished; /// The error associated with an event of type RACEventTypeError. This will be /// nil for all other event types. @property (nonatomic, strong, readonly) NSError *error; /// The value associated with an event of type RACEventTypeNext. This will be /// nil for all other event types. @property (nonatomic, strong, readonly) id value; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEvent.m ================================================ // // RACEvent.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-01-07. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACEvent.h" @interface RACEvent () // An object associated with this event. This will be used for the error and // value properties. @property (nonatomic, strong, readonly) id object; // Initializes the receiver with the given type and object. - (id)initWithEventType:(RACEventType)type object:(id)object; @end @implementation RACEvent #pragma mark Properties - (BOOL)isFinished { return self.eventType == RACEventTypeCompleted || self.eventType == RACEventTypeError; } - (NSError *)error { return (self.eventType == RACEventTypeError ? self.object : nil); } - (id)value { return (self.eventType == RACEventTypeNext ? self.object : nil); } #pragma mark Lifecycle + (instancetype)completedEvent { static dispatch_once_t pred; static id singleton; dispatch_once(&pred, ^{ singleton = [[self alloc] initWithEventType:RACEventTypeCompleted object:nil]; }); return singleton; } + (instancetype)eventWithError:(NSError *)error { return [[self alloc] initWithEventType:RACEventTypeError object:error]; } + (instancetype)eventWithValue:(id)value { return [[self alloc] initWithEventType:RACEventTypeNext object:value]; } - (id)initWithEventType:(RACEventType)type object:(id)object { self = [super init]; if (self == nil) return nil; _eventType = type; _object = object; return self; } #pragma mark NSCopying - (id)copyWithZone:(NSZone *)zone { return self; } #pragma mark NSObject - (NSString *)description { NSString *eventDescription = nil; switch (self.eventType) { case RACEventTypeCompleted: eventDescription = @"completed"; break; case RACEventTypeError: eventDescription = [NSString stringWithFormat:@"error = %@", self.object]; break; case RACEventTypeNext: eventDescription = [NSString stringWithFormat:@"next = %@", self.object]; break; default: NSCAssert(NO, @"Unrecognized event type: %i", (int)self.eventType); } return [NSString stringWithFormat:@"<%@: %p>{ %@ }", self.class, self, eventDescription]; } - (NSUInteger)hash { return self.eventType ^ [self.object hash]; } - (BOOL)isEqual:(id)event { if (event == self) return YES; if (![event isKindOfClass:RACEvent.class]) return NO; if (self.eventType != [event eventType]) return NO; // Catches the nil case too. return self.object == [event object] || [self.object isEqual:[event object]]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACGroupedSignal.h ================================================ // // RACGroupedSignal.h // ReactiveCocoa // // Created by Josh Abernathy on 5/2/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubject.h" /// A grouped signal is used by -[RACSignal groupBy:transform:]. @interface RACGroupedSignal : RACSubject /// The key shared by the group. @property (nonatomic, readonly, copy) id key; + (instancetype)signalWithKey:(id)key; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACGroupedSignal.m ================================================ // // RACGroupedSignal.m // ReactiveCocoa // // Created by Josh Abernathy on 5/2/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACGroupedSignal.h" @interface RACGroupedSignal () @property (nonatomic, copy) id key; @end @implementation RACGroupedSignal #pragma mark API + (instancetype)signalWithKey:(id)key { RACGroupedSignal *subject = [self subject]; subject.key = key; return subject; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACImmediateScheduler.h ================================================ // // RACImmediateScheduler.h // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACScheduler.h" // A private scheduler which immediately executes its scheduled blocks. @interface RACImmediateScheduler : RACScheduler @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACImmediateScheduler.m ================================================ // // RACImmediateScheduler.m // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACImmediateScheduler.h" #import "RACScheduler+Private.h" @implementation RACImmediateScheduler #pragma mark Lifecycle - (id)init { return [super initWithName:@"com.ReactiveCocoa.RACScheduler.immediateScheduler"]; } #pragma mark RACScheduler - (RACDisposable *)schedule:(void (^)(void))block { NSCParameterAssert(block != NULL); block(); return nil; } - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { NSCParameterAssert(date != nil); NSCParameterAssert(block != NULL); [NSThread sleepUntilDate:date]; block(); return nil; } - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { NSCAssert(NO, @"+[RACScheduler immediateScheduler] does not support %@.", NSStringFromSelector(_cmd)); return nil; } - (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock { for (__block NSUInteger remaining = 1; remaining > 0; remaining--) { recursiveBlock(^{ remaining++; }); } return nil; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACIndexSetSequence.h ================================================ // // RACIndexSetSequence.h // ReactiveCocoa // // Created by Sergey Gavrilyuk on 12/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSequence.h" // Private class that adapts an array to the RACSequence interface. @interface RACIndexSetSequence : RACSequence + (instancetype)sequenceWithIndexSet:(NSIndexSet *)indexSet; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACIndexSetSequence.m ================================================ // // RACIndexSetSequence.m // ReactiveCocoa // // Created by Sergey Gavrilyuk on 12/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACIndexSetSequence.h" @interface RACIndexSetSequence () // A buffer holding the `NSUInteger` values to enumerate over. // // This is mostly used for memory management. Most access should go through // `indexes` instead. @property (nonatomic, strong, readonly) NSData *data; // The indexes that this sequence should enumerate. @property (nonatomic, readonly) const NSUInteger *indexes; // The number of indexes to enumerate. @property (nonatomic, readonly) NSUInteger count; @end @implementation RACIndexSetSequence #pragma mark Lifecycle + (instancetype)sequenceWithIndexSet:(NSIndexSet *)indexSet { NSUInteger count = indexSet.count; if (count == 0) return self.empty; NSUInteger sizeInBytes = sizeof(NSUInteger) * count; NSMutableData *data = [[NSMutableData alloc] initWithCapacity:sizeInBytes]; [indexSet getIndexes:data.mutableBytes maxCount:count inIndexRange:NULL]; RACIndexSetSequence *seq = [[self alloc] init]; seq->_data = data; seq->_indexes = data.bytes; seq->_count = count; return seq; } + (instancetype)sequenceWithIndexSetSequence:(RACIndexSetSequence *)indexSetSequence offset:(NSUInteger)offset { NSCParameterAssert(offset < indexSetSequence.count); RACIndexSetSequence *seq = [[self alloc] init]; seq->_data = indexSetSequence.data; seq->_indexes = indexSetSequence.indexes + offset; seq->_count = indexSetSequence.count - offset; return seq; } #pragma mark RACSequence - (id)head { return @(self.indexes[0]); } - (RACSequence *)tail { if (self.count <= 1) return [RACSequence empty]; return [self.class sequenceWithIndexSetSequence:self offset:1]; } #pragma mark NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id[])stackbuf count:(NSUInteger)len { NSCParameterAssert(len > 0); if (state->state >= self.count) { // Enumeration has completed. return 0; } if (state->state == 0) { // Enumeration begun, mark the mutation flag. state->mutationsPtr = state->extra; } state->itemsPtr = stackbuf; unsigned long index = 0; while (index < MIN(self.count - state->state, len)) { stackbuf[index] = @(self.indexes[index + state->state]); ++index; } state->state += index; return index; } #pragma mark NSObject - (NSString *)description { NSMutableString *indexesStr = [NSMutableString string]; for (unsigned int i = 0; i < self.count; ++i) { if (i > 0) [indexesStr appendString:@", "]; [indexesStr appendFormat:@"%lu", (unsigned long)self.indexes[i]]; } return [NSString stringWithFormat:@"<%@: %p>{ name = %@, indexes = %@ }", self.class, self, self.name, indexesStr]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOChannel.h ================================================ // // RACKVOChannel.h // ReactiveCocoa // // Created by Uri Baghin on 27/12/2012. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACChannel.h" #import #import "metamacros.h" /// Creates a RACKVOChannel to the given key path. When the targeted object /// deallocates, the channel will complete. /// /// If RACChannelTo() is used as an expression, it returns a RACChannelTerminal that /// can be used to watch the specified property for changes, and set new values /// for it. The terminal will start with the property's current value upon /// subscription. /// /// If RACChannelTo() is used on the left-hand side of an assignment, there must a /// RACChannelTerminal on the right-hand side of the assignment. The two will be /// subscribed to one another: the property's value is immediately set to the /// value of the channel terminal on the right-hand side, and subsequent changes /// to either terminal will be reflected on the other. /// /// There are two different versions of this macro: /// /// - RACChannelTo(TARGET, KEYPATH, NILVALUE) will create a channel to the `KEYPATH` /// of `TARGET`. If the terminal is ever sent a `nil` value, the property will /// be set to `NILVALUE` instead. `NILVALUE` may itself be `nil` for object /// properties, but an NSValue should be used for primitive properties, to /// avoid an exception if `nil` is sent (which might occur if an intermediate /// object is set to `nil`). /// - RACChannelTo(TARGET, KEYPATH) is the same as the above, but `NILVALUE` defaults to /// `nil`. /// /// Examples /// /// RACChannelTerminal *integerChannel = RACChannelTo(self, integerProperty, @42); /// /// // Sets self.integerProperty to 5. /// [integerChannel sendNext:@5]; /// /// // Logs the current value of self.integerProperty, and all future changes. /// [integerChannel subscribeNext:^(id value) { /// NSLog(@"value: %@", value); /// }]; /// /// // Binds properties to each other, taking the initial value from the right /// side. /// RACChannelTo(view, objectProperty) = RACChannelTo(model, objectProperty); /// RACChannelTo(view, integerProperty, @2) = RACChannelTo(model, integerProperty, @10); #define RACChannelTo(TARGET, ...) \ metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ (RACChannelTo_(TARGET, __VA_ARGS__, nil)) \ (RACChannelTo_(TARGET, __VA_ARGS__)) /// Do not use this directly. Use the RACChannelTo macro above. #define RACChannelTo_(TARGET, KEYPATH, NILVALUE) \ [[RACKVOChannel alloc] initWithTarget:(TARGET) keyPath:@keypath(TARGET, KEYPATH) nilValue:(NILVALUE)][@keypath(RACKVOChannel.new, followingTerminal)] /// A RACChannel that observes a KVO-compliant key path for changes. @interface RACKVOChannel : RACChannel /// Initializes a channel that will observe the given object and key path. /// /// The current value of the key path, and future KVO notifications for the given /// key path, will be sent to subscribers of the channel's `followingTerminal`. /// Values sent to the `followingTerminal` will be set at the given key path using /// key-value coding. /// /// When the target object deallocates, the channel will complete. Signal errors /// are considered undefined behavior. /// /// This is the designated initializer for this class. /// /// target - The object to bind to. /// keyPath - The key path to observe and set the value of. /// nilValue - The value to set at the key path whenever a `nil` value is /// received. This may be nil when connecting to object properties, but /// an NSValue should be used for primitive properties, to avoid an /// exception if `nil` is received (which might occur if an intermediate /// object is set to `nil`). #if OS_OBJECT_HAVE_OBJC_SUPPORT - (id)initWithTarget:(__weak NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue; #else // Swift builds with OS_OBJECT_HAVE_OBJC_SUPPORT=0 for Playgrounds and LLDB :( - (id)initWithTarget:(NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue; #endif - (id)init __attribute__((unavailable("Use -initWithTarget:keyPath:nilValue: instead"))); @end /// Methods needed for the convenience macro. Do not call explicitly. @interface RACKVOChannel (RACChannelTo) - (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key; - (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOChannel.m ================================================ // // RACKVOChannel.m // ReactiveCocoa // // Created by Uri Baghin on 27/12/2012. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACKVOChannel.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACKVOWrapper.h" #import "NSString+RACKeyPathUtilities.h" #import "RACChannel.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" // Key for the array of RACKVOChannel's additional thread local // data in the thread dictionary. static NSString * const RACKVOChannelDataDictionaryKey = @"RACKVOChannelKey"; // Wrapper class for additional thread local data. @interface RACKVOChannelData : NSObject // The flag used to ignore updates the channel itself has triggered. @property (nonatomic, assign) BOOL ignoreNextUpdate; // A pointer to the owner of the data. Only use this for pointer comparison, // never as an object reference. @property (nonatomic, assign) void *owner; + (instancetype)dataForChannel:(RACKVOChannel *)channel; @end @interface RACKVOChannel () // The object whose key path the channel is wrapping. @property (atomic, weak) NSObject *target; // The key path the channel is wrapping. @property (nonatomic, copy, readonly) NSString *keyPath; // Returns the existing thread local data container or nil if none exists. @property (nonatomic, strong, readonly) RACKVOChannelData *currentThreadData; // Creates the thread local data container for the channel. - (void)createCurrentThreadData; // Destroy the thread local data container for the channel. - (void)destroyCurrentThreadData; @end @implementation RACKVOChannel #pragma mark Properties - (RACKVOChannelData *)currentThreadData { NSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey]; for (RACKVOChannelData *data in dataArray) { if (data.owner == (__bridge void *)self) return data; } return nil; } #pragma mark Lifecycle - (id)initWithTarget:(__weak NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue { NSCParameterAssert(keyPath.rac_keyPathComponents.count > 0); NSObject *strongTarget = target; self = [super init]; if (self == nil) return nil; _target = target; _keyPath = [keyPath copy]; [self.leadingTerminal setNameWithFormat:@"[-initWithTarget: %@ keyPath: %@ nilValue: %@] -leadingTerminal", target, keyPath, nilValue]; [self.followingTerminal setNameWithFormat:@"[-initWithTarget: %@ keyPath: %@ nilValue: %@] -followingTerminal", target, keyPath, nilValue]; if (strongTarget == nil) { [self.leadingTerminal sendCompleted]; return self; } // Observe the key path on target for changes and forward the changes to the // terminal. // // Intentionally capturing `self` strongly in the blocks below, so the // channel object stays alive while observing. RACDisposable *observationDisposable = [strongTarget rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { // If the change wasn't triggered by deallocation, only affects the last // path component, and ignoreNextUpdate is set, then it was triggered by // this channel and should not be forwarded. if (!causedByDealloc && affectedOnlyLastComponent && self.currentThreadData.ignoreNextUpdate) { [self destroyCurrentThreadData]; return; } [self.leadingTerminal sendNext:value]; }]; NSString *keyPathByDeletingLastKeyPathComponent = keyPath.rac_keyPathByDeletingLastKeyPathComponent; NSArray *keyPathComponents = keyPath.rac_keyPathComponents; NSUInteger keyPathComponentsCount = keyPathComponents.count; NSString *lastKeyPathComponent = keyPathComponents.lastObject; // Update the value of the property with the values received. [[self.leadingTerminal finally:^{ [observationDisposable dispose]; }] subscribeNext:^(id x) { // Check the value of the second to last key path component. Since the // channel can only update the value of a property on an object, and not // update intermediate objects, it can only update the value of the whole // key path if this object is not nil. NSObject *object = (keyPathComponentsCount > 1 ? [self.target valueForKeyPath:keyPathByDeletingLastKeyPathComponent] : self.target); if (object == nil) return; // Set the ignoreNextUpdate flag before setting the value so this channel // ignores the value in the subsequent -didChangeValueForKey: callback. [self createCurrentThreadData]; self.currentThreadData.ignoreNextUpdate = YES; [object setValue:x ?: nilValue forKey:lastKeyPathComponent]; } error:^(NSError *error) { NSCAssert(NO, @"Received error in %@: %@", self, error); // Log the error if we're running with assertions disabled. NSLog(@"Received error in %@: %@", self, error); }]; // Capture `self` weakly for the target's deallocation disposable, so we can // freely deallocate if we complete before then. @weakify(self); [strongTarget.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ @strongify(self); [self.leadingTerminal sendCompleted]; self.target = nil; }]]; return self; } - (void)createCurrentThreadData { NSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey]; if (dataArray == nil) { dataArray = [NSMutableArray array]; NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey] = dataArray; [dataArray addObject:[RACKVOChannelData dataForChannel:self]]; return; } for (RACKVOChannelData *data in dataArray) { if (data.owner == (__bridge void *)self) return; } [dataArray addObject:[RACKVOChannelData dataForChannel:self]]; } - (void)destroyCurrentThreadData { NSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey]; NSUInteger index = [dataArray indexOfObjectPassingTest:^ BOOL (RACKVOChannelData *data, NSUInteger idx, BOOL *stop) { return data.owner == (__bridge void *)self; }]; if (index != NSNotFound) [dataArray removeObjectAtIndex:index]; } @end @implementation RACKVOChannel (RACChannelTo) - (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key { NSCParameterAssert(key != nil); RACChannelTerminal *terminal = [self valueForKey:key]; NSCAssert([terminal isKindOfClass:RACChannelTerminal.class], @"Key \"%@\" does not identify a channel terminal", key); return terminal; } - (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key { NSCParameterAssert(otherTerminal != nil); RACChannelTerminal *selfTerminal = [self objectForKeyedSubscript:key]; [otherTerminal subscribe:selfTerminal]; [[selfTerminal skip:1] subscribe:otherTerminal]; } @end @implementation RACKVOChannelData + (instancetype)dataForChannel:(RACKVOChannel *)channel { RACKVOChannelData *data = [[self alloc] init]; data->_owner = (__bridge void *)channel; return data; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOProxy.h ================================================ // // RACKVOProxy.h // ReactiveCocoa // // Created by Richard Speyer on 4/10/14. // Copyright (c) 2014 GitHub, Inc. All rights reserved. // #import /// A singleton that can act as a proxy between a KVO observation and a RAC /// subscriber, in order to protect against KVO lifetime issues. @interface RACKVOProxy : NSObject /// Returns the singleton KVO proxy object. + (instancetype)sharedProxy; /// Registers an observer with the proxy, such that when the proxy receives a /// KVO change with the given context, it forwards it to the observer. /// /// observer - True observer of the KVO change. Must not be nil. /// context - Arbitrary context object used to differentiate multiple /// observations of the same keypath. Must be unique, cannot be nil. - (void)addObserver:(__weak NSObject *)observer forContext:(void *)context; /// Removes an observer from the proxy. Parameters must match those passed to /// addObserver:forContext:. /// /// observer - True observer of the KVO change. Must not be nil. /// context - Arbitrary context object used to differentiate multiple /// observations of the same keypath. Must be unique, cannot be nil. - (void)removeObserver:(NSObject *)observer forContext:(void *)context; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOProxy.m ================================================ // // RACKVOProxy.m // ReactiveCocoa // // Created by Richard Speyer on 4/10/14. // Copyright (c) 2014 GitHub, Inc. All rights reserved. // #import "RACKVOProxy.h" @interface RACKVOProxy() @property (strong, nonatomic, readonly) NSMapTable *trampolines; @property (strong, nonatomic, readonly) dispatch_queue_t queue; @end @implementation RACKVOProxy + (instancetype)sharedProxy { static RACKVOProxy *proxy; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ proxy = [[self alloc] init]; }); return proxy; } - (instancetype)init { self = [super init]; if (self == nil) return nil; _queue = dispatch_queue_create("org.reactivecocoa.ReactiveCocoa.RACKVOProxy", DISPATCH_QUEUE_SERIAL); _trampolines = [NSMapTable strongToWeakObjectsMapTable]; return self; } - (void)addObserver:(__weak NSObject *)observer forContext:(void *)context { NSValue *valueContext = [NSValue valueWithPointer:context]; dispatch_sync(self.queue, ^{ [self.trampolines setObject:observer forKey:valueContext]; }); } - (void)removeObserver:(NSObject *)observer forContext:(void *)context { NSValue *valueContext = [NSValue valueWithPointer:context]; dispatch_sync(self.queue, ^{ [self.trampolines removeObjectForKey:valueContext]; }); } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSValue *valueContext = [NSValue valueWithPointer:context]; __block NSObject *trueObserver; dispatch_sync(self.queue, ^{ trueObserver = [self.trampolines objectForKey:valueContext]; }); if (trueObserver != nil) { [trueObserver observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOTrampoline.h ================================================ // // RACKVOTrampoline.h // ReactiveCocoa // // Created by Josh Abernathy on 1/15/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import "NSObject+RACKVOWrapper.h" #import "RACDisposable.h" // A private trampoline object that represents a KVO observation. // // Disposing of the trampoline will stop observation. @interface RACKVOTrampoline : RACDisposable // Initializes the receiver with the given parameters. // // target - The object whose key path should be observed. Cannot be nil. // observer - The object that gets notified when the value at the key path // changes. Can be nil. // keyPath - The key path on `target` to observe. Cannot be nil. // options - Any key value observing options to use in the observation. // block - The block to call when the value at the observed key path changes. // Cannot be nil. // // Returns the initialized object. - (id)initWithTarget:(__weak NSObject *)target observer:(__weak NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOTrampoline.m ================================================ // // RACKVOTrampoline.m // ReactiveCocoa // // Created by Josh Abernathy on 1/15/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACKVOTrampoline.h" #import "NSObject+RACDeallocating.h" #import "RACCompoundDisposable.h" #import "RACKVOProxy.h" @interface RACKVOTrampoline () // The keypath which the trampoline is observing. @property (nonatomic, readonly, copy) NSString *keyPath; // These properties should only be manipulated while synchronized on the // receiver. @property (nonatomic, readonly, copy) RACKVOBlock block; @property (nonatomic, readonly, unsafe_unretained) NSObject *unsafeTarget; @property (nonatomic, readonly, weak) NSObject *weakTarget; @property (nonatomic, readonly, weak) NSObject *observer; @end @implementation RACKVOTrampoline #pragma mark Lifecycle - (id)initWithTarget:(__weak NSObject *)target observer:(__weak NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block { NSCParameterAssert(keyPath != nil); NSCParameterAssert(block != nil); NSObject *strongTarget = target; if (strongTarget == nil) return nil; self = [super init]; if (self == nil) return nil; _keyPath = [keyPath copy]; _block = [block copy]; _weakTarget = target; _unsafeTarget = strongTarget; _observer = observer; [RACKVOProxy.sharedProxy addObserver:self forContext:(__bridge void *)self]; [strongTarget addObserver:RACKVOProxy.sharedProxy forKeyPath:self.keyPath options:options context:(__bridge void *)self]; [strongTarget.rac_deallocDisposable addDisposable:self]; [self.observer.rac_deallocDisposable addDisposable:self]; return self; } - (void)dealloc { [self dispose]; } #pragma mark Observation - (void)dispose { NSObject *target; NSObject *observer; @synchronized (self) { _block = nil; // The target should still exist at this point, because we still need to // tear down its KVO observation. Therefore, we can use the unsafe // reference (and need to, because the weak one will have been zeroed by // now). target = self.unsafeTarget; observer = self.observer; _unsafeTarget = nil; _observer = nil; } [target.rac_deallocDisposable removeDisposable:self]; [observer.rac_deallocDisposable removeDisposable:self]; [target removeObserver:RACKVOProxy.sharedProxy forKeyPath:self.keyPath context:(__bridge void *)self]; [RACKVOProxy.sharedProxy removeObserver:self forContext:(__bridge void *)self]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context != (__bridge void *)self) { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; return; } RACKVOBlock block; id observer; id target; @synchronized (self) { block = self.block; observer = self.observer; target = self.weakTarget; } if (block == nil || target == nil) return; block(target, observer, change); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACMulticastConnection+Private.h ================================================ // // RACMulticastConnection+Private.h // ReactiveCocoa // // Created by Josh Abernathy on 4/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACMulticastConnection.h" @class RACSubject; @interface RACMulticastConnection () - (id)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACMulticastConnection.h ================================================ // // RACMulticastConnection.h // ReactiveCocoa // // Created by Josh Abernathy on 4/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACDisposable; @class RACSignal; /// A multicast connection encapsulates the idea of sharing one subscription to a /// signal to many subscribers. This is most often needed if the subscription to /// the underlying signal involves side-effects or shouldn't be called more than /// once. /// /// The multicasted signal is only subscribed to when /// -[RACMulticastConnection connect] is called. Until that happens, no values /// will be sent on `signal`. See -[RACMulticastConnection autoconnect] for how /// -[RACMulticastConnection connect] can be called automatically. /// /// Note that you shouldn't create RACMulticastConnection manually. Instead use /// -[RACSignal publish] or -[RACSignal multicast:]. @interface RACMulticastConnection : NSObject /// The multicasted signal. @property (nonatomic, strong, readonly) RACSignal *signal; /// Connect to the underlying signal by subscribing to it. Calling this multiple /// times does nothing but return the existing connection's disposable. /// /// Returns the disposable for the subscription to the multicasted signal. - (RACDisposable *)connect; /// Connects to the underlying signal when the returned signal is first /// subscribed to, and disposes of the subscription to the multicasted signal /// when the returned signal has no subscribers. /// /// If new subscribers show up after being disposed, they'll subscribe and then /// be immediately disposed of. The returned signal will never re-connect to the /// multicasted signal. /// /// Returns the autoconnecting signal. - (RACSignal *)autoconnect; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACMulticastConnection.m ================================================ // // RACMulticastConnection.m // ReactiveCocoa // // Created by Josh Abernathy on 4/11/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACMulticastConnection.h" #import "RACMulticastConnection+Private.h" #import "RACDisposable.h" #import "RACSerialDisposable.h" #import "RACSubject.h" #import @interface RACMulticastConnection () { RACSubject *_signal; // When connecting, a caller should attempt to atomically swap the value of this // from `0` to `1`. // // If the swap is successful the caller is resposible for subscribing `_signal` // to `sourceSignal` and storing the returned disposable in `serialDisposable`. // // If the swap is unsuccessful it means that `_sourceSignal` has already been // connected and the caller has no action to take. int32_t volatile _hasConnected; } @property (nonatomic, readonly, strong) RACSignal *sourceSignal; @property (strong) RACSerialDisposable *serialDisposable; @end @implementation RACMulticastConnection #pragma mark Lifecycle - (id)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject { NSCParameterAssert(source != nil); NSCParameterAssert(subject != nil); self = [super init]; if (self == nil) return nil; _sourceSignal = source; _serialDisposable = [[RACSerialDisposable alloc] init]; _signal = subject; return self; } #pragma mark Connecting - (RACDisposable *)connect { BOOL shouldConnect = OSAtomicCompareAndSwap32Barrier(0, 1, &_hasConnected); if (shouldConnect) { self.serialDisposable.disposable = [self.sourceSignal subscribe:_signal]; } return self.serialDisposable; } - (RACSignal *)autoconnect { __block volatile int32_t subscriberCount = 0; return [[RACSignal createSignal:^(id subscriber) { OSAtomicIncrement32Barrier(&subscriberCount); RACDisposable *subscriptionDisposable = [self.signal subscribe:subscriber]; RACDisposable *connectionDisposable = [self connect]; return [RACDisposable disposableWithBlock:^{ [subscriptionDisposable dispose]; if (OSAtomicDecrement32Barrier(&subscriberCount) == 0) { [connectionDisposable dispose]; } }]; }] setNameWithFormat:@"[%@] -autoconnect", self.signal.name]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACPassthroughSubscriber.h ================================================ // // RACPassthroughSubscriber.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import "RACSubscriber.h" @class RACCompoundDisposable; @class RACSignal; // A private subscriber that passes through all events to another subscriber // while not disposed. @interface RACPassthroughSubscriber : NSObject // Initializes the receiver to pass through events until disposed. // // subscriber - The subscriber to forward events to. This must not be nil. // signal - The signal that will be sending events to the receiver. // disposable - When this disposable is disposed, no more events will be // forwarded. This must not be nil. // // Returns an initialized passthrough subscriber. - (instancetype)initWithSubscriber:(id)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACPassthroughSubscriber.m ================================================ // // RACPassthroughSubscriber.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACPassthroughSubscriber.h" #import "RACCompoundDisposable.h" #import "RACSignal.h" #import "RACSignalProvider.h" #if !defined(DTRACE_PROBES_DISABLED) || !DTRACE_PROBES_DISABLED static const char *cleanedDTraceString(NSString *original) { return [original stringByReplacingOccurrencesOfString:@"\\s+" withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, original.length)].UTF8String; } static const char *cleanedSignalDescription(RACSignal *signal) { NSString *desc = signal.description; NSRange range = [desc rangeOfString:@" name:"]; if (range.location != NSNotFound) { desc = [desc stringByReplacingCharactersInRange:range withString:@""]; } return cleanedDTraceString(desc); } #endif @interface RACPassthroughSubscriber () // The subscriber to which events should be forwarded. @property (nonatomic, strong, readonly) id innerSubscriber; // The signal sending events to this subscriber. // // This property isn't `weak` because it's only used for DTrace probes, so // a zeroing weak reference would incur an unnecessary performance penalty in // normal usage. @property (nonatomic, unsafe_unretained, readonly) RACSignal *signal; // A disposable representing the subscription. When disposed, no further events // should be sent to the `innerSubscriber`. @property (nonatomic, strong, readonly) RACCompoundDisposable *disposable; @end @implementation RACPassthroughSubscriber #pragma mark Lifecycle - (instancetype)initWithSubscriber:(id)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable { NSCParameterAssert(subscriber != nil); self = [super init]; if (self == nil) return nil; _innerSubscriber = subscriber; _signal = signal; _disposable = disposable; [self.innerSubscriber didSubscribeWithDisposable:self.disposable]; return self; } #pragma mark RACSubscriber - (void)sendNext:(id)value { if (self.disposable.disposed) return; if (RACSIGNAL_NEXT_ENABLED()) { RACSIGNAL_NEXT(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description), cleanedDTraceString([value description])); } [self.innerSubscriber sendNext:value]; } - (void)sendError:(NSError *)error { if (self.disposable.disposed) return; if (RACSIGNAL_ERROR_ENABLED()) { RACSIGNAL_ERROR(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description), cleanedDTraceString(error.description)); } [self.innerSubscriber sendError:error]; } - (void)sendCompleted { if (self.disposable.disposed) return; if (RACSIGNAL_COMPLETED_ENABLED()) { RACSIGNAL_COMPLETED(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description)); } [self.innerSubscriber sendCompleted]; } - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable { if (disposable != self.disposable) { [self.disposable addDisposable:disposable]; } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACQueueScheduler+Subclass.h ================================================ // // RACQueueScheduler+Subclass.h // ReactiveCocoa // // Created by Josh Abernathy on 6/6/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACQueueScheduler.h" #import "RACScheduler+Subclass.h" /// An interface for use by GCD queue-based subclasses. /// /// See RACScheduler+Subclass.h for subclassing notes. @interface RACQueueScheduler () /// The queue on which blocks are enqueued. #if OS_OBJECT_USE_OBJC @property (nonatomic, strong, readonly) dispatch_queue_t queue; #else // Swift builds with OS_OBJECT_HAVE_OBJC_SUPPORT=0 for Playgrounds and LLDB :( @property (nonatomic, assign, readonly) dispatch_queue_t queue; #endif /// Initializes the receiver with the name of the scheduler and the queue which /// the scheduler should use. /// /// name - The name of the scheduler. If nil, a default name will be used. /// queue - The queue upon which the receiver should enqueue scheduled blocks. /// This argument must not be NULL. /// /// Returns the initialized object. - (id)initWithName:(NSString *)name queue:(dispatch_queue_t)queue; /// Converts a date into a GCD time using dispatch_walltime(). /// /// date - The date to convert. This must not be nil. + (dispatch_time_t)wallTimeWithDate:(NSDate *)date; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACQueueScheduler.h ================================================ // // RACQueueScheduler.h // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACScheduler.h" /// An abstract scheduler which asynchronously enqueues all its work to a Grand /// Central Dispatch queue. /// /// Because RACQueueScheduler is abstract, it should not be instantiated /// directly. Create a subclass using the `RACQueueScheduler+Subclass.h` /// interface and use that instead. @interface RACQueueScheduler : RACScheduler @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACQueueScheduler.m ================================================ // // RACQueueScheduler.m // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACQueueScheduler.h" #import "RACDisposable.h" #import "RACQueueScheduler+Subclass.h" #import "RACScheduler+Private.h" @implementation RACQueueScheduler #pragma mark Lifecycle - (id)initWithName:(NSString *)name queue:(dispatch_queue_t)queue { NSCParameterAssert(queue != NULL); self = [super initWithName:name]; if (self == nil) return nil; _queue = queue; #if !OS_OBJECT_USE_OBJC dispatch_retain(_queue); #endif return self; } #if !OS_OBJECT_USE_OBJC - (void)dealloc { if (_queue != NULL) { dispatch_release(_queue); _queue = NULL; } } #endif #pragma mark Date Conversions + (dispatch_time_t)wallTimeWithDate:(NSDate *)date { NSCParameterAssert(date != nil); double seconds = 0; double frac = modf(date.timeIntervalSince1970, &seconds); struct timespec walltime = { .tv_sec = (time_t)fmin(fmax(seconds, LONG_MIN), LONG_MAX), .tv_nsec = (long)fmin(fmax(frac * NSEC_PER_SEC, LONG_MIN), LONG_MAX) }; return dispatch_walltime(&walltime, 0); } #pragma mark RACScheduler - (RACDisposable *)schedule:(void (^)(void))block { NSCParameterAssert(block != NULL); RACDisposable *disposable = [[RACDisposable alloc] init]; dispatch_async(self.queue, ^{ if (disposable.disposed) return; [self performAsCurrentScheduler:block]; }); return disposable; } - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { NSCParameterAssert(date != nil); NSCParameterAssert(block != NULL); RACDisposable *disposable = [[RACDisposable alloc] init]; dispatch_after([self.class wallTimeWithDate:date], self.queue, ^{ if (disposable.disposed) return; [self performAsCurrentScheduler:block]; }); return disposable; } - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { NSCParameterAssert(date != nil); NSCParameterAssert(interval > 0.0 && interval < INT64_MAX / NSEC_PER_SEC); NSCParameterAssert(leeway >= 0.0 && leeway < INT64_MAX / NSEC_PER_SEC); NSCParameterAssert(block != NULL); uint64_t intervalInNanoSecs = (uint64_t)(interval * NSEC_PER_SEC); uint64_t leewayInNanoSecs = (uint64_t)(leeway * NSEC_PER_SEC); dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.queue); dispatch_source_set_timer(timer, [self.class wallTimeWithDate:date], intervalInNanoSecs, leewayInNanoSecs); dispatch_source_set_event_handler(timer, block); dispatch_resume(timer); return [RACDisposable disposableWithBlock:^{ dispatch_source_cancel(timer); }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReplaySubject.h ================================================ // // RACReplaySubject.h // ReactiveCocoa // // Created by Josh Abernathy on 3/14/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubject.h" extern const NSUInteger RACReplaySubjectUnlimitedCapacity; /// A replay subject saves the values it is sent (up to its defined capacity) /// and resends those to new subscribers. It will also replay an error or /// completion. @interface RACReplaySubject : RACSubject /// Creates a new replay subject with the given capacity. A capacity of /// RACReplaySubjectUnlimitedCapacity means values are never trimmed. + (instancetype)replaySubjectWithCapacity:(NSUInteger)capacity; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReplaySubject.m ================================================ // // RACReplaySubject.m // ReactiveCocoa // // Created by Josh Abernathy on 3/14/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACReplaySubject.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACScheduler+Private.h" #import "RACSubscriber.h" #import "RACTuple.h" const NSUInteger RACReplaySubjectUnlimitedCapacity = NSUIntegerMax; @interface RACReplaySubject () @property (nonatomic, assign, readonly) NSUInteger capacity; // These properties should only be modified while synchronized on self. @property (nonatomic, strong, readonly) NSMutableArray *valuesReceived; @property (nonatomic, assign) BOOL hasCompleted; @property (nonatomic, assign) BOOL hasError; @property (nonatomic, strong) NSError *error; @end @implementation RACReplaySubject #pragma mark Lifecycle + (instancetype)replaySubjectWithCapacity:(NSUInteger)capacity { return [(RACReplaySubject *)[self alloc] initWithCapacity:capacity]; } - (instancetype)init { return [self initWithCapacity:RACReplaySubjectUnlimitedCapacity]; } - (instancetype)initWithCapacity:(NSUInteger)capacity { self = [super init]; if (self == nil) return nil; _capacity = capacity; _valuesReceived = (capacity == RACReplaySubjectUnlimitedCapacity ? [NSMutableArray array] : [NSMutableArray arrayWithCapacity:capacity]); return self; } #pragma mark RACSignal - (RACDisposable *)subscribe:(id)subscriber { RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{ @synchronized (self) { for (id value in self.valuesReceived) { if (compoundDisposable.disposed) return; [subscriber sendNext:(value == RACTupleNil.tupleNil ? nil : value)]; } if (compoundDisposable.disposed) return; if (self.hasCompleted) { [subscriber sendCompleted]; } else if (self.hasError) { [subscriber sendError:self.error]; } else { RACDisposable *subscriptionDisposable = [super subscribe:subscriber]; [compoundDisposable addDisposable:subscriptionDisposable]; } } }]; [compoundDisposable addDisposable:schedulingDisposable]; return compoundDisposable; } #pragma mark RACSubscriber - (void)sendNext:(id)value { @synchronized (self) { [self.valuesReceived addObject:value ?: RACTupleNil.tupleNil]; [super sendNext:value]; if (self.capacity != RACReplaySubjectUnlimitedCapacity && self.valuesReceived.count > self.capacity) { [self.valuesReceived removeObjectsInRange:NSMakeRange(0, self.valuesReceived.count - self.capacity)]; } } } - (void)sendCompleted { @synchronized (self) { self.hasCompleted = YES; [super sendCompleted]; } } - (void)sendError:(NSError *)e { @synchronized (self) { self.hasError = YES; self.error = e; [super sendError:e]; } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReturnSignal.h ================================================ // // RACReturnSignal.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSignal.h" // A private `RACSignal` subclasses that synchronously sends a value to any // subscribers, then completes. @interface RACReturnSignal : RACSignal + (RACSignal *)return:(id)value; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReturnSignal.m ================================================ // // RACReturnSignal.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-10. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACReturnSignal.h" #import "RACScheduler+Private.h" #import "RACSubscriber.h" #import "RACUnit.h" @interface RACReturnSignal () // The value to send upon subscription. @property (nonatomic, strong, readonly) id value; @end @implementation RACReturnSignal #pragma mark Properties // Only allow this signal's name to be customized in DEBUG, since it's // potentially a singleton in release builds (see +return:). - (void)setName:(NSString *)name { #ifdef DEBUG [super setName:name]; #endif } - (NSString *)name { #ifdef DEBUG return super.name; #else return @"+return:"; #endif } #pragma mark Lifecycle + (RACSignal *)return:(id)value { #ifndef DEBUG // In release builds, use singletons for two very common cases. if (value == RACUnit.defaultUnit) { static RACReturnSignal *unitSingleton; static dispatch_once_t unitPred; dispatch_once(&unitPred, ^{ unitSingleton = [[self alloc] init]; unitSingleton->_value = RACUnit.defaultUnit; }); return unitSingleton; } else if (value == nil) { static RACReturnSignal *nilSingleton; static dispatch_once_t nilPred; dispatch_once(&nilPred, ^{ nilSingleton = [[self alloc] init]; nilSingleton->_value = nil; }); return nilSingleton; } #endif RACReturnSignal *signal = [[self alloc] init]; signal->_value = value; #ifdef DEBUG [signal setNameWithFormat:@"+return: %@", value]; #endif return signal; } #pragma mark Subscription - (RACDisposable *)subscribe:(id)subscriber { NSCParameterAssert(subscriber != nil); return [RACScheduler.subscriptionScheduler schedule:^{ [subscriber sendNext:self.value]; [subscriber sendCompleted]; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler+Private.h ================================================ // // RACScheduler+Private.h // ReactiveCocoa // // Created by Josh Abernathy on 11/29/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACScheduler.h" // The thread-specific current scheduler key. extern NSString * const RACSchedulerCurrentSchedulerKey; // A private interface for internal RAC use only. @interface RACScheduler () // A dedicated scheduler that fills two requirements: // // 1. By the time subscription happens, we need a valid +currentScheduler. // 2. Subscription should happen as soon as possible. // // To fulfill those two, if we already have a valid +currentScheduler, it // immediately executes scheduled blocks. If we don't, it will execute scheduled // blocks with a private background scheduler. + (instancetype)subscriptionScheduler; // Initializes the receiver with the given name. // // name - The name of the scheduler. If nil, a default name will be used. // // Returns the initialized object. - (id)initWithName:(NSString *)name; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler+Subclass.h ================================================ // // RACScheduler.m // ReactiveCocoa // // Created by Miķelis Vindavs on 5/27/14. // Copyright (c) 2014 GitHub, Inc. All rights reserved. // #import #import "RACScheduler.h" /// An interface for use by subclasses. /// /// Subclasses should use `-performAsCurrentScheduler:` to do the actual block /// invocation so that +[RACScheduler currentScheduler] behaves as expected. /// /// **Note that RACSchedulers are expected to be serial**. Subclasses must honor /// that contract. See `RACTargetQueueScheduler` for a queue-based scheduler /// which will enforce the serialization guarantee. @interface RACScheduler () /// Performs the given block with the receiver as the current scheduler for /// its thread. This should only be called by subclasses to perform their /// scheduled blocks. /// /// block - The block to execute. Cannot be NULL. - (void)performAsCurrentScheduler:(void (^)(void))block; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler.h ================================================ // // RACScheduler.h // ReactiveCocoa // // Created by Josh Abernathy on 4/16/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import /// The priority for the scheduler. /// /// RACSchedulerPriorityHigh - High priority. /// RACSchedulerPriorityDefault - Default priority. /// RACSchedulerPriorityLow - Low priority. /// RACSchedulerPriorityBackground - Background priority. typedef enum : long { RACSchedulerPriorityHigh = DISPATCH_QUEUE_PRIORITY_HIGH, RACSchedulerPriorityDefault = DISPATCH_QUEUE_PRIORITY_DEFAULT, RACSchedulerPriorityLow = DISPATCH_QUEUE_PRIORITY_LOW, RACSchedulerPriorityBackground = DISPATCH_QUEUE_PRIORITY_BACKGROUND, } RACSchedulerPriority; /// Scheduled with -scheduleRecursiveBlock:, this type of block is passed a block /// with which it can call itself recursively. typedef void (^RACSchedulerRecursiveBlock)(void (^reschedule)(void)); @class RACDisposable; /// Schedulers are used to control when and where work is performed. @interface RACScheduler : NSObject /// A singleton scheduler that immediately executes the blocks it is given. /// /// **Note:** Unlike most other schedulers, this does not set the current /// scheduler. There may still be a valid +currentScheduler if this is used /// within a block scheduled on a different scheduler. + (RACScheduler *)immediateScheduler; /// A singleton scheduler that executes blocks in the main thread. + (RACScheduler *)mainThreadScheduler; /// Creates and returns a new background scheduler with the given priority and /// name. The name is for debug and instrumentation purposes only. /// /// Scheduler creation is cheap. It's unnecessary to save the result of this /// method call unless you want to serialize some actions on the same background /// scheduler. + (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name; /// Invokes +schedulerWithPriority:name: with a default name. + (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority; /// Invokes +schedulerWithPriority: with RACSchedulerPriorityDefault. + (RACScheduler *)scheduler; /// The current scheduler. This will only be valid when used from within a /// -[RACScheduler schedule:] block or when on the main thread. + (RACScheduler *)currentScheduler; /// Schedule the given block for execution on the scheduler. /// /// Scheduled blocks will be executed in the order in which they were scheduled. /// /// block - The block to schedule for execution. Cannot be nil. /// /// Returns a disposable which can be used to cancel the scheduled block before /// it begins executing, or nil if cancellation is not supported. - (RACDisposable *)schedule:(void (^)(void))block; /// Schedule the given block for execution on the scheduler at or after /// a specific time. /// /// Note that blocks scheduled for a certain time will not preempt any other /// scheduled work that is executing at the time. /// /// When invoked on the +immediateScheduler, the calling thread **will block** /// until the specified time. /// /// date - The earliest time at which `block` should begin executing. The block /// may not execute immediately at this time, whether due to system load /// or another block on the scheduler currently being run. Cannot be nil. /// block - The block to schedule for execution. Cannot be nil. /// /// Returns a disposable which can be used to cancel the scheduled block before /// it begins executing, or nil if cancellation is not supported. - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block; /// Schedule the given block for execution on the scheduler after the delay. /// /// Converts the delay into an NSDate, then invokes `-after:schedule:`. - (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void (^)(void))block; /// Reschedule the given block at a particular interval, starting at a specific /// time, and with a given leeway for deferral. /// /// Note that blocks scheduled for a certain time will not preempt any other /// scheduled work that is executing at the time. /// /// Regardless of the value of `leeway`, the given block may not execute exactly /// at `when` or exactly on successive intervals, whether due to system load or /// because another block is currently being run on the scheduler. /// /// It is considered undefined behavior to invoke this method on the /// +immediateScheduler. /// /// date - The earliest time at which `block` should begin executing. The /// block may not execute immediately at this time, whether due to /// system load or another block on the scheduler currently being /// run. Cannot be nil. /// interval - The interval at which the block should be rescheduled, starting /// from `date`. This will use the system wall clock, to avoid /// skew when the computer goes to sleep. /// leeway - A hint to the system indicating the number of seconds that each /// scheduling can be deferred. Note that this is just a hint, and /// there may be some additional latency no matter what. /// block - The block to repeatedly schedule for execution. Cannot be nil. /// /// Returns a disposable which can be used to cancel the automatic scheduling and /// rescheduling, or nil if cancellation is not supported. - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block; /// Schedule the given recursive block for execution on the scheduler. The /// scheduler will automatically flatten any recursive scheduling into iteration /// instead, so this can be used without issue for blocks that may keep invoking /// themselves forever. /// /// Scheduled blocks will be executed in the order in which they were scheduled. /// /// recursiveBlock - The block to schedule for execution. When invoked, the /// recursive block will be passed a `void (^)(void)` block /// which will reschedule the recursive block at the end of the /// receiver's queue. This passed-in block will automatically /// skip scheduling if the scheduling of the `recursiveBlock` /// was disposed in the meantime. /// /// Returns a disposable which can be used to cancel the scheduled block before /// it begins executing, or to stop it from rescheduling if it's already begun /// execution. - (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock; @end @interface RACScheduler (Unavailable) + (RACScheduler *)schedulerWithQueue:(dispatch_queue_t)queue name:(NSString *)name __attribute__((unavailable("Use -[RACTargetQueueScheduler initWithName:targetQueue:] instead."))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler.m ================================================ // // RACScheduler.m // ReactiveCocoa // // Created by Josh Abernathy on 4/16/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACScheduler.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACImmediateScheduler.h" #import "RACScheduler+Private.h" #import "RACSubscriptionScheduler.h" #import "RACTargetQueueScheduler.h" // The key for the thread-specific current scheduler. NSString * const RACSchedulerCurrentSchedulerKey = @"RACSchedulerCurrentSchedulerKey"; @interface RACScheduler () @property (nonatomic, readonly, copy) NSString *name; @end @implementation RACScheduler #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, self.name]; } #pragma mark Initializers - (id)initWithName:(NSString *)name { self = [super init]; if (self == nil) return nil; if (name == nil) { _name = [NSString stringWithFormat:@"com.ReactiveCocoa.%@.anonymousScheduler", self.class]; } else { _name = [name copy]; } return self; } #pragma mark Schedulers + (instancetype)immediateScheduler { static dispatch_once_t onceToken; static RACScheduler *immediateScheduler; dispatch_once(&onceToken, ^{ immediateScheduler = [[RACImmediateScheduler alloc] init]; }); return immediateScheduler; } + (instancetype)mainThreadScheduler { static dispatch_once_t onceToken; static RACScheduler *mainThreadScheduler; dispatch_once(&onceToken, ^{ mainThreadScheduler = [[RACTargetQueueScheduler alloc] initWithName:@"com.ReactiveCocoa.RACScheduler.mainThreadScheduler" targetQueue:dispatch_get_main_queue()]; }); return mainThreadScheduler; } + (instancetype)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name { return [[RACTargetQueueScheduler alloc] initWithName:name targetQueue:dispatch_get_global_queue(priority, 0)]; } + (instancetype)schedulerWithPriority:(RACSchedulerPriority)priority { return [self schedulerWithPriority:priority name:@"com.ReactiveCocoa.RACScheduler.backgroundScheduler"]; } + (instancetype)scheduler { return [self schedulerWithPriority:RACSchedulerPriorityDefault]; } + (instancetype)subscriptionScheduler { static dispatch_once_t onceToken; static RACScheduler *subscriptionScheduler; dispatch_once(&onceToken, ^{ subscriptionScheduler = [[RACSubscriptionScheduler alloc] init]; }); return subscriptionScheduler; } + (BOOL)isOnMainThread { return [NSOperationQueue.currentQueue isEqual:NSOperationQueue.mainQueue] || [NSThread isMainThread]; } + (instancetype)currentScheduler { RACScheduler *scheduler = NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey]; if (scheduler != nil) return scheduler; if ([self.class isOnMainThread]) return RACScheduler.mainThreadScheduler; return nil; } #pragma mark Scheduling - (RACDisposable *)schedule:(void (^)(void))block { NSCAssert(NO, @"%@ must be implemented by subclasses.", NSStringFromSelector(_cmd)); return nil; } - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { NSCAssert(NO, @"%@ must be implemented by subclasses.", NSStringFromSelector(_cmd)); return nil; } - (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void (^)(void))block { return [self after:[NSDate dateWithTimeIntervalSinceNow:delay] schedule:block]; } - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { NSCAssert(NO, @"%@ must be implemented by subclasses.", NSStringFromSelector(_cmd)); return nil; } - (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock { RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; [self scheduleRecursiveBlock:[recursiveBlock copy] addingToDisposable:disposable]; return disposable; } - (void)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock addingToDisposable:(RACCompoundDisposable *)disposable { @autoreleasepool { RACCompoundDisposable *selfDisposable = [RACCompoundDisposable compoundDisposable]; [disposable addDisposable:selfDisposable]; __weak RACDisposable *weakSelfDisposable = selfDisposable; RACDisposable *schedulingDisposable = [self schedule:^{ @autoreleasepool { // At this point, we've been invoked, so our disposable is now useless. [disposable removeDisposable:weakSelfDisposable]; } if (disposable.disposed) return; void (^reallyReschedule)(void) = ^{ if (disposable.disposed) return; [self scheduleRecursiveBlock:recursiveBlock addingToDisposable:disposable]; }; // Protects the variables below. // // This doesn't actually need to be __block qualified, but Clang // complains otherwise. :C __block NSLock *lock = [[NSLock alloc] init]; lock.name = [NSString stringWithFormat:@"%@ %s", self, sel_getName(_cmd)]; __block NSUInteger rescheduleCount = 0; // Set to YES once synchronous execution has finished. Further // rescheduling should occur immediately (rather than being // flattened). __block BOOL rescheduleImmediately = NO; @autoreleasepool { recursiveBlock(^{ [lock lock]; BOOL immediate = rescheduleImmediately; if (!immediate) ++rescheduleCount; [lock unlock]; if (immediate) reallyReschedule(); }); } [lock lock]; NSUInteger synchronousCount = rescheduleCount; rescheduleImmediately = YES; [lock unlock]; for (NSUInteger i = 0; i < synchronousCount; i++) { reallyReschedule(); } }]; [selfDisposable addDisposable:schedulingDisposable]; } } - (void)performAsCurrentScheduler:(void (^)(void))block { NSCParameterAssert(block != NULL); // If we're using a concurrent queue, we could end up in here concurrently, // in which case we *don't* want to clear the current scheduler immediately // after our block is done executing, but only *after* all our concurrent // invocations are done. RACScheduler *previousScheduler = RACScheduler.currentScheduler; NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = self; @autoreleasepool { block(); } if (previousScheduler != nil) { NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = previousScheduler; } else { [NSThread.currentThread.threadDictionary removeObjectForKey:RACSchedulerCurrentSchedulerKey]; } } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScopedDisposable.h ================================================ // // RACScopedDisposable.h // ReactiveCocoa // // Created by Josh Abernathy on 3/28/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACDisposable.h" /// A disposable that calls its own -dispose when it is dealloc'd. @interface RACScopedDisposable : RACDisposable /// Creates a new scoped disposable that will also dispose of the given /// disposable when it is dealloc'd. + (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScopedDisposable.m ================================================ // // RACScopedDisposable.m // ReactiveCocoa // // Created by Josh Abernathy on 3/28/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACScopedDisposable.h" @implementation RACScopedDisposable #pragma mark Lifecycle + (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable { return [self disposableWithBlock:^{ [disposable dispose]; }]; } - (void)dealloc { [self dispose]; } #pragma mark RACDisposable - (RACScopedDisposable *)asScopedDisposable { // totally already are return self; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSequence.h ================================================ // // RACSequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import #import "RACStream.h" @class RACScheduler; @class RACSignal; /// Represents an immutable sequence of values. Unless otherwise specified, the /// sequences' values are evaluated lazily on demand. Like Cocoa collections, /// sequences cannot contain nil. /// /// Most inherited RACStream methods that accept a block will execute the block /// _at most_ once for each value that is evaluated in the returned sequence. /// Side effects are subject to the behavior described in /// +sequenceWithHeadBlock:tailBlock:. /// /// Implemented as a class cluster. A minimal implementation for a subclass /// consists simply of -head and -tail. @interface RACSequence : RACStream /// The first object in the sequence, or nil if the sequence is empty. /// /// Subclasses must provide an implementation of this method. @property (nonatomic, strong, readonly) id head; /// All but the first object in the sequence, or nil if there are no other /// objects. /// /// Subclasses must provide an implementation of this method. @property (nonatomic, strong, readonly) RACSequence *tail; /// Evaluates the full sequence to produce an equivalently-sized array. @property (nonatomic, copy, readonly) NSArray *array; /// Returns an enumerator of all objects in the sequence. @property (nonatomic, copy, readonly) NSEnumerator *objectEnumerator; /// Converts a sequence into an eager sequence. /// /// An eager sequence fully evaluates all of its values immediately. Sequences /// derived from an eager sequence will also be eager. /// /// Returns a new eager sequence, or the receiver if the sequence is already /// eager. @property (nonatomic, copy, readonly) RACSequence *eagerSequence; /// Converts a sequence into a lazy sequence. /// /// A lazy sequence evaluates its values on demand, as they are accessed. /// Sequences derived from a lazy sequence will also be lazy. /// /// Returns a new lazy sequence, or the receiver if the sequence is already lazy. @property (nonatomic, copy, readonly) RACSequence *lazySequence; /// Invokes -signalWithScheduler: with a new RACScheduler. - (RACSignal *)signal; /// Evaluates the full sequence on the given scheduler. /// /// Each item is evaluated in its own scheduled block, such that control of the /// scheduler is yielded between each value. /// /// Returns a signal which sends the receiver's values on the given scheduler as /// they're evaluated. - (RACSignal *)signalWithScheduler:(RACScheduler *)scheduler; /// Applies a left fold to the sequence. /// /// This is the same as iterating the sequence along with a provided start value. /// This uses a constant amount of memory. A left fold is left-associative so in /// the sequence [1,2,3] the block would applied in the following order: /// reduce(reduce(reduce(start, 1), 2), 3) /// /// start - The starting value for the fold. Used as `accumulator` for the /// first fold. /// reduce - The block used to combine the accumulated value and the next value. /// Cannot be nil. /// /// Returns a reduced value. - (id)foldLeftWithStart:(id)start reduce:(id (^)(id accumulator, id value))reduce; /// Applies a right fold to the sequence. /// /// A right fold is equivalent to recursion on the list. The block is evaluated /// from the right to the left in list. It is right associative so it's applied /// to the rightmost elements first. For example, in the sequence [1,2,3] the /// block is applied in the order: /// reduce(1, reduce(2, reduce(3, start))) /// /// start - The starting value for the fold. /// reduce - The block used to combine the accumulated value and the next head. /// The block is given the accumulated value and the value of the rest /// of the computation (result of the recursion). This is computed when /// you retrieve its value using `rest.head`. This allows you to /// prevent unnecessary computation by not accessing `rest.head` if you /// don't need to. /// /// Returns a reduced value. - (id)foldRightWithStart:(id)start reduce:(id (^)(id first, RACSequence *rest))reduce; /// Check if any value in sequence passes the block. /// /// block - The block predicate used to check each item. Cannot be nil. /// /// Returns a boolean indiciating if any value in the sequence passed. - (BOOL)any:(BOOL (^)(id value))block; /// Check if all values in the sequence pass the block. /// /// block - The block predicate used to check each item. Cannot be nil. /// /// Returns a boolean indicating if all values in the sequence passed. - (BOOL)all:(BOOL (^)(id value))block; /// Returns the first object that passes the block. /// /// block - The block predicate used to check each item. Cannot be nil. /// /// Returns an object that passes the block or nil if no objects passed. - (id)objectPassingTest:(BOOL (^)(id value))block; /// Creates a sequence that dynamically generates its values. /// /// headBlock - Invoked the first time -head is accessed. /// tailBlock - Invoked the first time -tail is accessed. /// /// The results from each block are memoized, so each block will be invoked at /// most once, no matter how many times the head and tail properties of the /// sequence are accessed. /// /// Any side effects in `headBlock` or `tailBlock` should be thread-safe, since /// the sequence may be evaluated at any time from any thread. Not only that, but /// -tail may be accessed before -head, or both may be accessed simultaneously. /// As noted above, side effects will only be triggered the _first_ time -head or /// -tail is invoked. /// /// Returns a sequence that lazily invokes the given blocks to provide head and /// tail. `headBlock` must not be nil. + (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock; @end @interface RACSequence (Unavailable) - (id)foldLeftWithStart:(id)start combine:(id (^)(id accumulator, id value))combine __attribute__((unavailable("Renamed to -foldLeftWithStart:reduce:"))); - (id)foldRightWithStart:(id)start combine:(id (^)(id first, RACSequence *rest))combine __attribute__((unavailable("Renamed to -foldRightWithStart:reduce:"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSequence.m ================================================ // // RACSequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACSequence.h" #import "RACArraySequence.h" #import "RACDynamicSequence.h" #import "RACEagerSequence.h" #import "RACEmptySequence.h" #import "RACScheduler.h" #import "RACSignal.h" #import "RACSubscriber.h" #import "RACTuple.h" #import "RACUnarySequence.h" // An enumerator over sequences. @interface RACSequenceEnumerator : NSEnumerator // The sequence the enumerator is enumerating. // // This will change as the enumerator is exhausted. This property should only be // accessed while synchronized on self. @property (nonatomic, strong) RACSequence *sequence; @end @interface RACSequence () // Performs one iteration of lazy binding, passing through values from `current` // until the sequence is exhausted, then recursively binding the remaining // values in the receiver. // // Returns a new sequence which contains `current`, followed by the combined // result of all applications of `block` to the remaining values in the receiver. - (instancetype)bind:(RACStreamBindBlock)block passingThroughValuesFromSequence:(RACSequence *)current; @end @implementation RACSequenceEnumerator - (id)nextObject { id object = nil; @synchronized (self) { object = self.sequence.head; self.sequence = self.sequence.tail; } return object; } @end @implementation RACSequence #pragma mark Lifecycle + (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock { return [[RACDynamicSequence sequenceWithHeadBlock:headBlock tailBlock:tailBlock] setNameWithFormat:@"+sequenceWithHeadBlock:tailBlock:"]; } #pragma mark Class cluster primitives - (id)head { NSCAssert(NO, @"%s must be overridden by subclasses", __func__); return nil; } - (RACSequence *)tail { NSCAssert(NO, @"%s must be overridden by subclasses", __func__); return nil; } #pragma mark RACStream + (instancetype)empty { return RACEmptySequence.empty; } + (instancetype)return:(id)value { return [RACUnarySequence return:value]; } - (instancetype)bind:(RACStreamBindBlock (^)(void))block { RACStreamBindBlock bindBlock = block(); return [[self bind:bindBlock passingThroughValuesFromSequence:nil] setNameWithFormat:@"[%@] -bind:", self.name]; } - (instancetype)bind:(RACStreamBindBlock)bindBlock passingThroughValuesFromSequence:(RACSequence *)passthroughSequence { // Store values calculated in the dependency here instead, avoiding any kind // of temporary collection and boxing. // // This relies on the implementation of RACDynamicSequence synchronizing // access to its head, tail, and dependency, and we're only doing it because // we really need the performance. __block RACSequence *valuesSeq = self; __block RACSequence *current = passthroughSequence; __block BOOL stop = NO; RACSequence *sequence = [RACDynamicSequence sequenceWithLazyDependency:^ id { while (current.head == nil) { if (stop) return nil; // We've exhausted the current sequence, create a sequence from the // next value. id value = valuesSeq.head; if (value == nil) { // We've exhausted all the sequences. stop = YES; return nil; } current = (id)bindBlock(value, &stop); if (current == nil) { stop = YES; return nil; } valuesSeq = valuesSeq.tail; } NSCAssert([current isKindOfClass:RACSequence.class], @"-bind: block returned an object that is not a sequence: %@", current); return nil; } headBlock:^(id _) { return current.head; } tailBlock:^ id (id _) { if (stop) return nil; return [valuesSeq bind:bindBlock passingThroughValuesFromSequence:current.tail]; }]; sequence.name = self.name; return sequence; } - (instancetype)concat:(RACStream *)stream { NSCParameterAssert(stream != nil); return [[[RACArraySequence sequenceWithArray:@[ self, stream ] offset:0] flatten] setNameWithFormat:@"[%@] -concat: %@", self.name, stream]; } - (instancetype)zipWith:(RACSequence *)sequence { NSCParameterAssert(sequence != nil); return [[RACSequence sequenceWithHeadBlock:^ id { if (self.head == nil || sequence.head == nil) return nil; return RACTuplePack(self.head, sequence.head); } tailBlock:^ id { if (self.tail == nil || [[RACSequence empty] isEqual:self.tail]) return nil; if (sequence.tail == nil || [[RACSequence empty] isEqual:sequence.tail]) return nil; return [self.tail zipWith:sequence.tail]; }] setNameWithFormat:@"[%@] -zipWith: %@", self.name, sequence]; } #pragma mark Extended methods - (NSArray *)array { NSMutableArray *array = [NSMutableArray array]; for (id obj in self) { [array addObject:obj]; } return [array copy]; } - (NSEnumerator *)objectEnumerator { RACSequenceEnumerator *enumerator = [[RACSequenceEnumerator alloc] init]; enumerator.sequence = self; return enumerator; } - (RACSignal *)signal { return [[self signalWithScheduler:[RACScheduler scheduler]] setNameWithFormat:@"[%@] -signal", self.name]; } - (RACSignal *)signalWithScheduler:(RACScheduler *)scheduler { return [[RACSignal createSignal:^(id subscriber) { __block RACSequence *sequence = self; return [scheduler scheduleRecursiveBlock:^(void (^reschedule)(void)) { if (sequence.head == nil) { [subscriber sendCompleted]; return; } [subscriber sendNext:sequence.head]; sequence = sequence.tail; reschedule(); }]; }] setNameWithFormat:@"[%@] -signalWithScheduler: %@", self.name, scheduler]; } - (id)foldLeftWithStart:(id)start reduce:(id (^)(id, id))reduce { NSCParameterAssert(reduce != NULL); if (self.head == nil) return start; for (id value in self) { start = reduce(start, value); } return start; } - (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *))reduce { NSCParameterAssert(reduce != NULL); if (self.head == nil) return start; RACSequence *rest = [RACSequence sequenceWithHeadBlock:^{ if (self.tail) { return [self.tail foldRightWithStart:start reduce:reduce]; } else { return start; } } tailBlock:nil]; return reduce(self.head, rest); } - (BOOL)any:(BOOL (^)(id))block { NSCParameterAssert(block != NULL); return [self objectPassingTest:block] != nil; } - (BOOL)all:(BOOL (^)(id))block { NSCParameterAssert(block != NULL); NSNumber *result = [self foldLeftWithStart:@YES reduce:^(NSNumber *accumulator, id value) { return @(accumulator.boolValue && block(value)); }]; return result.boolValue; } - (id)objectPassingTest:(BOOL (^)(id))block { NSCParameterAssert(block != NULL); return [self filter:block].head; } - (RACSequence *)eagerSequence { return [RACEagerSequence sequenceWithArray:self.array offset:0]; } - (RACSequence *)lazySequence { return self; } #pragma mark NSCopying - (id)copyWithZone:(NSZone *)zone { return self; } #pragma mark NSCoding - (Class)classForCoder { // Most sequences should be archived as RACArraySequences. return RACArraySequence.class; } - (id)initWithCoder:(NSCoder *)coder { if (![self isKindOfClass:RACArraySequence.class]) return [[RACArraySequence alloc] initWithCoder:coder]; // Decoding is handled in RACArraySequence. return [super init]; } - (void)encodeWithCoder:(NSCoder *)coder { [coder encodeObject:self.array forKey:@"array"]; } #pragma mark NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id *)stackbuf count:(NSUInteger)len { if (state->state == ULONG_MAX) { // Enumeration has completed. return 0; } // We need to traverse the sequence itself on repeated calls to this // method, so use the 'state' field to track the current head. RACSequence *(^getSequence)(void) = ^{ return (__bridge RACSequence *)(void *)state->state; }; void (^setSequence)(RACSequence *) = ^(RACSequence *sequence) { // Release the old sequence and retain the new one. CFBridgingRelease((void *)state->state); state->state = (unsigned long)CFBridgingRetain(sequence); }; void (^complete)(void) = ^{ // Release any stored sequence. setSequence(nil); state->state = ULONG_MAX; }; if (state->state == 0) { // Since a sequence doesn't mutate, this just needs to be set to // something non-NULL. state->mutationsPtr = state->extra; setSequence(self); } state->itemsPtr = stackbuf; NSUInteger enumeratedCount = 0; while (enumeratedCount < len) { RACSequence *seq = getSequence(); // Because the objects in a sequence may be generated lazily, we want to // prevent them from being released until the enumerator's used them. __autoreleasing id obj = seq.head; if (obj == nil) { complete(); break; } stackbuf[enumeratedCount++] = obj; if (seq.tail == nil) { complete(); break; } setSequence(seq.tail); } return enumeratedCount; } #pragma mark NSObject - (NSUInteger)hash { return [self.head hash]; } - (BOOL)isEqual:(RACSequence *)seq { if (self == seq) return YES; if (![seq isKindOfClass:RACSequence.class]) return NO; for (id selfObj in self) { id seqObj = seq.head; // Handles the nil case too. if (![seqObj isEqual:selfObj]) return NO; seq = seq.tail; } // self is now depleted -- the argument should be too. return (seq.head == nil); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSerialDisposable.h ================================================ // // RACSerialDisposable.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACDisposable.h" /// A disposable that contains exactly one other disposable and allows it to be /// swapped out atomically. @interface RACSerialDisposable : RACDisposable /// The inner disposable managed by the serial disposable. /// /// This property is thread-safe for reading and writing. However, if you want to /// read the current value _and_ write a new one atomically, use /// -swapInDisposable: instead. /// /// Disposing of the receiver will also dispose of the current disposable set for /// this property, then set the property to nil. If any new disposable is set /// after the receiver is disposed, it will be disposed immediately and this /// property will remain set to nil. @property (atomic, strong) RACDisposable *disposable; /// Creates a serial disposable which will wrap the given disposable. /// /// disposable - The value to set for `disposable`. This may be nil. /// /// Returns a RACSerialDisposable, or nil if an error occurs. + (instancetype)serialDisposableWithDisposable:(RACDisposable *)disposable; /// Atomically swaps the receiver's `disposable` for `newDisposable`. /// /// newDisposable - The new value for `disposable`. If the receiver has already /// been disposed, this disposable will be too, and `disposable` /// will remain set to nil. This argument may be nil. /// /// Returns the previous value for the `disposable` property. - (RACDisposable *)swapInDisposable:(RACDisposable *)newDisposable; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSerialDisposable.m ================================================ // // RACSerialDisposable.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSerialDisposable.h" #import @interface RACSerialDisposable () { // The receiver's `disposable`. This variable must only be referenced while // _mutex is held. RACDisposable * _disposable; // YES if the receiver has been disposed. This variable must only be accessed // while _mutex is held. BOOL _disposed; // A mutex to protect access to _disposable and _disposed. pthread_mutex_t _mutex; } @end @implementation RACSerialDisposable #pragma mark Properties - (BOOL)isDisposed { pthread_mutex_lock(&_mutex); const BOOL disposed = _disposed; pthread_mutex_unlock(&_mutex); return disposed; } - (RACDisposable *)disposable { pthread_mutex_lock(&_mutex); RACDisposable * const result = _disposable; pthread_mutex_unlock(&_mutex); return result; } - (void)setDisposable:(RACDisposable *)disposable { [self swapInDisposable:disposable]; } #pragma mark Lifecycle + (instancetype)serialDisposableWithDisposable:(RACDisposable *)disposable { RACSerialDisposable *serialDisposable = [[self alloc] init]; serialDisposable.disposable = disposable; return serialDisposable; } - (instancetype)init { self = [super init]; if (self == nil) return nil; const int result = pthread_mutex_init(&_mutex, NULL); NSCAssert(0 == result, @"Failed to initialize mutex with error %d", result); return self; } - (instancetype)initWithBlock:(void (^)(void))block { self = [self init]; if (self == nil) return nil; self.disposable = [RACDisposable disposableWithBlock:block]; return self; } - (void)dealloc { const int result = pthread_mutex_destroy(&_mutex); NSCAssert(0 == result, @"Failed to destroy mutex with error %d", result); } #pragma mark Inner Disposable - (RACDisposable *)swapInDisposable:(RACDisposable *)newDisposable { RACDisposable *existingDisposable; BOOL alreadyDisposed; pthread_mutex_lock(&_mutex); alreadyDisposed = _disposed; if (!alreadyDisposed) { existingDisposable = _disposable; _disposable = newDisposable; } pthread_mutex_unlock(&_mutex); if (alreadyDisposed) { [newDisposable dispose]; return nil; } return existingDisposable; } #pragma mark Disposal - (void)dispose { RACDisposable *existingDisposable; pthread_mutex_lock(&_mutex); if (!_disposed) { existingDisposable = _disposable; _disposed = YES; _disposable = nil; } pthread_mutex_unlock(&_mutex); [existingDisposable dispose]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal+Operations.h ================================================ // // RACSignal+Operations.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-09-06. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import "RACSignal.h" /// The domain for errors originating in RACSignal operations. extern NSString * const RACSignalErrorDomain; /// The error code used with -timeout:. extern const NSInteger RACSignalErrorTimedOut; /// The error code used when a value passed into +switch:cases:default: does not /// match any of the cases, and no default was given. extern const NSInteger RACSignalErrorNoMatchingCase; @class RACCommand; @class RACDisposable; @class RACMulticastConnection; @class RACScheduler; @class RACSequence; @class RACSubject; @class RACTuple; @protocol RACSubscriber; @interface RACSignal (Operations) /// Do the given block on `next`. This should be used to inject side effects into /// the signal. - (RACSignal *)doNext:(void (^)(id x))block; /// Do the given block on `error`. This should be used to inject side effects /// into the signal. - (RACSignal *)doError:(void (^)(NSError *error))block; /// Do the given block on `completed`. This should be used to inject side effects /// into the signal. - (RACSignal *)doCompleted:(void (^)(void))block; /// Sends `next`s only if we don't receive another `next` in `interval` seconds. /// /// If a `next` is received, and then another `next` is received before /// `interval` seconds have passed, the first value is discarded. /// /// After `interval` seconds have passed since the most recent `next` was sent, /// the most recent `next` is forwarded on the scheduler that the value was /// originally received on. If +[RACScheduler currentScheduler] was nil at the /// time, a private background scheduler is used. /// /// Returns a signal which sends throttled and delayed `next` events. Completion /// and errors are always forwarded immediately. - (RACSignal *)throttle:(NSTimeInterval)interval; /// Throttles `next`s for which `predicate` returns YES. /// /// When `predicate` returns YES for a `next`: /// /// 1. If another `next` is received before `interval` seconds have passed, the /// prior value is discarded. This happens regardless of whether the new /// value will be throttled. /// 2. After `interval` seconds have passed since the value was originally /// received, it will be forwarded on the scheduler that it was received /// upon. If +[RACScheduler currentScheduler] was nil at the time, a private /// background scheduler is used. /// /// When `predicate` returns NO for a `next`, it is forwarded immediately, /// without any throttling. /// /// interval - The number of seconds for which to buffer the latest value that /// passes `predicate`. /// predicate - Passed each `next` from the receiver, this block returns /// whether the given value should be throttled. This argument must /// not be nil. /// /// Returns a signal which sends `next` events, throttled when `predicate` /// returns YES. Completion and errors are always forwarded immediately. - (RACSignal *)throttle:(NSTimeInterval)interval valuesPassingTest:(BOOL (^)(id next))predicate; /// Forwards `next` and `completed` events after delaying for `interval` seconds /// on the current scheduler (on which the events were delivered). /// /// If +[RACScheduler currentScheduler] is nil when `next` or `completed` is /// received, a private background scheduler is used. /// /// Returns a signal which sends delayed `next` and `completed` events. Errors /// are always forwarded immediately. - (RACSignal *)delay:(NSTimeInterval)interval; /// Resubscribes when the signal completes. - (RACSignal *)repeat; /// Executes the given block each time a subscription is created. /// /// block - A block which defines the subscription side effects. Cannot be `nil`. /// /// Example: /// /// // Write new file, with backup. /// [[[[fileManager /// rac_createFileAtPath:path contents:data] /// initially:^{ /// // 2. Second, backup current file /// [fileManager moveItemAtPath:path toPath:backupPath error:nil]; /// }] /// initially:^{ /// // 1. First, acquire write lock. /// [writeLock lock]; /// }] /// finally:^{ /// [writeLock unlock]; /// }]; /// /// Returns a signal that passes through all events of the receiver, plus /// introduces side effects which occur prior to any subscription side effects /// of the receiver. - (RACSignal *)initially:(void (^)(void))block; /// Executes the given block when the signal completes or errors. - (RACSignal *)finally:(void (^)(void))block; /// Divides the receiver's `next`s into buffers which deliver every `interval` /// seconds. /// /// interval - The interval in which values are grouped into one buffer. /// scheduler - The scheduler upon which the returned signal will deliver its /// values. This must not be nil or +[RACScheduler /// immediateScheduler]. /// /// Returns a signal which sends RACTuples of the buffered values at each /// interval on `scheduler`. When the receiver completes, any currently-buffered /// values will be sent immediately. - (RACSignal *)bufferWithTime:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler; /// Collects all receiver's `next`s into a NSArray. Nil values will be converted /// to NSNull. /// /// This corresponds to the `ToArray` method in Rx. /// /// Returns a signal which sends a single NSArray when the receiver completes /// successfully. - (RACSignal *)collect; /// Takes the last `count` `next`s after the receiving signal completes. - (RACSignal *)takeLast:(NSUInteger)count; /// Combines the latest values from the receiver and the given signal into /// RACTuples, once both have sent at least one `next`. /// /// Any additional `next`s will result in a new RACTuple with the latest values /// from both signals. /// /// signal - The signal to combine with. This argument must not be nil. /// /// Returns a signal which sends RACTuples of the combined values, forwards any /// `error` events, and completes when both input signals complete. - (RACSignal *)combineLatestWith:(RACSignal *)signal; /// Combines the latest values from the given signals into RACTuples, once all /// the signals have sent at least one `next`. /// /// Any additional `next`s will result in a new RACTuple with the latest values /// from all signals. /// /// signals - The signals to combine. If this collection is empty, the returned /// signal will immediately complete upon subscription. /// /// Returns a signal which sends RACTuples of the combined values, forwards any /// `error` events, and completes when all input signals complete. + (RACSignal *)combineLatest:(id)signals; /// Combines signals using +combineLatest:, then reduces the resulting tuples /// into a single value using -reduceEach:. /// /// signals - The signals to combine. If this collection is empty, the /// returned signal will immediately complete upon subscription. /// reduceBlock - The block which reduces the latest values from all the /// signals into one value. It must take as many arguments as the /// number of signals given. Each argument will be an object /// argument. The return value must be an object. This argument /// must not be nil. /// /// Example: /// /// [RACSignal combineLatest:@[ stringSignal, intSignal ] reduce:^(NSString *string, NSNumber *number) { /// return [NSString stringWithFormat:@"%@: %@", string, number]; /// }]; /// /// Returns a signal which sends the results from each invocation of /// `reduceBlock`. + (RACSignal *)combineLatest:(id)signals reduce:(id (^)())reduceBlock; /// Merges the receiver and the given signal with `+merge:` and returns the /// resulting signal. - (RACSignal *)merge:(RACSignal *)signal; /// Sends the latest `next` from any of the signals. /// /// Returns a signal that passes through values from each of the given signals, /// and sends `completed` when all of them complete. If any signal sends an error, /// the returned signal sends `error` immediately. + (RACSignal *)merge:(id)signals; /// Merges the signals sent by the receiver into a flattened signal, but only /// subscribes to `maxConcurrent` number of signals at a time. New signals are /// queued and subscribed to as other signals complete. /// /// If an error occurs on any of the signals, it is sent on the returned signal. /// It completes only after the receiver and all sent signals have completed. /// /// This corresponds to `Merge(IObservable>, Int32)` /// in Rx. /// /// maxConcurrent - the maximum number of signals to subscribe to at a /// time. If 0, it subscribes to an unlimited number of /// signals. - (RACSignal *)flatten:(NSUInteger)maxConcurrent; /// Ignores all `next`s from the receiver, waits for the receiver to complete, /// then subscribes to a new signal. /// /// block - A block which will create or obtain a new signal to subscribe to, /// executed only after the receiver completes. This block must not be /// nil, and it must not return a nil signal. /// /// Returns a signal which will pass through the events of the signal created in /// `block`. If the receiver errors out, the returned signal will error as well. - (RACSignal *)then:(RACSignal * (^)(void))block; /// Concats the inner signals of a signal of signals. - (RACSignal *)concat; /// Aggregates the `next` values of the receiver into a single combined value. /// /// The algorithm proceeds as follows: /// /// 1. `start` is passed into the block as the `running` value, and the first /// element of the receiver is passed into the block as the `next` value. /// 2. The result of the invocation (`running`) and the next element of the /// receiver (`next`) is passed into `reduceBlock`. /// 3. Steps 2 and 3 are repeated until all values have been processed. /// 4. The last result of `reduceBlock` is sent on the returned signal. /// /// This method is similar to -scanWithStart:reduce:, except that only the /// final result is sent on the returned signal. /// /// start - The value to be combined with the first element of the /// receiver. This value may be `nil`. /// reduceBlock - The block that describes how to combine values of the /// receiver. If the receiver is empty, this block will never be /// invoked. Cannot be nil. /// /// Returns a signal that will send the aggregated value when the receiver /// completes, then itself complete. If the receiver never sends any values, /// `start` will be sent instead. - (RACSignal *)aggregateWithStart:(id)start reduce:(id (^)(id running, id next))reduceBlock; /// Aggregates the `next` values of the receiver into a single combined value. /// This is indexed version of -aggregateWithStart:reduce:. /// /// start - The value to be combined with the first element of the /// receiver. This value may be `nil`. /// reduceBlock - The block that describes how to combine values of the /// receiver. This block takes zero-based index value as the last /// parameter. If the receiver is empty, this block will never be /// invoked. Cannot be nil. /// /// Returns a signal that will send the aggregated value when the receiver /// completes, then itself complete. If the receiver never sends any values, /// `start` will be sent instead. - (RACSignal *)aggregateWithStart:(id)start reduceWithIndex:(id (^)(id running, id next, NSUInteger index))reduceBlock; /// Aggregates the `next` values of the receiver into a single combined value. /// /// This invokes `startFactory` block on each subscription, then calls /// -aggregateWithStart:reduce: with the return value of the block as start value. /// /// startFactory - The block that returns start value which will be combined /// with the first element of the receiver. Cannot be nil. /// reduceBlock - The block that describes how to combine values of the /// receiver. If the receiver is empty, this block will never be /// invoked. Cannot be nil. /// /// Returns a signal that will send the aggregated value when the receiver /// completes, then itself complete. If the receiver never sends any values, /// the return value of `startFactory` will be sent instead. - (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory reduce:(id (^)(id running, id next))reduceBlock; /// Invokes -setKeyPath:onObject:nilValue: with `nil` for the nil value. /// /// WARNING: Under certain conditions, this method is known to be thread-unsafe. /// See the description in -setKeyPath:onObject:nilValue:. - (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object; /// Binds the receiver to an object, automatically setting the given key path on /// every `next`. When the signal completes, the binding is automatically /// disposed of. /// /// WARNING: Under certain conditions, this method is known to be thread-unsafe. /// A crash can result if `object` is deallocated concurrently on /// another thread within a window of time between a value being sent /// on this signal and immediately prior to the invocation of /// -setValue:forKeyPath:, which sets the property. To prevent this, /// ensure `object` is deallocated on the same thread the receiver /// sends on, or ensure that the returned disposable is disposed of /// before `object` deallocates. /// See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1184 /// /// Sending an error on the signal is considered undefined behavior, and will /// generate an assertion failure in Debug builds. /// /// A given key on an object should only have one active signal bound to it at any /// given time. Binding more than one signal to the same property is considered /// undefined behavior. /// /// keyPath - The key path to update with `next`s from the receiver. /// object - The object that `keyPath` is relative to. /// nilValue - The value to set at the key path whenever `nil` is sent by the /// receiver. This may be nil when binding to object properties, but /// an NSValue should be used for primitive properties, to avoid an /// exception if `nil` is sent (which might occur if an intermediate /// object is set to `nil`). /// /// Returns a disposable which can be used to terminate the binding. - (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object nilValue:(id)nilValue; /// Sends NSDate.date every `interval` seconds. /// /// interval - The time interval in seconds at which the current time is sent. /// scheduler - The scheduler upon which the current NSDate should be sent. This /// must not be nil or +[RACScheduler immediateScheduler]. /// /// Returns a signal that sends the current date/time every `interval` on /// `scheduler`. + (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler; /// Sends NSDate.date at intervals of at least `interval` seconds, up to /// approximately `interval` + `leeway` seconds. /// /// The created signal will defer sending each `next` for at least `interval` /// seconds, and for an additional amount of time up to `leeway` seconds in the /// interest of performance or power consumption. Note that some additional /// latency is to be expected, even when specifying a `leeway` of 0. /// /// interval - The base interval between `next`s. /// scheduler - The scheduler upon which the current NSDate should be sent. This /// must not be nil or +[RACScheduler immediateScheduler]. /// leeway - The maximum amount of additional time the `next` can be deferred. /// /// Returns a signal that sends the current date/time at intervals of at least /// `interval seconds` up to approximately `interval` + `leeway` seconds on /// `scheduler`. + (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway; /// Takes `next`s until the `signalTrigger` sends `next` or `completed`. /// /// Returns a signal which passes through all events from the receiver until /// `signalTrigger` sends `next` or `completed`, at which point the returned signal /// will send `completed`. - (RACSignal *)takeUntil:(RACSignal *)signalTrigger; /// Takes `next`s until the `replacement` sends an event. /// /// replacement - The signal which replaces the receiver as soon as it sends an /// event. /// /// Returns a signal which passes through `next`s and `error` from the receiver /// until `replacement` sends an event, at which point the returned signal will /// send that event and switch to passing through events from `replacement` /// instead, regardless of whether the receiver has sent events already. - (RACSignal *)takeUntilReplacement:(RACSignal *)replacement; /// Subscribes to the returned signal when an error occurs. - (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock; /// Subscribes to the given signal when an error occurs. - (RACSignal *)catchTo:(RACSignal *)signal; /// Returns a signal that will either immediately send the return value of /// `tryBlock` and complete, or error using the `NSError` passed out from the /// block. /// /// tryBlock - An action that performs some computation that could fail. If the /// block returns nil, the block must return an error via the /// `errorPtr` parameter. /// /// Example: /// /// [RACSignal try:^(NSError **error) { /// return [NSJSONSerialization JSONObjectWithData:someJSONData options:0 error:error]; /// }]; + (RACSignal *)try:(id (^)(NSError **errorPtr))tryBlock; /// Runs `tryBlock` against each of the receiver's values, passing values /// until `tryBlock` returns NO, or the receiver completes. /// /// tryBlock - An action to run against each of the receiver's values. /// The block should return YES to indicate that the action was /// successful. This block must not be nil. /// /// Example: /// /// // The returned signal will send an error if data values cannot be /// // written to `someFileURL`. /// [signal try:^(NSData *data, NSError **errorPtr) { /// return [data writeToURL:someFileURL options:NSDataWritingAtomic error:errorPtr]; /// }]; /// /// Returns a signal which passes through all the values of the receiver. If /// `tryBlock` fails for any value, the returned signal will error using the /// `NSError` passed out from the block. - (RACSignal *)try:(BOOL (^)(id value, NSError **errorPtr))tryBlock; /// Runs `mapBlock` against each of the receiver's values, mapping values until /// `mapBlock` returns nil, or the receiver completes. /// /// mapBlock - An action to map each of the receiver's values. The block should /// return a non-nil value to indicate that the action was successful. /// This block must not be nil. /// /// Example: /// /// // The returned signal will send an error if data cannot be read from /// // `fileURL`. /// [signal tryMap:^(NSURL *fileURL, NSError **errorPtr) { /// return [NSData dataWithContentsOfURL:fileURL options:0 error:errorPtr]; /// }]; /// /// Returns a signal which transforms all the values of the receiver. If /// `mapBlock` returns nil for any value, the returned signal will error using /// the `NSError` passed out from the block. - (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock; /// Returns the first `next`. Note that this is a blocking call. - (id)first; /// Returns the first `next` or `defaultValue` if the signal completes or errors /// without sending a `next`. Note that this is a blocking call. - (id)firstOrDefault:(id)defaultValue; /// Returns the first `next` or `defaultValue` if the signal completes or errors /// without sending a `next`. If an error occurs success will be NO and error /// will be populated. Note that this is a blocking call. /// /// Both success and error may be NULL. - (id)firstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error; /// Blocks the caller and waits for the signal to complete. /// /// error - If not NULL, set to any error that occurs. /// /// Returns whether the signal completed successfully. If NO, `error` will be set /// to the error that occurred. - (BOOL)waitUntilCompleted:(NSError **)error; /// Defers creation of a signal until the signal's actually subscribed to. /// /// This can be used to effectively turn a hot signal into a cold signal. + (RACSignal *)defer:(RACSignal * (^)(void))block; /// Every time the receiver sends a new RACSignal, subscribes and sends `next`s and /// `error`s only for that signal. /// /// The receiver must be a signal of signals. /// /// Returns a signal which passes through `next`s and `error`s from the latest /// signal sent by the receiver, and sends `completed` when both the receiver and /// the last sent signal complete. - (RACSignal *)switchToLatest; /// Switches between the signals in `cases` as well as `defaultSignal` based on /// the latest value sent by `signal`. /// /// signal - A signal of objects used as keys in the `cases` dictionary. /// This argument must not be nil. /// cases - A dictionary that has signals as values. This argument must /// not be nil. A RACTupleNil key in this dictionary will match /// nil `next` events that are received on `signal`. /// defaultSignal - The signal to pass through after `signal` sends a value for /// which `cases` does not contain a signal. If nil, any /// unmatched values will result in /// a RACSignalErrorNoMatchingCase error. /// /// Returns a signal which passes through `next`s and `error`s from one of the /// the signals in `cases` or `defaultSignal`, and sends `completed` when both /// `signal` and the last used signal complete. If no `defaultSignal` is given, /// an unmatched `next` will result in an error on the returned signal. + (RACSignal *)switch:(RACSignal *)signal cases:(NSDictionary *)cases default:(RACSignal *)defaultSignal; /// Switches between `trueSignal` and `falseSignal` based on the latest value /// sent by `boolSignal`. /// /// boolSignal - A signal of BOOLs determining whether `trueSignal` or /// `falseSignal` should be active. This argument must not be nil. /// trueSignal - The signal to pass through after `boolSignal` has sent YES. /// This argument must not be nil. /// falseSignal - The signal to pass through after `boolSignal` has sent NO. This /// argument must not be nil. /// /// Returns a signal which passes through `next`s and `error`s from `trueSignal` /// and/or `falseSignal`, and sends `completed` when both `boolSignal` and the /// last switched signal complete. + (RACSignal *)if:(RACSignal *)boolSignal then:(RACSignal *)trueSignal else:(RACSignal *)falseSignal; /// Adds every `next` to an array. Nils are represented by NSNulls. Note that /// this is a blocking call. /// /// **This is not the same as the `ToArray` method in Rx.** See -collect for /// that behavior instead. /// /// Returns the array of `next` values, or nil if an error occurs. - (NSArray *)toArray; /// Adds every `next` to a sequence. Nils are represented by NSNulls. /// /// This corresponds to the `ToEnumerable` method in Rx. /// /// Returns a sequence which provides values from the signal as they're sent. /// Trying to retrieve a value from the sequence which has not yet been sent will /// block. @property (nonatomic, strong, readonly) RACSequence *sequence; /// Creates and returns a multicast connection. This allows you to share a single /// subscription to the underlying signal. - (RACMulticastConnection *)publish; /// Creates and returns a multicast connection that pushes values into the given /// subject. This allows you to share a single subscription to the underlying /// signal. - (RACMulticastConnection *)multicast:(RACSubject *)subject; /// Multicasts the signal to a RACReplaySubject of unlimited capacity, and /// immediately connects to the resulting RACMulticastConnection. /// /// Returns the connected, multicasted signal. - (RACSignal *)replay; /// Multicasts the signal to a RACReplaySubject of capacity 1, and immediately /// connects to the resulting RACMulticastConnection. /// /// Returns the connected, multicasted signal. - (RACSignal *)replayLast; /// Multicasts the signal to a RACReplaySubject of unlimited capacity, and /// lazily connects to the resulting RACMulticastConnection. /// /// This means the returned signal will subscribe to the multicasted signal only /// when the former receives its first subscription. /// /// Returns the lazily connected, multicasted signal. - (RACSignal *)replayLazily; /// Sends an error after `interval` seconds if the source doesn't complete /// before then. /// /// The error will be in the RACSignalErrorDomain and have a code of /// RACSignalErrorTimedOut. /// /// interval - The number of seconds after which the signal should error out. /// scheduler - The scheduler upon which any timeout error should be sent. This /// must not be nil or +[RACScheduler immediateScheduler]. /// /// Returns a signal that passes through the receiver's events, until the stream /// finishes or times out, at which point an error will be sent on `scheduler`. - (RACSignal *)timeout:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler; /// Creates and returns a signal that delivers its events on the given scheduler. /// Any side effects of the receiver will still be performed on the original /// thread. /// /// This is ideal when the signal already performs its work on the desired /// thread, but you want to handle its events elsewhere. /// /// This corresponds to the `ObserveOn` method in Rx. - (RACSignal *)deliverOn:(RACScheduler *)scheduler; /// Creates and returns a signal that executes its side effects and delivers its /// events on the given scheduler. /// /// Use of this operator should be avoided whenever possible, because the /// receiver's side effects may not be safe to run on another thread. If you just /// want to receive the signal's events on `scheduler`, use -deliverOn: instead. - (RACSignal *)subscribeOn:(RACScheduler *)scheduler; /// Creates and returns a signal that delivers its events on the main thread. /// If events are already being sent on the main thread, they may be passed on /// without delay. An event will instead be queued for later delivery on the main /// thread if sent on another thread, or if a previous event is already being /// processed, or has been queued. /// /// Any side effects of the receiver will still be performed on the original /// thread. /// /// This can be used when a signal will cause UI updates, to avoid potential /// flicker caused by delayed delivery of events, such as the first event from /// a RACObserve at view instantiation. - (RACSignal *)deliverOnMainThread; /// Groups each received object into a group, as determined by calling `keyBlock` /// with that object. The object sent is transformed by calling `transformBlock` /// with the object. If `transformBlock` is nil, it sends the original object. /// /// The returned signal is a signal of RACGroupedSignal. - (RACSignal *)groupBy:(id (^)(id object))keyBlock transform:(id (^)(id object))transformBlock; /// Calls -[RACSignal groupBy:keyBlock transform:nil]. - (RACSignal *)groupBy:(id (^)(id object))keyBlock; /// Sends an [NSNumber numberWithBool:YES] if the receiving signal sends any /// objects. - (RACSignal *)any; /// Sends an [NSNumber numberWithBool:YES] if the receiving signal sends any /// objects that pass `predicateBlock`. /// /// predicateBlock - cannot be nil. - (RACSignal *)any:(BOOL (^)(id object))predicateBlock; /// Sends an [NSNumber numberWithBool:YES] if all the objects the receiving /// signal sends pass `predicateBlock`. /// /// predicateBlock - cannot be nil. - (RACSignal *)all:(BOOL (^)(id object))predicateBlock; /// Resubscribes to the receiving signal if an error occurs, up until it has /// retried the given number of times. /// /// retryCount - if 0, it keeps retrying until it completes. - (RACSignal *)retry:(NSInteger)retryCount; /// Resubscribes to the receiving signal if an error occurs. - (RACSignal *)retry; /// Sends the latest value from the receiver only when `sampler` sends a value. /// The returned signal could repeat values if `sampler` fires more often than /// the receiver. Values from `sampler` are ignored before the receiver sends /// its first value. /// /// sampler - The signal that controls when the latest value from the receiver /// is sent. Cannot be nil. - (RACSignal *)sample:(RACSignal *)sampler; /// Ignores all `next`s from the receiver. /// /// Returns a signal which only passes through `error` or `completed` events from /// the receiver. - (RACSignal *)ignoreValues; /// Converts each of the receiver's events into a RACEvent object. /// /// Returns a signal which sends the receiver's events as RACEvents, and /// completes after the receiver sends `completed` or `error`. - (RACSignal *)materialize; /// Converts each RACEvent in the receiver back into "real" RACSignal events. /// /// Returns a signal which sends `next` for each value RACEvent, `error` for each /// error RACEvent, and `completed` for each completed RACEvent. - (RACSignal *)dematerialize; /// Inverts each NSNumber-wrapped BOOL sent by the receiver. It will assert if /// the receiver sends anything other than NSNumbers. /// /// Returns a signal of inverted NSNumber-wrapped BOOLs. - (RACSignal *)not; /// Performs a boolean AND on all of the RACTuple of NSNumbers in sent by the receiver. /// /// Asserts if the receiver sends anything other than a RACTuple of one or more NSNumbers. /// /// Returns a signal that applies AND to each NSNumber in the tuple. - (RACSignal *)and; /// Performs a boolean OR on all of the RACTuple of NSNumbers in sent by the receiver. /// /// Asserts if the receiver sends anything other than a RACTuple of one or more NSNumbers. /// /// Returns a signal that applies OR to each NSNumber in the tuple. - (RACSignal *)or; /// Sends the result of calling the block with arguments as packed in each RACTuple /// sent by the receiver. /// /// The receiver must send tuple values, where the first element of the tuple is /// a block, taking a number of parameters equal to the count of the remaining /// elements of the tuple, and returning an object. Each block must take at least /// one argument, so each tuple must contain at least 2 elements. /// /// Example: /// /// RACSignal *adder = [RACSignal return:^(NSNumber *a, NSNumber *b) { /// return @(a.intValue + b.intValue); /// }]; /// RACSignal *sums = [[RACSignal /// combineLatest:@[ adder, as, bs ]] /// reduceApply]; /// /// Returns a signal of the result of applying the first element of each tuple /// to the remaining elements. - (RACSignal *)reduceApply; @end @interface RACSignal (UnavailableOperations) - (RACSignal *)windowWithStart:(RACSignal *)openSignal close:(RACSignal * (^)(RACSignal *start))closeBlock __attribute__((unavailable("See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/587"))); - (RACSignal *)buffer:(NSUInteger)bufferCount __attribute__((unavailable("See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/587"))); - (RACSignal *)let:(RACSignal * (^)(RACSignal *sharedSignal))letBlock __attribute__((unavailable("Use -publish instead"))); + (RACSignal *)interval:(NSTimeInterval)interval __attribute__((unavailable("Use +interval:onScheduler: instead"))); + (RACSignal *)interval:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway __attribute__((unavailable("Use +interval:onScheduler:withLeeway: instead"))); - (RACSignal *)bufferWithTime:(NSTimeInterval)interval __attribute__((unavailable("Use -bufferWithTime:onScheduler: instead"))); - (RACSignal *)timeout:(NSTimeInterval)interval __attribute__((unavailable("Use -timeout:onScheduler: instead"))); - (RACDisposable *)toProperty:(NSString *)keyPath onObject:(NSObject *)object __attribute__((unavailable("Renamed to -setKeyPath:onObject:"))); - (RACSignal *)ignoreElements __attribute__((unavailable("Renamed to -ignoreValues"))); - (RACSignal *)sequenceNext:(RACSignal * (^)(void))block __attribute__((unavailable("Renamed to -then:"))); - (RACSignal *)aggregateWithStart:(id)start combine:(id (^)(id running, id next))combineBlock __attribute__((unavailable("Renamed to -aggregateWithStart:reduce:"))); - (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory combine:(id (^)(id running, id next))combineBlock __attribute__((unavailable("Renamed to -aggregateWithStartFactory:reduce:"))); - (RACDisposable *)executeCommand:(RACCommand *)command __attribute__((unavailable("Use -flattenMap: or -subscribeNext: instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal+Operations.m ================================================ // // RACSignal+Operations.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-09-06. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSignal+Operations.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "RACBlockTrampoline.h" #import "RACCommand.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACEvent.h" #import "RACGroupedSignal.h" #import "RACMulticastConnection+Private.h" #import "RACReplaySubject.h" #import "RACScheduler.h" #import "RACSerialDisposable.h" #import "RACSignalSequence.h" #import "RACStream+Private.h" #import "RACSubject.h" #import "RACSubscriber+Private.h" #import "RACSubscriber.h" #import "RACTuple.h" #import "RACUnit.h" #import #import NSString * const RACSignalErrorDomain = @"RACSignalErrorDomain"; const NSInteger RACSignalErrorTimedOut = 1; const NSInteger RACSignalErrorNoMatchingCase = 2; // Subscribes to the given signal with the given blocks. // // If the signal errors or completes, the corresponding block is invoked. If the // disposable passed to the block is _not_ disposed, then the signal is // subscribed to again. static RACDisposable *subscribeForever (RACSignal *signal, void (^next)(id), void (^error)(NSError *, RACDisposable *), void (^completed)(RACDisposable *)) { next = [next copy]; error = [error copy]; completed = [completed copy]; RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; RACSchedulerRecursiveBlock recursiveBlock = ^(void (^recurse)(void)) { RACCompoundDisposable *selfDisposable = [RACCompoundDisposable compoundDisposable]; [compoundDisposable addDisposable:selfDisposable]; __weak RACDisposable *weakSelfDisposable = selfDisposable; RACDisposable *subscriptionDisposable = [signal subscribeNext:next error:^(NSError *e) { @autoreleasepool { error(e, compoundDisposable); [compoundDisposable removeDisposable:weakSelfDisposable]; } recurse(); } completed:^{ @autoreleasepool { completed(compoundDisposable); [compoundDisposable removeDisposable:weakSelfDisposable]; } recurse(); }]; [selfDisposable addDisposable:subscriptionDisposable]; }; // Subscribe once immediately, and then use recursive scheduling for any // further resubscriptions. recursiveBlock(^{ RACScheduler *recursiveScheduler = RACScheduler.currentScheduler ?: [RACScheduler scheduler]; RACDisposable *schedulingDisposable = [recursiveScheduler scheduleRecursiveBlock:recursiveBlock]; [compoundDisposable addDisposable:schedulingDisposable]; }); return compoundDisposable; } @implementation RACSignal (Operations) - (RACSignal *)doNext:(void (^)(id x))block { NSCParameterAssert(block != NULL); return [[RACSignal createSignal:^(id subscriber) { return [self subscribeNext:^(id x) { block(x); [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ [subscriber sendCompleted]; }]; }] setNameWithFormat:@"[%@] -doNext:", self.name]; } - (RACSignal *)doError:(void (^)(NSError *error))block { NSCParameterAssert(block != NULL); return [[RACSignal createSignal:^(id subscriber) { return [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { block(error); [subscriber sendError:error]; } completed:^{ [subscriber sendCompleted]; }]; }] setNameWithFormat:@"[%@] -doError:", self.name]; } - (RACSignal *)doCompleted:(void (^)(void))block { NSCParameterAssert(block != NULL); return [[RACSignal createSignal:^(id subscriber) { return [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ block(); [subscriber sendCompleted]; }]; }] setNameWithFormat:@"[%@] -doCompleted:", self.name]; } - (RACSignal *)throttle:(NSTimeInterval)interval { return [[self throttle:interval valuesPassingTest:^(id _) { return YES; }] setNameWithFormat:@"[%@] -throttle: %f", self.name, (double)interval]; } - (RACSignal *)throttle:(NSTimeInterval)interval valuesPassingTest:(BOOL (^)(id next))predicate { NSCParameterAssert(interval >= 0); NSCParameterAssert(predicate != nil); return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; // We may never use this scheduler, but we need to set it up ahead of // time so that our scheduled blocks are run serially if we do. RACScheduler *scheduler = [RACScheduler scheduler]; // Information about any currently-buffered `next` event. __block id nextValue = nil; __block BOOL hasNextValue = NO; RACSerialDisposable *nextDisposable = [[RACSerialDisposable alloc] init]; void (^flushNext)(BOOL send) = ^(BOOL send) { @synchronized (compoundDisposable) { [nextDisposable.disposable dispose]; if (!hasNextValue) return; if (send) [subscriber sendNext:nextValue]; nextValue = nil; hasNextValue = NO; } }; RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { RACScheduler *delayScheduler = RACScheduler.currentScheduler ?: scheduler; BOOL shouldThrottle = predicate(x); @synchronized (compoundDisposable) { flushNext(NO); if (!shouldThrottle) { [subscriber sendNext:x]; return; } nextValue = x; hasNextValue = YES; nextDisposable.disposable = [delayScheduler afterDelay:interval schedule:^{ flushNext(YES); }]; } } error:^(NSError *error) { [compoundDisposable dispose]; [subscriber sendError:error]; } completed:^{ flushNext(YES); [subscriber sendCompleted]; }]; [compoundDisposable addDisposable:subscriptionDisposable]; return compoundDisposable; }] setNameWithFormat:@"[%@] -throttle: %f valuesPassingTest:", self.name, (double)interval]; } - (RACSignal *)delay:(NSTimeInterval)interval { return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; // We may never use this scheduler, but we need to set it up ahead of // time so that our scheduled blocks are run serially if we do. RACScheduler *scheduler = [RACScheduler scheduler]; void (^schedule)(dispatch_block_t) = ^(dispatch_block_t block) { RACScheduler *delayScheduler = RACScheduler.currentScheduler ?: scheduler; RACDisposable *schedulerDisposable = [delayScheduler afterDelay:interval schedule:block]; [disposable addDisposable:schedulerDisposable]; }; RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { schedule(^{ [subscriber sendNext:x]; }); } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ schedule(^{ [subscriber sendCompleted]; }); }]; [disposable addDisposable:subscriptionDisposable]; return disposable; }] setNameWithFormat:@"[%@] -delay: %f", self.name, (double)interval]; } - (RACSignal *)repeat { return [[RACSignal createSignal:^(id subscriber) { return subscribeForever(self, ^(id x) { [subscriber sendNext:x]; }, ^(NSError *error, RACDisposable *disposable) { [disposable dispose]; [subscriber sendError:error]; }, ^(RACDisposable *disposable) { // Resubscribe. }); }] setNameWithFormat:@"[%@] -repeat", self.name]; } - (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock { NSCParameterAssert(catchBlock != NULL); return [[RACSignal createSignal:^(id subscriber) { RACSerialDisposable *catchDisposable = [[RACSerialDisposable alloc] init]; RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { RACSignal *signal = catchBlock(error); NSCAssert(signal != nil, @"Expected non-nil signal from catch block on %@", self); catchDisposable.disposable = [signal subscribe:subscriber]; } completed:^{ [subscriber sendCompleted]; }]; return [RACDisposable disposableWithBlock:^{ [catchDisposable dispose]; [subscriptionDisposable dispose]; }]; }] setNameWithFormat:@"[%@] -catch:", self.name]; } - (RACSignal *)catchTo:(RACSignal *)signal { return [[self catch:^(NSError *error) { return signal; }] setNameWithFormat:@"[%@] -catchTo: %@", self.name, signal]; } + (RACSignal *)try:(id (^)(NSError **errorPtr))tryBlock { NSCParameterAssert(tryBlock != NULL); return [[RACSignal createSignal:^(id subscriber) { NSError *error; id value = tryBlock(&error); RACSignal *signal = (value == nil ? [RACSignal error:error] : [RACSignal return:value]); return [signal subscribe:subscriber]; }] setNameWithFormat:@"+try:"]; } - (RACSignal *)try:(BOOL (^)(id value, NSError **errorPtr))tryBlock { NSCParameterAssert(tryBlock != NULL); return [[self flattenMap:^(id value) { NSError *error = nil; BOOL passed = tryBlock(value, &error); return (passed ? [RACSignal return:value] : [RACSignal error:error]); }] setNameWithFormat:@"[%@] -try:", self.name]; } - (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock { NSCParameterAssert(mapBlock != NULL); return [[self flattenMap:^(id value) { NSError *error = nil; id mappedValue = mapBlock(value, &error); return (mappedValue == nil ? [RACSignal error:error] : [RACSignal return:mappedValue]); }] setNameWithFormat:@"[%@] -tryMap:", self.name]; } - (RACSignal *)initially:(void (^)(void))block { NSCParameterAssert(block != NULL); return [[RACSignal defer:^{ block(); return self; }] setNameWithFormat:@"[%@] -initially:", self.name]; } - (RACSignal *)finally:(void (^)(void))block { NSCParameterAssert(block != NULL); return [[[self doError:^(NSError *error) { block(); }] doCompleted:^{ block(); }] setNameWithFormat:@"[%@] -finally:", self.name]; } - (RACSignal *)bufferWithTime:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler { NSCParameterAssert(scheduler != nil); NSCParameterAssert(scheduler != RACScheduler.immediateScheduler); return [[RACSignal createSignal:^(id subscriber) { RACSerialDisposable *timerDisposable = [[RACSerialDisposable alloc] init]; NSMutableArray *values = [NSMutableArray array]; void (^flushValues)() = ^{ @synchronized (values) { [timerDisposable.disposable dispose]; if (values.count == 0) return; RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:values]; [values removeAllObjects]; [subscriber sendNext:tuple]; } }; RACDisposable *selfDisposable = [self subscribeNext:^(id x) { @synchronized (values) { if (values.count == 0) { timerDisposable.disposable = [scheduler afterDelay:interval schedule:flushValues]; } [values addObject:x ?: RACTupleNil.tupleNil]; } } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ flushValues(); [subscriber sendCompleted]; }]; return [RACDisposable disposableWithBlock:^{ [selfDisposable dispose]; [timerDisposable dispose]; }]; }] setNameWithFormat:@"[%@] -bufferWithTime: %f onScheduler: %@", self.name, (double)interval, scheduler]; } - (RACSignal *)collect { return [[self aggregateWithStartFactory:^{ return [[NSMutableArray alloc] init]; } reduce:^(NSMutableArray *collectedValues, id x) { [collectedValues addObject:(x ?: NSNull.null)]; return collectedValues; }] setNameWithFormat:@"[%@] -collect", self.name]; } - (RACSignal *)takeLast:(NSUInteger)count { return [[RACSignal createSignal:^(id subscriber) { NSMutableArray *valuesTaken = [NSMutableArray arrayWithCapacity:count]; return [self subscribeNext:^(id x) { [valuesTaken addObject:x ? : RACTupleNil.tupleNil]; while (valuesTaken.count > count) { [valuesTaken removeObjectAtIndex:0]; } } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ for (id value in valuesTaken) { [subscriber sendNext:value == RACTupleNil.tupleNil ? nil : value]; } [subscriber sendCompleted]; }]; }] setNameWithFormat:@"[%@] -takeLast: %lu", self.name, (unsigned long)count]; } - (RACSignal *)combineLatestWith:(RACSignal *)signal { NSCParameterAssert(signal != nil); return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; __block id lastSelfValue = nil; __block BOOL selfCompleted = NO; __block id lastOtherValue = nil; __block BOOL otherCompleted = NO; void (^sendNext)(void) = ^{ @synchronized (disposable) { if (lastSelfValue == nil || lastOtherValue == nil) return; [subscriber sendNext:RACTuplePack(lastSelfValue, lastOtherValue)]; } }; RACDisposable *selfDisposable = [self subscribeNext:^(id x) { @synchronized (disposable) { lastSelfValue = x ?: RACTupleNil.tupleNil; sendNext(); } } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ @synchronized (disposable) { selfCompleted = YES; if (otherCompleted) [subscriber sendCompleted]; } }]; [disposable addDisposable:selfDisposable]; RACDisposable *otherDisposable = [signal subscribeNext:^(id x) { @synchronized (disposable) { lastOtherValue = x ?: RACTupleNil.tupleNil; sendNext(); } } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ @synchronized (disposable) { otherCompleted = YES; if (selfCompleted) [subscriber sendCompleted]; } }]; [disposable addDisposable:otherDisposable]; return disposable; }] setNameWithFormat:@"[%@] -combineLatestWith: %@", self.name, signal]; } + (RACSignal *)combineLatest:(id)signals { return [[self join:signals block:^(RACSignal *left, RACSignal *right) { return [left combineLatestWith:right]; }] setNameWithFormat:@"+combineLatest: %@", signals]; } + (RACSignal *)combineLatest:(id)signals reduce:(id (^)())reduceBlock { NSCParameterAssert(reduceBlock != nil); RACSignal *result = [self combineLatest:signals]; // Although we assert this condition above, older versions of this method // supported this argument being nil. Avoid crashing Release builds of // apps that depended on that. if (reduceBlock != nil) result = [result reduceEach:reduceBlock]; return [result setNameWithFormat:@"+combineLatest: %@ reduce:", signals]; } - (RACSignal *)merge:(RACSignal *)signal { return [[RACSignal merge:@[ self, signal ]] setNameWithFormat:@"[%@] -merge: %@", self.name, signal]; } + (RACSignal *)merge:(id)signals { NSMutableArray *copiedSignals = [[NSMutableArray alloc] init]; for (RACSignal *signal in signals) { [copiedSignals addObject:signal]; } return [[[RACSignal createSignal:^ RACDisposable * (id subscriber) { for (RACSignal *signal in copiedSignals) { [subscriber sendNext:signal]; } [subscriber sendCompleted]; return nil; }] flatten] setNameWithFormat:@"+merge: %@", copiedSignals]; } - (RACSignal *)flatten:(NSUInteger)maxConcurrent { return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *compoundDisposable = [[RACCompoundDisposable alloc] init]; // Contains disposables for the currently active subscriptions. // // This should only be used while synchronized on `subscriber`. NSMutableArray *activeDisposables = [[NSMutableArray alloc] initWithCapacity:maxConcurrent]; // Whether the signal-of-signals has completed yet. // // This should only be used while synchronized on `subscriber`. __block BOOL selfCompleted = NO; // Subscribes to the given signal. __block void (^subscribeToSignal)(RACSignal *); // Weak reference to the above, to avoid a leak. __weak __block void (^recur)(RACSignal *); // Sends completed to the subscriber if all signals are finished. // // This should only be used while synchronized on `subscriber`. void (^completeIfAllowed)(void) = ^{ if (selfCompleted && activeDisposables.count == 0) { [subscriber sendCompleted]; } }; // The signals waiting to be started. // // This array should only be used while synchronized on `subscriber`. NSMutableArray *queuedSignals = [NSMutableArray array]; recur = subscribeToSignal = ^(RACSignal *signal) { RACSerialDisposable *serialDisposable = [[RACSerialDisposable alloc] init]; @synchronized (subscriber) { [compoundDisposable addDisposable:serialDisposable]; [activeDisposables addObject:serialDisposable]; } serialDisposable.disposable = [signal subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ __strong void (^subscribeToSignal)(RACSignal *) = recur; RACSignal *nextSignal; @synchronized (subscriber) { [compoundDisposable removeDisposable:serialDisposable]; [activeDisposables removeObjectIdenticalTo:serialDisposable]; if (queuedSignals.count == 0) { completeIfAllowed(); return; } nextSignal = queuedSignals[0]; [queuedSignals removeObjectAtIndex:0]; } subscribeToSignal(nextSignal); }]; }; [compoundDisposable addDisposable:[self subscribeNext:^(RACSignal *signal) { if (signal == nil) return; NSCAssert([signal isKindOfClass:RACSignal.class], @"Expected a RACSignal, got %@", signal); @synchronized (subscriber) { if (maxConcurrent > 0 && activeDisposables.count >= maxConcurrent) { [queuedSignals addObject:signal]; // If we need to wait, skip subscribing to this // signal. return; } } subscribeToSignal(signal); } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ @synchronized (subscriber) { selfCompleted = YES; completeIfAllowed(); } }]]; [compoundDisposable addDisposable:[RACDisposable disposableWithBlock:^{ // A strong reference is held to `subscribeToSignal` until we're // done, preventing it from deallocating early. subscribeToSignal = nil; }]]; return compoundDisposable; }] setNameWithFormat:@"[%@] -flatten: %lu", self.name, (unsigned long)maxConcurrent]; } - (RACSignal *)then:(RACSignal * (^)(void))block { NSCParameterAssert(block != nil); return [[[self ignoreValues] concat:[RACSignal defer:block]] setNameWithFormat:@"[%@] -then:", self.name]; } - (RACSignal *)concat { return [[self flatten:1] setNameWithFormat:@"[%@] -concat", self.name]; } - (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory reduce:(id (^)(id running, id next))reduceBlock { NSCParameterAssert(startFactory != NULL); NSCParameterAssert(reduceBlock != NULL); return [[RACSignal defer:^{ return [self aggregateWithStart:startFactory() reduce:reduceBlock]; }] setNameWithFormat:@"[%@] -aggregateWithStartFactory:reduce:", self.name]; } - (RACSignal *)aggregateWithStart:(id)start reduce:(id (^)(id running, id next))reduceBlock { return [[self aggregateWithStart:start reduceWithIndex:^(id running, id next, NSUInteger index) { return reduceBlock(running, next); }] setNameWithFormat:@"[%@] -aggregateWithStart: %@ reduce:", self.name, RACDescription(start)]; } - (RACSignal *)aggregateWithStart:(id)start reduceWithIndex:(id (^)(id, id, NSUInteger))reduceBlock { return [[[[self scanWithStart:start reduceWithIndex:reduceBlock] startWith:start] takeLast:1] setNameWithFormat:@"[%@] -aggregateWithStart: %@ reduceWithIndex:", self.name, RACDescription(start)]; } - (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object { return [self setKeyPath:keyPath onObject:object nilValue:nil]; } - (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object nilValue:(id)nilValue { NSCParameterAssert(keyPath != nil); NSCParameterAssert(object != nil); keyPath = [keyPath copy]; RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; // Purposely not retaining 'object', since we want to tear down the binding // when it deallocates normally. __block void * volatile objectPtr = (__bridge void *)object; RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { // Possibly spec, possibly compiler bug, but this __bridge cast does not // result in a retain here, effectively an invisible __unsafe_unretained // qualifier. Using objc_precise_lifetime gives the __strong reference // desired. The explicit use of __strong is strictly defensive. __strong NSObject *object __attribute__((objc_precise_lifetime)) = (__bridge __strong id)objectPtr; [object setValue:x ?: nilValue forKeyPath:keyPath]; } error:^(NSError *error) { __strong NSObject *object __attribute__((objc_precise_lifetime)) = (__bridge __strong id)objectPtr; NSCAssert(NO, @"Received error from %@ in binding for key path \"%@\" on %@: %@", self, keyPath, object, error); // Log the error if we're running with assertions disabled. NSLog(@"Received error from %@ in binding for key path \"%@\" on %@: %@", self, keyPath, object, error); [disposable dispose]; } completed:^{ [disposable dispose]; }]; [disposable addDisposable:subscriptionDisposable]; #if DEBUG static void *bindingsKey = &bindingsKey; NSMutableDictionary *bindings; @synchronized (object) { bindings = objc_getAssociatedObject(object, bindingsKey); if (bindings == nil) { bindings = [NSMutableDictionary dictionary]; objc_setAssociatedObject(object, bindingsKey, bindings, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } } @synchronized (bindings) { NSCAssert(bindings[keyPath] == nil, @"Signal %@ is already bound to key path \"%@\" on object %@, adding signal %@ is undefined behavior", [bindings[keyPath] nonretainedObjectValue], keyPath, object, self); bindings[keyPath] = [NSValue valueWithNonretainedObject:self]; } #endif RACDisposable *clearPointerDisposable = [RACDisposable disposableWithBlock:^{ #if DEBUG @synchronized (bindings) { [bindings removeObjectForKey:keyPath]; } #endif while (YES) { void *ptr = objectPtr; if (OSAtomicCompareAndSwapPtrBarrier(ptr, NULL, &objectPtr)) { break; } } }]; [disposable addDisposable:clearPointerDisposable]; [object.rac_deallocDisposable addDisposable:disposable]; RACCompoundDisposable *objectDisposable = object.rac_deallocDisposable; return [RACDisposable disposableWithBlock:^{ [objectDisposable removeDisposable:disposable]; [disposable dispose]; }]; } + (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler { return [[RACSignal interval:interval onScheduler:scheduler withLeeway:0.0] setNameWithFormat:@"+interval: %f onScheduler: %@", (double)interval, scheduler]; } + (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway { NSCParameterAssert(scheduler != nil); NSCParameterAssert(scheduler != RACScheduler.immediateScheduler); return [[RACSignal createSignal:^(id subscriber) { return [scheduler after:[NSDate dateWithTimeIntervalSinceNow:interval] repeatingEvery:interval withLeeway:leeway schedule:^{ [subscriber sendNext:[NSDate date]]; }]; }] setNameWithFormat:@"+interval: %f onScheduler: %@ withLeeway: %f", (double)interval, scheduler, (double)leeway]; } - (RACSignal *)takeUntil:(RACSignal *)signalTrigger { return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; void (^triggerCompletion)(void) = ^{ [disposable dispose]; [subscriber sendCompleted]; }; RACDisposable *triggerDisposable = [signalTrigger subscribeNext:^(id _) { triggerCompletion(); } completed:^{ triggerCompletion(); }]; [disposable addDisposable:triggerDisposable]; if (!disposable.disposed) { RACDisposable *selfDisposable = [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ [disposable dispose]; [subscriber sendCompleted]; }]; [disposable addDisposable:selfDisposable]; } return disposable; }] setNameWithFormat:@"[%@] -takeUntil: %@", self.name, signalTrigger]; } - (RACSignal *)takeUntilReplacement:(RACSignal *)replacement { return [RACSignal createSignal:^(id subscriber) { RACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init]; RACDisposable *replacementDisposable = [replacement subscribeNext:^(id x) { [selfDisposable dispose]; [subscriber sendNext:x]; } error:^(NSError *error) { [selfDisposable dispose]; [subscriber sendError:error]; } completed:^{ [selfDisposable dispose]; [subscriber sendCompleted]; }]; if (!selfDisposable.disposed) { selfDisposable.disposable = [[self concat:[RACSignal never]] subscribe:subscriber]; } return [RACDisposable disposableWithBlock:^{ [selfDisposable dispose]; [replacementDisposable dispose]; }]; }]; } - (RACSignal *)switchToLatest { return [[RACSignal createSignal:^(id subscriber) { RACMulticastConnection *connection = [self publish]; RACDisposable *subscriptionDisposable = [[connection.signal flattenMap:^(RACSignal *x) { NSCAssert(x == nil || [x isKindOfClass:RACSignal.class], @"-switchToLatest requires that the source signal (%@) send signals. Instead we got: %@", self, x); // -concat:[RACSignal never] prevents completion of the receiver from // prematurely terminating the inner signal. return [x takeUntil:[connection.signal concat:[RACSignal never]]]; }] subscribe:subscriber]; RACDisposable *connectionDisposable = [connection connect]; return [RACDisposable disposableWithBlock:^{ [subscriptionDisposable dispose]; [connectionDisposable dispose]; }]; }] setNameWithFormat:@"[%@] -switchToLatest", self.name]; } + (RACSignal *)switch:(RACSignal *)signal cases:(NSDictionary *)cases default:(RACSignal *)defaultSignal { NSCParameterAssert(signal != nil); NSCParameterAssert(cases != nil); for (id key in cases) { id value __attribute__((unused)) = cases[key]; NSCAssert([value isKindOfClass:RACSignal.class], @"Expected all cases to be RACSignals, %@ isn't", value); } NSDictionary *copy = [cases copy]; return [[[signal map:^(id key) { if (key == nil) key = RACTupleNil.tupleNil; RACSignal *signal = copy[key] ?: defaultSignal; if (signal == nil) { NSString *description = [NSString stringWithFormat:NSLocalizedString(@"No matching signal found for value %@", @""), key]; return [RACSignal error:[NSError errorWithDomain:RACSignalErrorDomain code:RACSignalErrorNoMatchingCase userInfo:@{ NSLocalizedDescriptionKey: description }]]; } return signal; }] switchToLatest] setNameWithFormat:@"+switch: %@ cases: %@ default: %@", signal, cases, defaultSignal]; } + (RACSignal *)if:(RACSignal *)boolSignal then:(RACSignal *)trueSignal else:(RACSignal *)falseSignal { NSCParameterAssert(boolSignal != nil); NSCParameterAssert(trueSignal != nil); NSCParameterAssert(falseSignal != nil); return [[[boolSignal map:^(NSNumber *value) { NSCAssert([value isKindOfClass:NSNumber.class], @"Expected %@ to send BOOLs, not %@", boolSignal, value); return (value.boolValue ? trueSignal : falseSignal); }] switchToLatest] setNameWithFormat:@"+if: %@ then: %@ else: %@", boolSignal, trueSignal, falseSignal]; } - (id)first { return [self firstOrDefault:nil]; } - (id)firstOrDefault:(id)defaultValue { return [self firstOrDefault:defaultValue success:NULL error:NULL]; } - (id)firstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error { NSCondition *condition = [[NSCondition alloc] init]; condition.name = [NSString stringWithFormat:@"[%@] -firstOrDefault: %@ success:error:", self.name, defaultValue]; __block id value = defaultValue; __block BOOL done = NO; // Ensures that we don't pass values across thread boundaries by reference. __block NSError *localError; __block BOOL localSuccess; [[self take:1] subscribeNext:^(id x) { [condition lock]; value = x; localSuccess = YES; done = YES; [condition broadcast]; [condition unlock]; } error:^(NSError *e) { [condition lock]; if (!done) { localSuccess = NO; localError = e; done = YES; [condition broadcast]; } [condition unlock]; } completed:^{ [condition lock]; localSuccess = YES; done = YES; [condition broadcast]; [condition unlock]; }]; [condition lock]; while (!done) { [condition wait]; } if (success != NULL) *success = localSuccess; if (error != NULL) *error = localError; [condition unlock]; return value; } - (BOOL)waitUntilCompleted:(NSError **)error { BOOL success = NO; [[[self ignoreValues] setNameWithFormat:@"[%@] -waitUntilCompleted:", self.name] firstOrDefault:nil success:&success error:error]; return success; } + (RACSignal *)defer:(RACSignal * (^)(void))block { NSCParameterAssert(block != NULL); return [[RACSignal createSignal:^(id subscriber) { return [block() subscribe:subscriber]; }] setNameWithFormat:@"+defer:"]; } - (NSArray *)toArray { return [[[self collect] first] copy]; } - (RACSequence *)sequence { return [[RACSignalSequence sequenceWithSignal:self] setNameWithFormat:@"[%@] -sequence", self.name]; } - (RACMulticastConnection *)publish { RACSubject *subject = [[RACSubject subject] setNameWithFormat:@"[%@] -publish", self.name]; RACMulticastConnection *connection = [self multicast:subject]; return connection; } - (RACMulticastConnection *)multicast:(RACSubject *)subject { [subject setNameWithFormat:@"[%@] -multicast: %@", self.name, subject.name]; RACMulticastConnection *connection = [[RACMulticastConnection alloc] initWithSourceSignal:self subject:subject]; return connection; } - (RACSignal *)replay { RACReplaySubject *subject = [[RACReplaySubject subject] setNameWithFormat:@"[%@] -replay", self.name]; RACMulticastConnection *connection = [self multicast:subject]; [connection connect]; return connection.signal; } - (RACSignal *)replayLast { RACReplaySubject *subject = [[RACReplaySubject replaySubjectWithCapacity:1] setNameWithFormat:@"[%@] -replayLast", self.name]; RACMulticastConnection *connection = [self multicast:subject]; [connection connect]; return connection.signal; } - (RACSignal *)replayLazily { RACMulticastConnection *connection = [self multicast:[RACReplaySubject subject]]; return [[RACSignal defer:^{ [connection connect]; return connection.signal; }] setNameWithFormat:@"[%@] -replayLazily", self.name]; } - (RACSignal *)timeout:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler { NSCParameterAssert(scheduler != nil); NSCParameterAssert(scheduler != RACScheduler.immediateScheduler); return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; RACDisposable *timeoutDisposable = [scheduler afterDelay:interval schedule:^{ [disposable dispose]; [subscriber sendError:[NSError errorWithDomain:RACSignalErrorDomain code:RACSignalErrorTimedOut userInfo:nil]]; }]; [disposable addDisposable:timeoutDisposable]; RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [disposable dispose]; [subscriber sendError:error]; } completed:^{ [disposable dispose]; [subscriber sendCompleted]; }]; [disposable addDisposable:subscriptionDisposable]; return disposable; }] setNameWithFormat:@"[%@] -timeout: %f onScheduler: %@", self.name, (double)interval, scheduler]; } - (RACSignal *)deliverOn:(RACScheduler *)scheduler { return [[RACSignal createSignal:^(id subscriber) { return [self subscribeNext:^(id x) { [scheduler schedule:^{ [subscriber sendNext:x]; }]; } error:^(NSError *error) { [scheduler schedule:^{ [subscriber sendError:error]; }]; } completed:^{ [scheduler schedule:^{ [subscriber sendCompleted]; }]; }]; }] setNameWithFormat:@"[%@] -deliverOn: %@", self.name, scheduler]; } - (RACSignal *)subscribeOn:(RACScheduler *)scheduler { return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; RACDisposable *schedulingDisposable = [scheduler schedule:^{ RACDisposable *subscriptionDisposable = [self subscribe:subscriber]; [disposable addDisposable:subscriptionDisposable]; }]; [disposable addDisposable:schedulingDisposable]; return disposable; }] setNameWithFormat:@"[%@] -subscribeOn: %@", self.name, scheduler]; } - (RACSignal *)deliverOnMainThread { return [[RACSignal createSignal:^(id subscriber) { __block volatile int32_t queueLength = 0; void (^performOnMainThread)(dispatch_block_t) = ^(dispatch_block_t block) { int32_t queued = OSAtomicIncrement32(&queueLength); if (NSThread.isMainThread && queued == 1) { block(); OSAtomicDecrement32(&queueLength); } else { dispatch_async(dispatch_get_main_queue(), ^{ block(); OSAtomicDecrement32(&queueLength); }); } }; return [self subscribeNext:^(id x) { performOnMainThread(^{ [subscriber sendNext:x]; }); } error:^(NSError *error) { performOnMainThread(^{ [subscriber sendError:error]; }); } completed:^{ performOnMainThread(^{ [subscriber sendCompleted]; }); }]; }] setNameWithFormat:@"[%@] -deliverOnMainThread", self.name]; } - (RACSignal *)groupBy:(id (^)(id object))keyBlock transform:(id (^)(id object))transformBlock { NSCParameterAssert(keyBlock != NULL); return [[RACSignal createSignal:^(id subscriber) { NSMutableDictionary *groups = [NSMutableDictionary dictionary]; NSMutableArray *orderedGroups = [NSMutableArray array]; return [self subscribeNext:^(id x) { id key = keyBlock(x); RACGroupedSignal *groupSubject = nil; @synchronized(groups) { groupSubject = groups[key]; if (groupSubject == nil) { groupSubject = [RACGroupedSignal signalWithKey:key]; groups[key] = groupSubject; [orderedGroups addObject:groupSubject]; [subscriber sendNext:groupSubject]; } } [groupSubject sendNext:transformBlock != NULL ? transformBlock(x) : x]; } error:^(NSError *error) { [subscriber sendError:error]; [orderedGroups makeObjectsPerformSelector:@selector(sendError:) withObject:error]; } completed:^{ [subscriber sendCompleted]; [orderedGroups makeObjectsPerformSelector:@selector(sendCompleted)]; }]; }] setNameWithFormat:@"[%@] -groupBy:transform:", self.name]; } - (RACSignal *)groupBy:(id (^)(id object))keyBlock { return [[self groupBy:keyBlock transform:nil] setNameWithFormat:@"[%@] -groupBy:", self.name]; } - (RACSignal *)any { return [[self any:^(id x) { return YES; }] setNameWithFormat:@"[%@] -any", self.name]; } - (RACSignal *)any:(BOOL (^)(id object))predicateBlock { NSCParameterAssert(predicateBlock != NULL); return [[[self materialize] bind:^{ return ^(RACEvent *event, BOOL *stop) { if (event.finished) { *stop = YES; return [RACSignal return:@NO]; } if (predicateBlock(event.value)) { *stop = YES; return [RACSignal return:@YES]; } return [RACSignal empty]; }; }] setNameWithFormat:@"[%@] -any:", self.name]; } - (RACSignal *)all:(BOOL (^)(id object))predicateBlock { NSCParameterAssert(predicateBlock != NULL); return [[[self materialize] bind:^{ return ^(RACEvent *event, BOOL *stop) { if (event.eventType == RACEventTypeCompleted) { *stop = YES; return [RACSignal return:@YES]; } if (event.eventType == RACEventTypeError || !predicateBlock(event.value)) { *stop = YES; return [RACSignal return:@NO]; } return [RACSignal empty]; }; }] setNameWithFormat:@"[%@] -all:", self.name]; } - (RACSignal *)retry:(NSInteger)retryCount { return [[RACSignal createSignal:^(id subscriber) { __block NSInteger currentRetryCount = 0; return subscribeForever(self, ^(id x) { [subscriber sendNext:x]; }, ^(NSError *error, RACDisposable *disposable) { if (retryCount == 0 || currentRetryCount < retryCount) { // Resubscribe. currentRetryCount++; return; } [disposable dispose]; [subscriber sendError:error]; }, ^(RACDisposable *disposable) { [disposable dispose]; [subscriber sendCompleted]; }); }] setNameWithFormat:@"[%@] -retry: %lu", self.name, (unsigned long)retryCount]; } - (RACSignal *)retry { return [[self retry:0] setNameWithFormat:@"[%@] -retry", self.name]; } - (RACSignal *)sample:(RACSignal *)sampler { NSCParameterAssert(sampler != nil); return [[RACSignal createSignal:^(id subscriber) { NSLock *lock = [[NSLock alloc] init]; __block id lastValue; __block BOOL hasValue = NO; RACSerialDisposable *samplerDisposable = [[RACSerialDisposable alloc] init]; RACDisposable *sourceDisposable = [self subscribeNext:^(id x) { [lock lock]; hasValue = YES; lastValue = x; [lock unlock]; } error:^(NSError *error) { [samplerDisposable dispose]; [subscriber sendError:error]; } completed:^{ [samplerDisposable dispose]; [subscriber sendCompleted]; }]; samplerDisposable.disposable = [sampler subscribeNext:^(id _) { BOOL shouldSend = NO; id value; [lock lock]; shouldSend = hasValue; value = lastValue; [lock unlock]; if (shouldSend) { [subscriber sendNext:value]; } } error:^(NSError *error) { [sourceDisposable dispose]; [subscriber sendError:error]; } completed:^{ [sourceDisposable dispose]; [subscriber sendCompleted]; }]; return [RACDisposable disposableWithBlock:^{ [samplerDisposable dispose]; [sourceDisposable dispose]; }]; }] setNameWithFormat:@"[%@] -sample: %@", self.name, sampler]; } - (RACSignal *)ignoreValues { return [[self filter:^(id _) { return NO; }] setNameWithFormat:@"[%@] -ignoreValues", self.name]; } - (RACSignal *)materialize { return [[RACSignal createSignal:^(id subscriber) { return [self subscribeNext:^(id x) { [subscriber sendNext:[RACEvent eventWithValue:x]]; } error:^(NSError *error) { [subscriber sendNext:[RACEvent eventWithError:error]]; [subscriber sendCompleted]; } completed:^{ [subscriber sendNext:RACEvent.completedEvent]; [subscriber sendCompleted]; }]; }] setNameWithFormat:@"[%@] -materialize", self.name]; } - (RACSignal *)dematerialize { return [[self bind:^{ return ^(RACEvent *event, BOOL *stop) { switch (event.eventType) { case RACEventTypeCompleted: *stop = YES; return [RACSignal empty]; case RACEventTypeError: *stop = YES; return [RACSignal error:event.error]; case RACEventTypeNext: return [RACSignal return:event.value]; } }; }] setNameWithFormat:@"[%@] -dematerialize", self.name]; } - (RACSignal *)not { return [[self map:^(NSNumber *value) { NSCAssert([value isKindOfClass:NSNumber.class], @"-not must only be used on a signal of NSNumbers. Instead, got: %@", value); return @(!value.boolValue); }] setNameWithFormat:@"[%@] -not", self.name]; } - (RACSignal *)and { return [[self map:^(RACTuple *tuple) { NSCAssert([tuple isKindOfClass:RACTuple.class], @"-and must only be used on a signal of RACTuples of NSNumbers. Instead, received: %@", tuple); NSCAssert(tuple.count > 0, @"-and must only be used on a signal of RACTuples of NSNumbers, with at least 1 value in the tuple"); return @([tuple.rac_sequence all:^(NSNumber *number) { NSCAssert([number isKindOfClass:NSNumber.class], @"-and must only be used on a signal of RACTuples of NSNumbers. Instead, tuple contains a non-NSNumber value: %@", tuple); return number.boolValue; }]); }] setNameWithFormat:@"[%@] -and", self.name]; } - (RACSignal *)or { return [[self map:^(RACTuple *tuple) { NSCAssert([tuple isKindOfClass:RACTuple.class], @"-or must only be used on a signal of RACTuples of NSNumbers. Instead, received: %@", tuple); NSCAssert(tuple.count > 0, @"-or must only be used on a signal of RACTuples of NSNumbers, with at least 1 value in the tuple"); return @([tuple.rac_sequence any:^(NSNumber *number) { NSCAssert([number isKindOfClass:NSNumber.class], @"-or must only be used on a signal of RACTuples of NSNumbers. Instead, tuple contains a non-NSNumber value: %@", tuple); return number.boolValue; }]); }] setNameWithFormat:@"[%@] -or", self.name]; } - (RACSignal *)reduceApply { return [[self map:^(RACTuple *tuple) { NSCAssert([tuple isKindOfClass:RACTuple.class], @"-reduceApply must only be used on a signal of RACTuples. Instead, received: %@", tuple); NSCAssert(tuple.count > 1, @"-reduceApply must only be used on a signal of RACTuples, with at least a block in tuple[0] and its first argument in tuple[1]"); // We can't use -array, because we need to preserve RACTupleNil NSMutableArray *tupleArray = [NSMutableArray arrayWithCapacity:tuple.count]; for (id val in tuple) { [tupleArray addObject:val]; } RACTuple *arguments = [RACTuple tupleWithObjectsFromArray:[tupleArray subarrayWithRange:NSMakeRange(1, tupleArray.count - 1)]]; return [RACBlockTrampoline invokeBlock:tuple[0] withArguments:arguments]; }] setNameWithFormat:@"[%@] -reduceApply", self.name]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal.h ================================================ // // RACSignal.h // ReactiveCocoa // // Created by Josh Abernathy on 3/1/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import "RACStream.h" @class RACDisposable; @class RACScheduler; @class RACSubject; @protocol RACSubscriber; @interface RACSignal : RACStream /// Creates a new signal. This is the preferred way to create a new signal /// operation or behavior. /// /// Events can be sent to new subscribers immediately in the `didSubscribe` /// block, but the subscriber will not be able to dispose of the signal until /// a RACDisposable is returned from `didSubscribe`. In the case of infinite /// signals, this won't _ever_ happen if events are sent immediately. /// /// To ensure that the signal is disposable, events can be scheduled on the /// +[RACScheduler currentScheduler] (so that they're deferred, not sent /// immediately), or they can be sent in the background. The RACDisposable /// returned by the `didSubscribe` block should cancel any such scheduling or /// asynchronous work. /// /// didSubscribe - Called when the signal is subscribed to. The new subscriber is /// passed in. You can then manually control the by /// sending it -sendNext:, -sendError:, and -sendCompleted, /// as defined by the operation you're implementing. This block /// should return a RACDisposable which cancels any ongoing work /// triggered by the subscription, and cleans up any resources or /// disposables created as part of it. When the disposable is /// disposed of, the signal must not send any more events to the /// `subscriber`. If no cleanup is necessary, return nil. /// /// **Note:** The `didSubscribe` block is called every time a new subscriber /// subscribes. Any side effects within the block will thus execute once for each /// subscription, not necessarily on one thread, and possibly even /// simultaneously! + (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe; /// Returns a signal that immediately sends the given error. + (RACSignal *)error:(NSError *)error; /// Returns a signal that never completes. + (RACSignal *)never; /// Immediately schedules the given block on the given scheduler. The block is /// given a subscriber to which it can send events. /// /// scheduler - The scheduler on which `block` will be scheduled and results /// delivered. Cannot be nil. /// block - The block to invoke. Cannot be NULL. /// /// Returns a signal which will send all events sent on the subscriber given to /// `block`. All events will be sent on `scheduler` and it will replay any missed /// events to new subscribers. + (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block; /// Invokes the given block only on the first subscription. The block is given a /// subscriber to which it can send events. /// /// Note that disposing of the subscription to the returned signal will *not* /// dispose of the underlying subscription. If you need that behavior, see /// -[RACMulticastConnection autoconnect]. The underlying subscription will never /// be disposed of. Because of this, `block` should never return an infinite /// signal since there would be no way of ending it. /// /// scheduler - The scheduler on which the block should be scheduled. Note that /// if given +[RACScheduler immediateScheduler], the block will be /// invoked synchronously on the first subscription. Cannot be nil. /// block - The block to invoke on the first subscription. Cannot be NULL. /// /// Returns a signal which will pass through the events sent to the subscriber /// given to `block` and replay any missed events to new subscribers. + (RACSignal *)startLazilyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block; @end @interface RACSignal (RACStream) /// Returns a signal that immediately sends the given value and then completes. + (RACSignal *)return:(id)value; /// Returns a signal that immediately completes. + (RACSignal *)empty; /// Subscribes to `signal` when the source signal completes. - (RACSignal *)concat:(RACSignal *)signal; /// Zips the values in the receiver with those of the given signal to create /// RACTuples. /// /// The first `next` of each stream will be combined, then the second `next`, and /// so forth, until either signal completes or errors. /// /// signal - The signal to zip with. This must not be `nil`. /// /// Returns a new signal of RACTuples, representing the combined values of the /// two signals. Any error from one of the original signals will be forwarded on /// the returned signal. - (RACSignal *)zipWith:(RACSignal *)signal; @end @interface RACSignal (Subscription) /// Subscribes `subscriber` to changes on the receiver. The receiver defines which /// events it actually sends and in what situations the events are sent. /// /// Subscription will always happen on a valid RACScheduler. If the /// +[RACScheduler currentScheduler] cannot be determined at the time of /// subscription (e.g., because the calling code is running on a GCD queue or /// NSOperationQueue), subscription will occur on a private background scheduler. /// On the main thread, subscriptions will always occur immediately, with a /// +[RACScheduler currentScheduler] of +[RACScheduler mainThreadScheduler]. /// /// This method must be overridden by any subclasses. /// /// Returns nil or a disposable. You can call -[RACDisposable dispose] if you /// need to end your subscription before it would "naturally" end, either by /// completing or erroring. Once the disposable has been disposed, the subscriber /// won't receive any more events from the subscription. - (RACDisposable *)subscribe:(id)subscriber; /// Convenience method to subscribe to the `next` event. /// /// This corresponds to `IObserver.OnNext` in Rx. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock; /// Convenience method to subscribe to the `next` and `completed` events. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock; /// Convenience method to subscribe to the `next`, `completed`, and `error` events. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock; /// Convenience method to subscribe to `error` events. /// /// This corresponds to the `IObserver.OnError` in Rx. - (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock; /// Convenience method to subscribe to `completed` events. /// /// This corresponds to the `IObserver.OnCompleted` in Rx. - (RACDisposable *)subscribeCompleted:(void (^)(void))completedBlock; /// Convenience method to subscribe to `next` and `error` events. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock; /// Convenience method to subscribe to `error` and `completed` events. - (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock; @end /// Additional methods to assist with debugging. @interface RACSignal (Debugging) /// Logs all events that the receiver sends. - (RACSignal *)logAll; /// Logs each `next` that the receiver sends. - (RACSignal *)logNext; /// Logs any error that the receiver sends. - (RACSignal *)logError; /// Logs any `completed` event that the receiver sends. - (RACSignal *)logCompleted; @end /// Additional methods to assist with unit testing. /// /// **These methods should never ship in production code.** @interface RACSignal (Testing) /// Spins the main run loop for a short while, waiting for the receiver to send a `next`. /// /// **Because this method executes the run loop recursively, it should only be used /// on the main thread, and only from a unit test.** /// /// defaultValue - Returned if the receiver completes or errors before sending /// a `next`, or if the method times out. This argument may be /// nil. /// success - If not NULL, set to whether the receiver completed /// successfully. /// error - If not NULL, set to any error that occurred. /// /// Returns the first value received, or `defaultValue` if no value is received /// before the signal finishes or the method times out. - (id)asynchronousFirstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error; /// Spins the main run loop for a short while, waiting for the receiver to complete. /// /// **Because this method executes the run loop recursively, it should only be used /// on the main thread, and only from a unit test.** /// /// error - If not NULL, set to any error that occurs. /// /// Returns whether the signal completed successfully before timing out. If NO, /// `error` will be set to any error that occurred. - (BOOL)asynchronouslyWaitUntilCompleted:(NSError **)error; @end @interface RACSignal (Unavailable) + (RACSignal *)start:(id (^)(BOOL *success, NSError **error))block __attribute__((unavailable("Use +startEagerlyWithScheduler:block: instead"))); + (RACSignal *)startWithScheduler:(RACScheduler *)scheduler subjectBlock:(void (^)(RACSubject *subject))block __attribute__((unavailable("Use +startEagerlyWithScheduler:block: instead"))); + (RACSignal *)startWithScheduler:(RACScheduler *)scheduler block:(id (^)(BOOL *success, NSError **error))block __attribute__((unavailable("Use +startEagerlyWithScheduler:block: instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal.m ================================================ // // RACSignal.m // ReactiveCocoa // // Created by Josh Abernathy on 3/15/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSignal.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACDynamicSignal.h" #import "RACEmptySignal.h" #import "RACErrorSignal.h" #import "RACMulticastConnection.h" #import "RACReplaySubject.h" #import "RACReturnSignal.h" #import "RACScheduler.h" #import "RACSerialDisposable.h" #import "RACSignal+Operations.h" #import "RACSubject.h" #import "RACSubscriber+Private.h" #import "RACTuple.h" #import @implementation RACSignal #pragma mark Lifecycle + (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe { return [RACDynamicSignal createSignal:didSubscribe]; } + (RACSignal *)error:(NSError *)error { return [RACErrorSignal error:error]; } + (RACSignal *)never { return [[self createSignal:^ RACDisposable * (id subscriber) { return nil; }] setNameWithFormat:@"+never"]; } + (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block { NSCParameterAssert(scheduler != nil); NSCParameterAssert(block != NULL); RACSignal *signal = [self startLazilyWithScheduler:scheduler block:block]; // Subscribe to force the lazy signal to call its block. [[signal publish] connect]; return [signal setNameWithFormat:@"+startEagerlyWithScheduler: %@ block:", scheduler]; } + (RACSignal *)startLazilyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block { NSCParameterAssert(scheduler != nil); NSCParameterAssert(block != NULL); RACMulticastConnection *connection = [[RACSignal createSignal:^ id (id subscriber) { block(subscriber); return nil; }] multicast:[RACReplaySubject subject]]; return [[[RACSignal createSignal:^ id (id subscriber) { [connection.signal subscribe:subscriber]; [connection connect]; return nil; }] subscribeOn:scheduler] setNameWithFormat:@"+startLazilyWithScheduler: %@ block:", scheduler]; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p> name: %@", self.class, self, self.name]; } @end @implementation RACSignal (RACStream) + (RACSignal *)empty { return [RACEmptySignal empty]; } + (RACSignal *)return:(id)value { return [RACReturnSignal return:value]; } - (RACSignal *)bind:(RACStreamBindBlock (^)(void))block { NSCParameterAssert(block != NULL); /* * -bind: should: * * 1. Subscribe to the original signal of values. * 2. Any time the original signal sends a value, transform it using the binding block. * 3. If the binding block returns a signal, subscribe to it, and pass all of its values through to the subscriber as they're received. * 4. If the binding block asks the bind to terminate, complete the _original_ signal. * 5. When _all_ signals complete, send completed to the subscriber. * * If any signal sends an error at any point, send that to the subscriber. */ return [[RACSignal createSignal:^(id subscriber) { RACStreamBindBlock bindingBlock = block(); __block volatile int32_t signalCount = 1; // indicates self RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; void (^completeSignal)(RACDisposable *) = ^(RACDisposable *finishedDisposable) { if (OSAtomicDecrement32Barrier(&signalCount) == 0) { [subscriber sendCompleted]; [compoundDisposable dispose]; } else { [compoundDisposable removeDisposable:finishedDisposable]; } }; void (^addSignal)(RACSignal *) = ^(RACSignal *signal) { OSAtomicIncrement32Barrier(&signalCount); RACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init]; [compoundDisposable addDisposable:selfDisposable]; RACDisposable *disposable = [signal subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [compoundDisposable dispose]; [subscriber sendError:error]; } completed:^{ @autoreleasepool { completeSignal(selfDisposable); } }]; selfDisposable.disposable = disposable; }; @autoreleasepool { RACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init]; [compoundDisposable addDisposable:selfDisposable]; RACDisposable *bindingDisposable = [self subscribeNext:^(id x) { // Manually check disposal to handle synchronous errors. if (compoundDisposable.disposed) return; BOOL stop = NO; id signal = bindingBlock(x, &stop); @autoreleasepool { if (signal != nil) addSignal(signal); if (signal == nil || stop) { [selfDisposable dispose]; completeSignal(selfDisposable); } } } error:^(NSError *error) { [compoundDisposable dispose]; [subscriber sendError:error]; } completed:^{ @autoreleasepool { completeSignal(selfDisposable); } }]; selfDisposable.disposable = bindingDisposable; } return compoundDisposable; }] setNameWithFormat:@"[%@] -bind:", self.name]; } - (RACSignal *)concat:(RACSignal *)signal { return [[RACSignal createSignal:^(id subscriber) { RACCompoundDisposable *compoundDisposable = [[RACCompoundDisposable alloc] init]; RACDisposable *sourceDisposable = [self subscribeNext:^(id x) { [subscriber sendNext:x]; } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ RACDisposable *concattedDisposable = [signal subscribe:subscriber]; [compoundDisposable addDisposable:concattedDisposable]; }]; [compoundDisposable addDisposable:sourceDisposable]; return compoundDisposable; }] setNameWithFormat:@"[%@] -concat: %@", self.name, signal]; } - (RACSignal *)zipWith:(RACSignal *)signal { NSCParameterAssert(signal != nil); return [[RACSignal createSignal:^(id subscriber) { __block BOOL selfCompleted = NO; NSMutableArray *selfValues = [NSMutableArray array]; __block BOOL otherCompleted = NO; NSMutableArray *otherValues = [NSMutableArray array]; void (^sendCompletedIfNecessary)(void) = ^{ @synchronized (selfValues) { BOOL selfEmpty = (selfCompleted && selfValues.count == 0); BOOL otherEmpty = (otherCompleted && otherValues.count == 0); if (selfEmpty || otherEmpty) [subscriber sendCompleted]; } }; void (^sendNext)(void) = ^{ @synchronized (selfValues) { if (selfValues.count == 0) return; if (otherValues.count == 0) return; RACTuple *tuple = RACTuplePack(selfValues[0], otherValues[0]); [selfValues removeObjectAtIndex:0]; [otherValues removeObjectAtIndex:0]; [subscriber sendNext:tuple]; sendCompletedIfNecessary(); } }; RACDisposable *selfDisposable = [self subscribeNext:^(id x) { @synchronized (selfValues) { [selfValues addObject:x ?: RACTupleNil.tupleNil]; sendNext(); } } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ @synchronized (selfValues) { selfCompleted = YES; sendCompletedIfNecessary(); } }]; RACDisposable *otherDisposable = [signal subscribeNext:^(id x) { @synchronized (selfValues) { [otherValues addObject:x ?: RACTupleNil.tupleNil]; sendNext(); } } error:^(NSError *error) { [subscriber sendError:error]; } completed:^{ @synchronized (selfValues) { otherCompleted = YES; sendCompletedIfNecessary(); } }]; return [RACDisposable disposableWithBlock:^{ [selfDisposable dispose]; [otherDisposable dispose]; }]; }] setNameWithFormat:@"[%@] -zipWith: %@", self.name, signal]; } @end @implementation RACSignal (Subscription) - (RACDisposable *)subscribe:(id)subscriber { NSCAssert(NO, @"This method must be overridden by subclasses"); return nil; } - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock { NSCParameterAssert(nextBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:NULL]; return [self subscribe:o]; } - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock { NSCParameterAssert(nextBlock != NULL); NSCParameterAssert(completedBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:completedBlock]; return [self subscribe:o]; } - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock { NSCParameterAssert(nextBlock != NULL); NSCParameterAssert(errorBlock != NULL); NSCParameterAssert(completedBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:errorBlock completed:completedBlock]; return [self subscribe:o]; } - (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock { NSCParameterAssert(errorBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:errorBlock completed:NULL]; return [self subscribe:o]; } - (RACDisposable *)subscribeCompleted:(void (^)(void))completedBlock { NSCParameterAssert(completedBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:NULL completed:completedBlock]; return [self subscribe:o]; } - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock { NSCParameterAssert(nextBlock != NULL); NSCParameterAssert(errorBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:errorBlock completed:NULL]; return [self subscribe:o]; } - (RACDisposable *)subscribeError:(void (^)(NSError *))errorBlock completed:(void (^)(void))completedBlock { NSCParameterAssert(completedBlock != NULL); NSCParameterAssert(errorBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:errorBlock completed:completedBlock]; return [self subscribe:o]; } @end @implementation RACSignal (Debugging) - (RACSignal *)logAll { return [[[self logNext] logError] logCompleted]; } - (RACSignal *)logNext { return [[self doNext:^(id x) { NSLog(@"%@ next: %@", self, x); }] setNameWithFormat:@"%@", self.name]; } - (RACSignal *)logError { return [[self doError:^(NSError *error) { NSLog(@"%@ error: %@", self, error); }] setNameWithFormat:@"%@", self.name]; } - (RACSignal *)logCompleted { return [[self doCompleted:^{ NSLog(@"%@ completed", self); }] setNameWithFormat:@"%@", self.name]; } @end @implementation RACSignal (Testing) static const NSTimeInterval RACSignalAsynchronousWaitTimeout = 10; - (id)asynchronousFirstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error { NSCAssert([NSThread isMainThread], @"%s should only be used from the main thread", __func__); __block id result = defaultValue; __block BOOL done = NO; // Ensures that we don't pass values across thread boundaries by reference. __block NSError *localError; __block BOOL localSuccess = YES; [[[[self take:1] timeout:RACSignalAsynchronousWaitTimeout onScheduler:[RACScheduler scheduler]] deliverOn:RACScheduler.mainThreadScheduler] subscribeNext:^(id x) { result = x; done = YES; } error:^(NSError *e) { if (!done) { localSuccess = NO; localError = e; done = YES; } } completed:^{ done = YES; }]; do { [NSRunLoop.mainRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; } while (!done); if (success != NULL) *success = localSuccess; if (error != NULL) *error = localError; return result; } - (BOOL)asynchronouslyWaitUntilCompleted:(NSError **)error { BOOL success = NO; [[self ignoreValues] asynchronousFirstOrDefault:nil success:&success error:error]; return success; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignalProvider.d ================================================ provider RACSignal { probe next(char *signal, char *subscriber, char *valueDescription); probe completed(char *signal, char *subscriber); probe error(char *signal, char *subscriber, char *errorDescription); }; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignalSequence.h ================================================ // // RACSignalSequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-09. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSequence.h" @class RACSignal; // Private class that adapts a RACSignal to the RACSequence interface. @interface RACSignalSequence : RACSequence // Returns a sequence for enumerating over the given signal. + (RACSequence *)sequenceWithSignal:(RACSignal *)signal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignalSequence.m ================================================ // // RACSignalSequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-09. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSignalSequence.h" #import "RACDisposable.h" #import "RACReplaySubject.h" #import "RACSignal+Operations.h" @interface RACSignalSequence () // Replays the signal given on initialization. @property (nonatomic, strong, readonly) RACReplaySubject *subject; @end @implementation RACSignalSequence #pragma mark Lifecycle + (RACSequence *)sequenceWithSignal:(RACSignal *)signal { RACSignalSequence *seq = [[self alloc] init]; RACReplaySubject *subject = [RACReplaySubject subject]; [signal subscribeNext:^(id value) { [subject sendNext:value]; } error:^(NSError *error) { [subject sendError:error]; } completed:^{ [subject sendCompleted]; }]; seq->_subject = subject; return seq; } #pragma mark RACSequence - (id)head { id value = [self.subject firstOrDefault:self]; if (value == self) { return nil; } else { return value ?: NSNull.null; } } - (RACSequence *)tail { RACSequence *sequence = [self.class sequenceWithSignal:[self.subject skip:1]]; sequence.name = self.name; return sequence; } - (NSArray *)array { return self.subject.toArray; } #pragma mark NSObject - (NSString *)description { // Synchronously accumulate the values that have been sent so far. NSMutableArray *values = [NSMutableArray array]; RACDisposable *disposable = [self.subject subscribeNext:^(id value) { @synchronized (values) { [values addObject:value ?: NSNull.null]; } }]; [disposable dispose]; return [NSString stringWithFormat:@"<%@: %p>{ name = %@, values = %@ … }", self.class, self, self.name, values]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStream+Private.h ================================================ // // RACStream+Private.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACStream.h" @interface RACStream () // Combines a list of streams using the logic of the given block. // // streams - The streams to combine. // block - An operator that combines two streams and returns a new one. The // returned stream should contain 2-tuples of the streams' combined // values. // // Returns a combined stream. + (instancetype)join:(id)streams block:(RACStream * (^)(id, id))block; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStream.h ================================================ // // RACStream.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-31. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACStream; /// A block which accepts a value from a RACStream and returns a new instance /// of the same stream class. /// /// Setting `stop` to `YES` will cause the bind to terminate after the returned /// value. Returning `nil` will result in immediate termination. typedef RACStream * (^RACStreamBindBlock)(id value, BOOL *stop); /// An abstract class representing any stream of values. /// /// This class represents a monad, upon which many stream-based operations can /// be built. /// /// When subclassing RACStream, only the methods in the main @interface body need /// to be overridden. @interface RACStream : NSObject /// Returns an empty stream. + (instancetype)empty; /// Lifts `value` into the stream monad. /// /// Returns a stream containing only the given value. + (instancetype)return:(id)value; /// Lazily binds a block to the values in the receiver. /// /// This should only be used if you need to terminate the bind early, or close /// over some state. -flattenMap: is more appropriate for all other cases. /// /// block - A block returning a RACStreamBindBlock. This block will be invoked /// each time the bound stream is re-evaluated. This block must not be /// nil or return nil. /// /// Returns a new stream which represents the combined result of all lazy /// applications of `block`. - (instancetype)bind:(RACStreamBindBlock (^)(void))block; /// Appends the values of `stream` to the values in the receiver. /// /// stream - A stream to concatenate. This must be an instance of the same /// concrete class as the receiver, and should not be `nil`. /// /// Returns a new stream representing the receiver followed by `stream`. - (instancetype)concat:(RACStream *)stream; /// Zips the values in the receiver with those of the given stream to create /// RACTuples. /// /// The first value of each stream will be combined, then the second value, and /// so forth, until at least one of the streams is exhausted. /// /// stream - The stream to zip with. This must be an instance of the same /// concrete class as the receiver, and should not be `nil`. /// /// Returns a new stream of RACTuples, representing the zipped values of the /// two streams. - (instancetype)zipWith:(RACStream *)stream; @end /// This extension contains functionality to support naming streams for /// debugging. /// /// Subclasses do not need to override the methods here. @interface RACStream () /// The name of the stream. This is for debugging/human purposes only. @property (copy) NSString *name; /// Sets the name of the receiver to the given format string. /// /// This is for debugging purposes only, and won't do anything unless the /// RAC_DEBUG_SIGNAL_NAMES environment variable is set. /// /// Returns the receiver, for easy method chaining. - (instancetype)setNameWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); @end /// Operations built on the RACStream primitives. /// /// These methods do not need to be overridden, although subclasses may /// occasionally gain better performance from doing so. @interface RACStream (Operations) /// Maps `block` across the values in the receiver and flattens the result. /// /// Note that operators applied _after_ -flattenMap: behave differently from /// operators _within_ -flattenMap:. See the Examples section below. /// /// This corresponds to the `SelectMany` method in Rx. /// /// block - A block which accepts the values in the receiver and returns a new /// instance of the receiver's class. Returning `nil` from this block is /// equivalent to returning an empty signal. /// /// Examples /// /// [signal flattenMap:^(id x) { /// // Logs each time a returned signal completes. /// return [[RACSignal return:x] logCompleted]; /// }]; /// /// [[signal /// flattenMap:^(id x) { /// return [RACSignal return:x]; /// }] /// // Logs only once, when all of the signals complete. /// logCompleted]; /// /// Returns a new stream which represents the combined streams resulting from /// mapping `block`. - (instancetype)flattenMap:(RACStream * (^)(id value))block; /// Flattens a stream of streams. /// /// This corresponds to the `Merge` method in Rx. /// /// Returns a stream consisting of the combined streams obtained from the /// receiver. - (instancetype)flatten; /// Maps `block` across the values in the receiver. /// /// This corresponds to the `Select` method in Rx. /// /// Returns a new stream with the mapped values. - (instancetype)map:(id (^)(id value))block; /// Replaces each value in the receiver with the given object. /// /// Returns a new stream which includes the given object once for each value in /// the receiver. - (instancetype)mapReplace:(id)object; /// Filters out values in the receiver that don't pass the given test. /// /// This corresponds to the `Where` method in Rx. /// /// Returns a new stream with only those values that passed. - (instancetype)filter:(BOOL (^)(id value))block; /// Filters out values in the receiver that equal (via -isEqual:) the provided value. /// /// value - The value can be `nil`, in which case it ignores `nil` values. /// /// Returns a new stream containing only the values which did not compare equal /// to `value`. - (instancetype)ignore:(id)value; /// Unpacks each RACTuple in the receiver and maps the values to a new value. /// /// reduceBlock - The block which reduces each RACTuple's values into one value. /// It must take as many arguments as the number of tuple elements /// to process. Each argument will be an object argument. The /// return value must be an object. This argument cannot be nil. /// /// Returns a new stream of reduced tuple values. - (instancetype)reduceEach:(id (^)())reduceBlock; /// Returns a stream consisting of `value`, followed by the values in the /// receiver. - (instancetype)startWith:(id)value; /// Skips the first `skipCount` values in the receiver. /// /// Returns the receiver after skipping the first `skipCount` values. If /// `skipCount` is greater than the number of values in the stream, an empty /// stream is returned. - (instancetype)skip:(NSUInteger)skipCount; /// Returns a stream of the first `count` values in the receiver. If `count` is /// greater than or equal to the number of values in the stream, a stream /// equivalent to the receiver is returned. - (instancetype)take:(NSUInteger)count; /// Zips the values in the given streams to create RACTuples. /// /// The first value of each stream will be combined, then the second value, and /// so forth, until at least one of the streams is exhausted. /// /// streams - The streams to combine. These must all be instances of the same /// concrete class implementing the protocol. If this collection is /// empty, the returned stream will be empty. /// /// Returns a new stream containing RACTuples of the zipped values from the /// streams. + (instancetype)zip:(id)streams; /// Zips streams using +zip:, then reduces the resulting tuples into a single /// value using -reduceEach: /// /// streams - The streams to combine. These must all be instances of the /// same concrete class implementing the protocol. If this /// collection is empty, the returned stream will be empty. /// reduceBlock - The block which reduces the values from all the streams /// into one value. It must take as many arguments as the /// number of streams given. Each argument will be an object /// argument. The return value must be an object. This argument /// must not be nil. /// /// Example: /// /// [RACStream zip:@[ stringSignal, intSignal ] reduce:^(NSString *string, NSNumber *number) { /// return [NSString stringWithFormat:@"%@: %@", string, number]; /// }]; /// /// Returns a new stream containing the results from each invocation of /// `reduceBlock`. + (instancetype)zip:(id)streams reduce:(id (^)())reduceBlock; /// Returns a stream obtained by concatenating `streams` in order. + (instancetype)concat:(id)streams; /// Combines values in the receiver from left to right using the given block. /// /// The algorithm proceeds as follows: /// /// 1. `startingValue` is passed into the block as the `running` value, and the /// first element of the receiver is passed into the block as the `next` value. /// 2. The result of the invocation is added to the returned stream. /// 3. The result of the invocation (`running`) and the next element of the /// receiver (`next`) is passed into `block`. /// 4. Steps 2 and 3 are repeated until all values have been processed. /// /// startingValue - The value to be combined with the first element of the /// receiver. This value may be `nil`. /// reduceBlock - The block that describes how to combine values of the /// receiver. If the receiver is empty, this block will never be /// invoked. Cannot be nil. /// /// Examples /// /// RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence; /// /// // Contains 1, 3, 6, 10 /// RACSequence *sums = [numbers scanWithStart:@0 reduce:^(NSNumber *sum, NSNumber *next) { /// return @(sum.integerValue + next.integerValue); /// }]; /// /// Returns a new stream that consists of each application of `reduceBlock`. If the /// receiver is empty, an empty stream is returned. - (instancetype)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))reduceBlock; /// Combines values in the receiver from left to right using the given block /// which also takes zero-based index of the values. /// /// startingValue - The value to be combined with the first element of the /// receiver. This value may be `nil`. /// reduceBlock - The block that describes how to combine values of the /// receiver. This block takes zero-based index value as the last /// parameter. If the receiver is empty, this block will never /// be invoked. Cannot be nil. /// /// Returns a new stream that consists of each application of `reduceBlock`. If the /// receiver is empty, an empty stream is returned. - (instancetype)scanWithStart:(id)startingValue reduceWithIndex:(id (^)(id running, id next, NSUInteger index))reduceBlock; /// Combines each previous and current value into one object. /// /// This method is similar to -scanWithStart:reduce:, but only ever operates on /// the previous and current values (instead of the whole stream), and does not /// pass the return value of `reduceBlock` into the next invocation of it. /// /// start - The value passed into `reduceBlock` as `previous` for the /// first value. /// reduceBlock - The block that combines the previous value and the current /// value to create the reduced value. Cannot be nil. /// /// Examples /// /// RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence; /// /// // Contains 1, 3, 5, 7 /// RACSequence *sums = [numbers combinePreviousWithStart:@0 reduce:^(NSNumber *previous, NSNumber *next) { /// return @(previous.integerValue + next.integerValue); /// }]; /// /// Returns a new stream consisting of the return values from each application of /// `reduceBlock`. - (instancetype)combinePreviousWithStart:(id)start reduce:(id (^)(id previous, id current))reduceBlock; /// Takes values until the given block returns `YES`. /// /// Returns a stream of the initial values in the receiver that fail `predicate`. /// If `predicate` never returns `YES`, a stream equivalent to the receiver is /// returned. - (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate; /// Takes values until the given block returns `NO`. /// /// Returns a stream of the initial values in the receiver that pass `predicate`. /// If `predicate` never returns `NO`, a stream equivalent to the receiver is /// returned. - (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate; /// Skips values until the given block returns `YES`. /// /// Returns a stream containing the values of the receiver that follow any /// initial values failing `predicate`. If `predicate` never returns `YES`, /// an empty stream is returned. - (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate; /// Skips values until the given block returns `NO`. /// /// Returns a stream containing the values of the receiver that follow any /// initial values passing `predicate`. If `predicate` never returns `NO`, an /// empty stream is returned. - (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate; /// Returns a stream of values for which -isEqual: returns NO when compared to the /// previous value. - (instancetype)distinctUntilChanged; @end @interface RACStream (Unavailable) - (instancetype)sequenceMany:(RACStream * (^)(void))block __attribute__((unavailable("Use -flattenMap: instead"))); - (instancetype)scanWithStart:(id)startingValue combine:(id (^)(id running, id next))block __attribute__((unavailable("Renamed to -scanWithStart:reduce:"))); - (instancetype)mapPreviousWithStart:(id)start reduce:(id (^)(id previous, id current))combineBlock __attribute__((unavailable("Renamed to -combinePreviousWithStart:reduce:"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStream.m ================================================ // // RACStream.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-31. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACStream.h" #import "NSObject+RACDescription.h" #import "RACBlockTrampoline.h" #import "RACTuple.h" @implementation RACStream #pragma mark Lifecycle - (id)init { self = [super init]; if (self == nil) return nil; self.name = @""; return self; } #pragma mark Abstract methods + (instancetype)empty { return nil; } - (instancetype)bind:(RACStreamBindBlock (^)(void))block { return nil; } + (instancetype)return:(id)value { return nil; } - (instancetype)concat:(RACStream *)stream { return nil; } - (instancetype)zipWith:(RACStream *)stream { return nil; } #pragma mark Naming - (instancetype)setNameWithFormat:(NSString *)format, ... { if (getenv("RAC_DEBUG_SIGNAL_NAMES") == NULL) return self; NSCParameterAssert(format != nil); va_list args; va_start(args, format); NSString *str = [[NSString alloc] initWithFormat:format arguments:args]; va_end(args); self.name = str; return self; } @end @implementation RACStream (Operations) - (instancetype)flattenMap:(RACStream * (^)(id value))block { Class class = self.class; return [[self bind:^{ return ^(id value, BOOL *stop) { id stream = block(value) ?: [class empty]; NSCAssert([stream isKindOfClass:RACStream.class], @"Value returned from -flattenMap: is not a stream: %@", stream); return stream; }; }] setNameWithFormat:@"[%@] -flattenMap:", self.name]; } - (instancetype)flatten { return [[self flattenMap:^(id value) { return value; }] setNameWithFormat:@"[%@] -flatten", self.name]; } - (instancetype)map:(id (^)(id value))block { NSCParameterAssert(block != nil); Class class = self.class; return [[self flattenMap:^(id value) { return [class return:block(value)]; }] setNameWithFormat:@"[%@] -map:", self.name]; } - (instancetype)mapReplace:(id)object { return [[self map:^(id _) { return object; }] setNameWithFormat:@"[%@] -mapReplace: %@", self.name, RACDescription(object)]; } - (instancetype)combinePreviousWithStart:(id)start reduce:(id (^)(id previous, id next))reduceBlock { NSCParameterAssert(reduceBlock != NULL); return [[[self scanWithStart:RACTuplePack(start) reduce:^(RACTuple *previousTuple, id next) { id value = reduceBlock(previousTuple[0], next); return RACTuplePack(next, value); }] map:^(RACTuple *tuple) { return tuple[1]; }] setNameWithFormat:@"[%@] -combinePreviousWithStart: %@ reduce:", self.name, RACDescription(start)]; } - (instancetype)filter:(BOOL (^)(id value))block { NSCParameterAssert(block != nil); Class class = self.class; return [[self flattenMap:^ id (id value) { if (block(value)) { return [class return:value]; } else { return class.empty; } }] setNameWithFormat:@"[%@] -filter:", self.name]; } - (instancetype)ignore:(id)value { return [[self filter:^ BOOL (id innerValue) { return innerValue != value && ![innerValue isEqual:value]; }] setNameWithFormat:@"[%@] -ignore: %@", self.name, RACDescription(value)]; } - (instancetype)reduceEach:(id (^)())reduceBlock { NSCParameterAssert(reduceBlock != nil); __weak RACStream *stream __attribute__((unused)) = self; return [[self map:^(RACTuple *t) { NSCAssert([t isKindOfClass:RACTuple.class], @"Value from stream %@ is not a tuple: %@", stream, t); return [RACBlockTrampoline invokeBlock:reduceBlock withArguments:t]; }] setNameWithFormat:@"[%@] -reduceEach:", self.name]; } - (instancetype)startWith:(id)value { return [[[self.class return:value] concat:self] setNameWithFormat:@"[%@] -startWith: %@", self.name, RACDescription(value)]; } - (instancetype)skip:(NSUInteger)skipCount { Class class = self.class; return [[self bind:^{ __block NSUInteger skipped = 0; return ^(id value, BOOL *stop) { if (skipped >= skipCount) return [class return:value]; skipped++; return class.empty; }; }] setNameWithFormat:@"[%@] -skip: %lu", self.name, (unsigned long)skipCount]; } - (instancetype)take:(NSUInteger)count { Class class = self.class; if (count == 0) return class.empty; return [[self bind:^{ __block NSUInteger taken = 0; return ^ id (id value, BOOL *stop) { if (taken < count) { ++taken; if (taken == count) *stop = YES; return [class return:value]; } else { return nil; } }; }] setNameWithFormat:@"[%@] -take: %lu", self.name, (unsigned long)count]; } + (instancetype)join:(id)streams block:(RACStream * (^)(id, id))block { RACStream *current = nil; // Creates streams of successively larger tuples by combining the input // streams one-by-one. for (RACStream *stream in streams) { // For the first stream, just wrap its values in a RACTuple. That way, // if only one stream is given, the result is still a stream of tuples. if (current == nil) { current = [stream map:^(id x) { return RACTuplePack(x); }]; continue; } current = block(current, stream); } if (current == nil) return [self empty]; return [current map:^(RACTuple *xs) { // Right now, each value is contained in its own tuple, sorta like: // // (((1), 2), 3) // // We need to unwrap all the layers and create a tuple out of the result. NSMutableArray *values = [[NSMutableArray alloc] init]; while (xs != nil) { [values insertObject:xs.last ?: RACTupleNil.tupleNil atIndex:0]; xs = (xs.count > 1 ? xs.first : nil); } return [RACTuple tupleWithObjectsFromArray:values]; }]; } + (instancetype)zip:(id)streams { return [[self join:streams block:^(RACStream *left, RACStream *right) { return [left zipWith:right]; }] setNameWithFormat:@"+zip: %@", streams]; } + (instancetype)zip:(id)streams reduce:(id (^)())reduceBlock { NSCParameterAssert(reduceBlock != nil); RACStream *result = [self zip:streams]; // Although we assert this condition above, older versions of this method // supported this argument being nil. Avoid crashing Release builds of // apps that depended on that. if (reduceBlock != nil) result = [result reduceEach:reduceBlock]; return [result setNameWithFormat:@"+zip: %@ reduce:", streams]; } + (instancetype)concat:(id)streams { RACStream *result = self.empty; for (RACStream *stream in streams) { result = [result concat:stream]; } return [result setNameWithFormat:@"+concat: %@", streams]; } - (instancetype)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))reduceBlock { NSCParameterAssert(reduceBlock != nil); return [[self scanWithStart:startingValue reduceWithIndex:^(id running, id next, NSUInteger index) { return reduceBlock(running, next); }] setNameWithFormat:@"[%@] -scanWithStart: %@ reduce:", self.name, RACDescription(startingValue)]; } - (instancetype)scanWithStart:(id)startingValue reduceWithIndex:(id (^)(id, id, NSUInteger))reduceBlock { NSCParameterAssert(reduceBlock != nil); Class class = self.class; return [[self bind:^{ __block id running = startingValue; __block NSUInteger index = 0; return ^(id value, BOOL *stop) { running = reduceBlock(running, value, index++); return [class return:running]; }; }] setNameWithFormat:@"[%@] -scanWithStart: %@ reduceWithIndex:", self.name, RACDescription(startingValue)]; } - (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate { NSCParameterAssert(predicate != nil); Class class = self.class; return [[self bind:^{ return ^ id (id value, BOOL *stop) { if (predicate(value)) return nil; return [class return:value]; }; }] setNameWithFormat:@"[%@] -takeUntilBlock:", self.name]; } - (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate { NSCParameterAssert(predicate != nil); return [[self takeUntilBlock:^ BOOL (id x) { return !predicate(x); }] setNameWithFormat:@"[%@] -takeWhileBlock:", self.name]; } - (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate { NSCParameterAssert(predicate != nil); Class class = self.class; return [[self bind:^{ __block BOOL skipping = YES; return ^ id (id value, BOOL *stop) { if (skipping) { if (predicate(value)) { skipping = NO; } else { return class.empty; } } return [class return:value]; }; }] setNameWithFormat:@"[%@] -skipUntilBlock:", self.name]; } - (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate { NSCParameterAssert(predicate != nil); return [[self skipUntilBlock:^ BOOL (id x) { return !predicate(x); }] setNameWithFormat:@"[%@] -skipWhileBlock:", self.name]; } - (instancetype)distinctUntilChanged { Class class = self.class; return [[self bind:^{ __block id lastValue = nil; __block BOOL initial = YES; return ^(id x, BOOL *stop) { if (!initial && (lastValue == x || [x isEqual:lastValue])) return [class empty]; initial = NO; lastValue = x; return [class return:x]; }; }] setNameWithFormat:@"[%@] -distinctUntilChanged", self.name]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStringSequence.h ================================================ // // RACStringSequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACSequence.h" // Private class that adapts a string to the RACSequence interface. @interface RACStringSequence : RACSequence // Returns a sequence for enumerating over the given string, starting from the // given character offset. The string will be copied to prevent mutation. + (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStringSequence.m ================================================ // // RACStringSequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-10-29. // Copyright (c) 2012 GitHub. All rights reserved. // #import "RACStringSequence.h" @interface RACStringSequence () // The string being sequenced. @property (nonatomic, copy, readonly) NSString *string; // The index in the string from which the sequence starts. @property (nonatomic, assign, readonly) NSUInteger offset; @end @implementation RACStringSequence #pragma mark Lifecycle + (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset { NSCParameterAssert(offset <= string.length); if (offset == string.length) return self.empty; RACStringSequence *seq = [[self alloc] init]; seq->_string = [string copy]; seq->_offset = offset; return seq; } #pragma mark RACSequence - (id)head { return [self.string substringWithRange:NSMakeRange(self.offset, 1)]; } - (RACSequence *)tail { RACSequence *sequence = [self.class sequenceWithString:self.string offset:self.offset + 1]; sequence.name = self.name; return sequence; } - (NSArray *)array { NSUInteger substringLength = self.string.length - self.offset; NSMutableArray *array = [NSMutableArray arrayWithCapacity:substringLength]; [self.string enumerateSubstringsInRange:NSMakeRange(self.offset, substringLength) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { [array addObject:substring]; }]; return [array copy]; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ name = %@, string = %@ }", self.class, self, self.name, [self.string substringFromIndex:self.offset]]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubject.h ================================================ // // RACSubject.h // ReactiveCocoa // // Created by Josh Abernathy on 3/9/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSignal.h" #import "RACSubscriber.h" /// A subject can be thought of as a signal that you can manually control by /// sending next, completed, and error. /// /// They're most helpful in bridging the non-RAC world to RAC, since they let you /// manually control the sending of events. @interface RACSubject : RACSignal /// Returns a new subject. + (instancetype)subject; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubject.m ================================================ // // RACSubject.m // ReactiveCocoa // // Created by Josh Abernathy on 3/9/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubject.h" #import #import "RACCompoundDisposable.h" #import "RACPassthroughSubscriber.h" @interface RACSubject () // Contains all current subscribers to the receiver. // // This should only be used while synchronized on `self`. @property (nonatomic, strong, readonly) NSMutableArray *subscribers; // Contains all of the receiver's subscriptions to other signals. @property (nonatomic, strong, readonly) RACCompoundDisposable *disposable; // Enumerates over each of the receiver's `subscribers` and invokes `block` for // each. - (void)enumerateSubscribersUsingBlock:(void (^)(id subscriber))block; @end @implementation RACSubject #pragma mark Lifecycle + (instancetype)subject { return [[self alloc] init]; } - (id)init { self = [super init]; if (self == nil) return nil; _disposable = [RACCompoundDisposable compoundDisposable]; _subscribers = [[NSMutableArray alloc] initWithCapacity:1]; return self; } - (void)dealloc { [self.disposable dispose]; } #pragma mark Subscription - (RACDisposable *)subscribe:(id)subscriber { NSCParameterAssert(subscriber != nil); RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; subscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable]; NSMutableArray *subscribers = self.subscribers; @synchronized (subscribers) { [subscribers addObject:subscriber]; } [disposable addDisposable:[RACDisposable disposableWithBlock:^{ @synchronized (subscribers) { // Since newer subscribers are generally shorter-lived, search // starting from the end of the list. NSUInteger index = [subscribers indexOfObjectWithOptions:NSEnumerationReverse passingTest:^ BOOL (id obj, NSUInteger index, BOOL *stop) { return obj == subscriber; }]; if (index != NSNotFound) [subscribers removeObjectAtIndex:index]; } }]]; return disposable; } - (void)enumerateSubscribersUsingBlock:(void (^)(id subscriber))block { NSArray *subscribers; @synchronized (self.subscribers) { subscribers = [self.subscribers copy]; } for (id subscriber in subscribers) { block(subscriber); } } #pragma mark RACSubscriber - (void)sendNext:(id)value { [self enumerateSubscribersUsingBlock:^(id subscriber) { [subscriber sendNext:value]; }]; } - (void)sendError:(NSError *)error { [self.disposable dispose]; [self enumerateSubscribersUsingBlock:^(id subscriber) { [subscriber sendError:error]; }]; } - (void)sendCompleted { [self.disposable dispose]; [self enumerateSubscribersUsingBlock:^(id subscriber) { [subscriber sendCompleted]; }]; } - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)d { if (d.disposed) return; [self.disposable addDisposable:d]; @weakify(self, d); [d addDisposable:[RACDisposable disposableWithBlock:^{ @strongify(self, d); [self.disposable removeDisposable:d]; }]]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriber+Private.h ================================================ // // RACSubscriber+Private.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSubscriber.h" // A simple block-based subscriber. @interface RACSubscriber : NSObject // Creates a new subscriber with the given blocks. + (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriber.h ================================================ // // RACSubscriber.h // ReactiveCocoa // // Created by Josh Abernathy on 3/1/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACCompoundDisposable; /// Represents any object which can directly receive values from a RACSignal. /// /// You generally shouldn't need to implement this protocol. +[RACSignal /// createSignal:], RACSignal's subscription methods, or RACSubject should work /// for most uses. /// /// Implementors of this protocol may receive messages and values from multiple /// threads simultaneously, and so should be thread-safe. Subscribers will also /// be weakly referenced so implementations must allow that. @protocol RACSubscriber @required /// Sends the next value to subscribers. /// /// value - The value to send. This can be `nil`. - (void)sendNext:(id)value; /// Sends the error to subscribers. /// /// error - The error to send. This can be `nil`. /// /// This terminates the subscription, and invalidates the subscriber (such that /// it cannot subscribe to anything else in the future). - (void)sendError:(NSError *)error; /// Sends completed to subscribers. /// /// This terminates the subscription, and invalidates the subscriber (such that /// it cannot subscribe to anything else in the future). - (void)sendCompleted; /// Sends the subscriber a disposable that represents one of its subscriptions. /// /// A subscriber may receive multiple disposables if it gets subscribed to /// multiple signals; however, any error or completed events must terminate _all_ /// subscriptions. - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriber.m ================================================ // // RACSubscriber.m // ReactiveCocoa // // Created by Josh Abernathy on 3/1/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubscriber.h" #import "RACSubscriber+Private.h" #import #import "RACCompoundDisposable.h" @interface RACSubscriber () // These callbacks should only be accessed while synchronized on self. @property (nonatomic, copy) void (^next)(id value); @property (nonatomic, copy) void (^error)(NSError *error); @property (nonatomic, copy) void (^completed)(void); @property (nonatomic, strong, readonly) RACCompoundDisposable *disposable; @end @implementation RACSubscriber #pragma mark Lifecycle + (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed { RACSubscriber *subscriber = [[self alloc] init]; subscriber->_next = [next copy]; subscriber->_error = [error copy]; subscriber->_completed = [completed copy]; return subscriber; } - (id)init { self = [super init]; if (self == nil) return nil; @unsafeify(self); RACDisposable *selfDisposable = [RACDisposable disposableWithBlock:^{ @strongify(self); @synchronized (self) { self.next = nil; self.error = nil; self.completed = nil; } }]; _disposable = [RACCompoundDisposable compoundDisposable]; [_disposable addDisposable:selfDisposable]; return self; } - (void)dealloc { [self.disposable dispose]; } #pragma mark RACSubscriber - (void)sendNext:(id)value { @synchronized (self) { void (^nextBlock)(id) = [self.next copy]; if (nextBlock == nil) return; nextBlock(value); } } - (void)sendError:(NSError *)e { @synchronized (self) { void (^errorBlock)(NSError *) = [self.error copy]; [self.disposable dispose]; if (errorBlock == nil) return; errorBlock(e); } } - (void)sendCompleted { @synchronized (self) { void (^completedBlock)(void) = [self.completed copy]; [self.disposable dispose]; if (completedBlock == nil) return; completedBlock(); } } - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)otherDisposable { if (otherDisposable.disposed) return; RACCompoundDisposable *selfDisposable = self.disposable; [selfDisposable addDisposable:otherDisposable]; @unsafeify(otherDisposable); // If this subscription terminates, purge its disposable to avoid unbounded // memory growth. [otherDisposable addDisposable:[RACDisposable disposableWithBlock:^{ @strongify(otherDisposable); [selfDisposable removeDisposable:otherDisposable]; }]]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptingAssignmentTrampoline.h ================================================ // // RACSubscriptingAssignmentTrampoline.h // ReactiveCocoa // // Created by Josh Abernathy on 9/24/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import @class RACSignal; /// Assigns a signal to an object property, automatically setting the given key /// path on every `next`. When the signal completes, the binding is automatically /// disposed of. /// /// There are two different versions of this macro: /// /// - RAC(TARGET, KEYPATH, NILVALUE) will bind the `KEYPATH` of `TARGET` to the /// given signal. If the signal ever sends a `nil` value, the property will be /// set to `NILVALUE` instead. `NILVALUE` may itself be `nil` for object /// properties, but an NSValue should be used for primitive properties, to /// avoid an exception if `nil` is sent (which might occur if an intermediate /// object is set to `nil`). /// - RAC(TARGET, KEYPATH) is the same as the above, but `NILVALUE` defaults to /// `nil`. /// /// See -[RACSignal setKeyPath:onObject:nilValue:] for more information about the /// binding's semantics. /// /// Examples /// /// RAC(self, objectProperty) = objectSignal; /// RAC(self, stringProperty, @"foobar") = stringSignal; /// RAC(self, integerProperty, @42) = integerSignal; /// /// WARNING: Under certain conditions, use of this macro can be thread-unsafe. /// See the documentation of -setKeyPath:onObject:nilValue:. #define RAC(TARGET, ...) \ metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ (RAC_(TARGET, __VA_ARGS__, nil)) \ (RAC_(TARGET, __VA_ARGS__)) /// Do not use this directly. Use the RAC macro above. #define RAC_(TARGET, KEYPATH, NILVALUE) \ [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)] @interface RACSubscriptingAssignmentTrampoline : NSObject - (id)initWithTarget:(id)target nilValue:(id)nilValue; - (void)setObject:(RACSignal *)signal forKeyedSubscript:(NSString *)keyPath; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptingAssignmentTrampoline.m ================================================ // // RACSubscriptingAssignmentTrampoline.m // ReactiveCocoa // // Created by Josh Abernathy on 9/24/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubscriptingAssignmentTrampoline.h" #import "RACSignal+Operations.h" @interface RACSubscriptingAssignmentTrampoline () // The object to bind to. @property (nonatomic, strong, readonly) id target; // A value to use when `nil` is sent on the bound signal. @property (nonatomic, strong, readonly) id nilValue; @end @implementation RACSubscriptingAssignmentTrampoline - (id)initWithTarget:(id)target nilValue:(id)nilValue { // This is often a programmer error, but this prevents crashes if the target // object has unexpectedly deallocated. if (target == nil) return nil; self = [super init]; if (self == nil) return nil; _target = target; _nilValue = nilValue; return self; } - (void)setObject:(RACSignal *)signal forKeyedSubscript:(NSString *)keyPath { [signal setKeyPath:keyPath onObject:self.target nilValue:self.nilValue]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptionScheduler.h ================================================ // // RACSubscriptionScheduler.h // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACScheduler.h" // A private scheduler used only for subscriptions. See the private // +[RACScheduler subscriptionScheduler] method for more information. @interface RACSubscriptionScheduler : RACScheduler @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptionScheduler.m ================================================ // // RACSubscriptionScheduler.m // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACSubscriptionScheduler.h" #import "RACScheduler+Private.h" @interface RACSubscriptionScheduler () // A private background scheduler on which to subscribe if the +currentScheduler // is unknown. @property (nonatomic, strong, readonly) RACScheduler *backgroundScheduler; @end @implementation RACSubscriptionScheduler #pragma mark Lifecycle - (id)init { self = [super initWithName:@"com.ReactiveCocoa.RACScheduler.subscriptionScheduler"]; if (self == nil) return nil; _backgroundScheduler = [RACScheduler scheduler]; return self; } #pragma mark RACScheduler - (RACDisposable *)schedule:(void (^)(void))block { NSCParameterAssert(block != NULL); if (RACScheduler.currentScheduler == nil) return [self.backgroundScheduler schedule:block]; block(); return nil; } - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { RACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler; return [scheduler after:date schedule:block]; } - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { RACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler; return [scheduler after:date repeatingEvery:interval withLeeway:leeway schedule:block]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTargetQueueScheduler.h ================================================ // // RACTargetQueueScheduler.h // ReactiveCocoa // // Created by Josh Abernathy on 6/6/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACQueueScheduler.h" /// A scheduler that enqueues blocks on a private serial queue, targeting an /// arbitrary GCD queue. @interface RACTargetQueueScheduler : RACQueueScheduler /// Initializes the receiver with a serial queue that will target the given /// `targetQueue`. /// /// name - The name of the scheduler. If nil, a default name will be used. /// targetQueue - The queue to target. Cannot be NULL. /// /// Returns the initialized object. - (id)initWithName:(NSString *)name targetQueue:(dispatch_queue_t)targetQueue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTargetQueueScheduler.m ================================================ // // RACTargetQueueScheduler.m // ReactiveCocoa // // Created by Josh Abernathy on 6/6/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACTargetQueueScheduler.h" #import "RACQueueScheduler+Subclass.h" @implementation RACTargetQueueScheduler #pragma mark Lifecycle - (id)initWithName:(NSString *)name targetQueue:(dispatch_queue_t)targetQueue { NSCParameterAssert(targetQueue != NULL); if (name == nil) { name = [NSString stringWithFormat:@"com.ReactiveCocoa.RACTargetQueueScheduler(%s)", dispatch_queue_get_label(targetQueue)]; } dispatch_queue_t queue = dispatch_queue_create(name.UTF8String, DISPATCH_QUEUE_SERIAL); if (queue == NULL) return nil; dispatch_set_target_queue(queue, targetQueue); return [super initWithName:name queue:queue]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTestScheduler.h ================================================ // // RACTestScheduler.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-06. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACScheduler.h" /// A special kind of scheduler that steps through virtualized time. /// /// This scheduler class can be used in unit tests to verify asynchronous /// behaviors without spending significant time waiting. /// /// This class can be used from multiple threads, but only one thread can `step` /// through the enqueued actions at a time. Other threads will wait while the /// scheduled blocks are being executed. @interface RACTestScheduler : RACScheduler /// Initializes a new test scheduler. - (instancetype)init; /// Executes the next scheduled block, if any. /// /// This method will block until the scheduled action has completed. - (void)step; /// Executes up to the next `ticks` scheduled blocks. /// /// This method will block until the scheduled actions have completed. /// /// ticks - The number of scheduled blocks to execute. If there aren't this many /// blocks enqueued, all scheduled blocks are executed. - (void)step:(NSUInteger)ticks; /// Executes all of the scheduled blocks on the receiver. /// /// This method will block until the scheduled actions have completed. - (void)stepAll; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTestScheduler.m ================================================ // // RACTestScheduler.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-06. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACTestScheduler.h" #import #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACScheduler+Private.h" @interface RACTestSchedulerAction : NSObject // The date at which the action should be executed. // // This absolute time will not actually be honored. This date is only used for // comparison, to determine which block should be run _next_. @property (nonatomic, copy, readonly) NSDate *date; // The scheduled block. @property (nonatomic, copy, readonly) void (^block)(void); // A disposable for this action. // // When disposed, the action should not start executing if it hasn't already. @property (nonatomic, strong, readonly) RACDisposable *disposable; // Initializes a new scheduler action. - (id)initWithDate:(NSDate *)date block:(void (^)(void))block; @end static CFComparisonResult RACCompareScheduledActions(const void *ptr1, const void *ptr2, void *info) { RACTestSchedulerAction *action1 = (__bridge id)ptr1; RACTestSchedulerAction *action2 = (__bridge id)ptr2; return CFDateCompare((__bridge CFDateRef)action1.date, (__bridge CFDateRef)action2.date, NULL); } static const void *RACRetainScheduledAction(CFAllocatorRef allocator, const void *ptr) { return CFRetain(ptr); } static void RACReleaseScheduledAction(CFAllocatorRef allocator, const void *ptr) { CFRelease(ptr); } @interface RACTestScheduler () // All of the RACTestSchedulerActions that have been enqueued and not yet // executed. // // The minimum value in the heap represents the action to execute next. // // This property should only be used while synchronized on self. @property (nonatomic, assign, readonly) CFBinaryHeapRef scheduledActions; // The number of blocks that have been directly enqueued with -schedule: so // far. // // This is used to ensure unique dates when two blocks are enqueued // simultaneously. // // This property should only be used while synchronized on self. @property (nonatomic, assign) NSUInteger numberOfDirectlyScheduledBlocks; @end @implementation RACTestScheduler #pragma mark Lifecycle - (instancetype)init { self = [super initWithName:@"org.reactivecocoa.ReactiveCocoa.RACTestScheduler"]; if (self == nil) return nil; CFBinaryHeapCallBacks callbacks = (CFBinaryHeapCallBacks){ .version = 0, .retain = &RACRetainScheduledAction, .release = &RACReleaseScheduledAction, .copyDescription = &CFCopyDescription, .compare = &RACCompareScheduledActions }; _scheduledActions = CFBinaryHeapCreate(NULL, 0, &callbacks, NULL); return self; } - (void)dealloc { [self stepAll]; if (_scheduledActions != NULL) { CFBridgingRelease(_scheduledActions); _scheduledActions = NULL; } } #pragma mark Execution - (void)step { [self step:1]; } - (void)step:(NSUInteger)ticks { @synchronized (self) { for (NSUInteger i = 0; i < ticks; i++) { const void *actionPtr = NULL; if (!CFBinaryHeapGetMinimumIfPresent(self.scheduledActions, &actionPtr)) break; RACTestSchedulerAction *action = (__bridge id)actionPtr; CFBinaryHeapRemoveMinimumValue(self.scheduledActions); if (action.disposable.disposed) continue; RACScheduler *previousScheduler = RACScheduler.currentScheduler; NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = self; action.block(); if (previousScheduler != nil) { NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = previousScheduler; } else { [NSThread.currentThread.threadDictionary removeObjectForKey:RACSchedulerCurrentSchedulerKey]; } } } } - (void)stepAll { [self step:NSUIntegerMax]; } #pragma mark RACScheduler - (RACDisposable *)schedule:(void (^)(void))block { NSCParameterAssert(block != nil); @synchronized (self) { NSDate *uniqueDate = [NSDate dateWithTimeIntervalSinceReferenceDate:self.numberOfDirectlyScheduledBlocks]; self.numberOfDirectlyScheduledBlocks++; RACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:uniqueDate block:block]; CFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action); return action.disposable; } } - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { NSCParameterAssert(date != nil); NSCParameterAssert(block != nil); @synchronized (self) { RACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:date block:block]; CFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action); return action.disposable; } } - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { NSCParameterAssert(date != nil); NSCParameterAssert(block != nil); NSCParameterAssert(interval >= 0); NSCParameterAssert(leeway >= 0); RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; @weakify(self); @synchronized (self) { __block RACDisposable *thisDisposable = nil; void (^reschedulingBlock)(void) = ^{ @strongify(self); [compoundDisposable removeDisposable:thisDisposable]; // Schedule the next interval. RACDisposable *schedulingDisposable = [self after:[date dateByAddingTimeInterval:interval] repeatingEvery:interval withLeeway:leeway schedule:block]; [compoundDisposable addDisposable:schedulingDisposable]; block(); }; RACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:date block:reschedulingBlock]; CFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action); thisDisposable = action.disposable; [compoundDisposable addDisposable:thisDisposable]; } return compoundDisposable; } @end @implementation RACTestSchedulerAction #pragma mark Lifecycle - (id)initWithDate:(NSDate *)date block:(void (^)(void))block { NSCParameterAssert(date != nil); NSCParameterAssert(block != nil); self = [super init]; if (self == nil) return nil; _date = [date copy]; _block = [block copy]; _disposable = [[RACDisposable alloc] init]; return self; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ date: %@ }", self.class, self, self.date]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTuple.h ================================================ // // RACTuple.h // ReactiveCocoa // // Created by Josh Abernathy on 4/12/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import "metamacros.h" @class RACSequence; /// Creates a new tuple with the given values. At least one value must be given. /// Values can be nil. #define RACTuplePack(...) \ RACTuplePack_(__VA_ARGS__) /// Declares new object variables and unpacks a RACTuple into them. /// /// This macro should be used on the left side of an assignment, with the /// tuple on the right side. Nothing else should appear on the same line, and the /// macro should not be the only statement in a conditional or loop body. /// /// If the tuple has more values than there are variables listed, the excess /// values are ignored. /// /// If the tuple has fewer values than there are variables listed, the excess /// variables are initialized to nil. /// /// Examples /// /// RACTupleUnpack(NSString *string, NSNumber *num) = [RACTuple tupleWithObjects:@"foo", @5, nil]; /// NSLog(@"string: %@", string); /// NSLog(@"num: %@", num); /// /// /* The above is equivalent to: */ /// RACTuple *t = [RACTuple tupleWithObjects:@"foo", @5, nil]; /// NSString *string = t[0]; /// NSNumber *num = t[1]; /// NSLog(@"string: %@", string); /// NSLog(@"num: %@", num); #define RACTupleUnpack(...) \ RACTupleUnpack_(__VA_ARGS__) /// A sentinel object that represents nils in the tuple. /// /// It should never be necessary to create a tuple nil yourself. Just use /// +tupleNil. @interface RACTupleNil : NSObject /// A singleton instance. + (RACTupleNil *)tupleNil; @end /// A tuple is an ordered collection of objects. It may contain nils, represented /// by RACTupleNil. @interface RACTuple : NSObject @property (nonatomic, readonly) NSUInteger count; /// These properties all return the object at that index or nil if the number of /// objects is less than the index. @property (nonatomic, readonly) id first; @property (nonatomic, readonly) id second; @property (nonatomic, readonly) id third; @property (nonatomic, readonly) id fourth; @property (nonatomic, readonly) id fifth; @property (nonatomic, readonly) id last; /// Creates a new tuple out of the array. Does not convert nulls to nils. + (instancetype)tupleWithObjectsFromArray:(NSArray *)array; /// Creates a new tuple out of the array. If `convert` is YES, it also converts /// every NSNull to RACTupleNil. + (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert; /// Creates a new tuple with the given objects. Use RACTupleNil to represent /// nils. + (instancetype)tupleWithObjects:(id)object, ... NS_REQUIRES_NIL_TERMINATION; /// Returns the object at `index` or nil if the object is a RACTupleNil. Unlike /// NSArray and friends, it's perfectly fine to ask for the object at an index /// past the tuple's count - 1. It will simply return nil. - (id)objectAtIndex:(NSUInteger)index; /// Returns an array of all the objects. RACTupleNils are converted to NSNulls. - (NSArray *)allObjects; /// Appends `obj` to the receiver. /// /// obj - The object to add to the tuple. This argument may be nil. /// /// Returns a new tuple. - (instancetype)tupleByAddingObject:(id)obj; @end @interface RACTuple (RACSequenceAdditions) /// Returns a sequence of all the objects. RACTupleNils are converted to NSNulls. @property (nonatomic, copy, readonly) RACSequence *rac_sequence; @end @interface RACTuple (ObjectSubscripting) /// Returns the object at that index or nil if the number of objects is less /// than the index. - (id)objectAtIndexedSubscript:(NSUInteger)idx; @end /// This and everything below is for internal use only. /// /// See RACTuplePack() and RACTupleUnpack() instead. #define RACTuplePack_(...) \ ([RACTuple tupleWithObjectsFromArray:@[ metamacro_foreach(RACTuplePack_object_or_ractuplenil,, __VA_ARGS__) ]]) #define RACTuplePack_object_or_ractuplenil(INDEX, ARG) \ (ARG) ?: RACTupleNil.tupleNil, #define RACTupleUnpack_(...) \ metamacro_foreach(RACTupleUnpack_decl,, __VA_ARGS__) \ \ int RACTupleUnpack_state = 0; \ \ RACTupleUnpack_after: \ ; \ metamacro_foreach(RACTupleUnpack_assign,, __VA_ARGS__) \ if (RACTupleUnpack_state != 0) RACTupleUnpack_state = 2; \ \ while (RACTupleUnpack_state != 2) \ if (RACTupleUnpack_state == 1) { \ goto RACTupleUnpack_after; \ } else \ for (; RACTupleUnpack_state != 1; RACTupleUnpack_state = 1) \ [RACTupleUnpackingTrampoline trampoline][ @[ metamacro_foreach(RACTupleUnpack_value,, __VA_ARGS__) ] ] #define RACTupleUnpack_state metamacro_concat(RACTupleUnpack_state, __LINE__) #define RACTupleUnpack_after metamacro_concat(RACTupleUnpack_after, __LINE__) #define RACTupleUnpack_loop metamacro_concat(RACTupleUnpack_loop, __LINE__) #define RACTupleUnpack_decl_name(INDEX) \ metamacro_concat(metamacro_concat(RACTupleUnpack, __LINE__), metamacro_concat(_var, INDEX)) #define RACTupleUnpack_decl(INDEX, ARG) \ __strong id RACTupleUnpack_decl_name(INDEX); #define RACTupleUnpack_assign(INDEX, ARG) \ __strong ARG = RACTupleUnpack_decl_name(INDEX); #define RACTupleUnpack_value(INDEX, ARG) \ [NSValue valueWithPointer:&RACTupleUnpack_decl_name(INDEX)], @interface RACTupleUnpackingTrampoline : NSObject + (instancetype)trampoline; - (void)setObject:(RACTuple *)tuple forKeyedSubscript:(NSArray *)variables; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTuple.m ================================================ // // RACTuple.m // ReactiveCocoa // // Created by Josh Abernathy on 4/12/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACTuple.h" #import #import "RACTupleSequence.h" @implementation RACTupleNil + (RACTupleNil *)tupleNil { static dispatch_once_t onceToken; static RACTupleNil *tupleNil = nil; dispatch_once(&onceToken, ^{ tupleNil = [[self alloc] init]; }); return tupleNil; } #pragma mark NSCopying - (id)copyWithZone:(NSZone *)zone { return self; } #pragma mark NSCoding - (id)initWithCoder:(NSCoder *)coder { // Always return the singleton. return self.class.tupleNil; } - (void)encodeWithCoder:(NSCoder *)coder { } @end @interface RACTuple () @property (nonatomic, strong) NSArray *backingArray; @end @implementation RACTuple - (instancetype)init { self = [super init]; if (self == nil) return nil; self.backingArray = [NSArray array]; return self; } - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, self.allObjects]; } - (BOOL)isEqual:(RACTuple *)object { if (object == self) return YES; if (![object isKindOfClass:self.class]) return NO; return [self.backingArray isEqual:object.backingArray]; } - (NSUInteger)hash { return self.backingArray.hash; } #pragma mark NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len { return [self.backingArray countByEnumeratingWithState:state objects:buffer count:len]; } #pragma mark NSCopying - (instancetype)copyWithZone:(NSZone *)zone { // we're immutable, bitches! return self; } #pragma mark NSCoding - (id)initWithCoder:(NSCoder *)coder { self = [self init]; if (self == nil) return nil; self.backingArray = [coder decodeObjectForKey:@keypath(self.backingArray)]; return self; } - (void)encodeWithCoder:(NSCoder *)coder { if (self.backingArray != nil) [coder encodeObject:self.backingArray forKey:@keypath(self.backingArray)]; } #pragma mark API + (instancetype)tupleWithObjectsFromArray:(NSArray *)array { return [self tupleWithObjectsFromArray:array convertNullsToNils:NO]; } + (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert { RACTuple *tuple = [[self alloc] init]; if (convert) { NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:array.count]; for (id object in array) { [newArray addObject:(object == NSNull.null ? RACTupleNil.tupleNil : object)]; } tuple.backingArray = newArray; } else { tuple.backingArray = [array copy]; } return tuple; } + (instancetype)tupleWithObjects:(id)object, ... { RACTuple *tuple = [[self alloc] init]; va_list args; va_start(args, object); NSUInteger count = 0; for (id currentObject = object; currentObject != nil; currentObject = va_arg(args, id)) { ++count; } va_end(args); if (count == 0) { tuple.backingArray = @[]; return tuple; } NSMutableArray *objects = [[NSMutableArray alloc] initWithCapacity:count]; va_start(args, object); for (id currentObject = object; currentObject != nil; currentObject = va_arg(args, id)) { [objects addObject:currentObject]; } va_end(args); tuple.backingArray = objects; return tuple; } - (id)objectAtIndex:(NSUInteger)index { if (index >= self.count) return nil; id object = self.backingArray[index]; return (object == RACTupleNil.tupleNil ? nil : object); } - (NSArray *)allObjects { NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:self.backingArray.count]; for (id object in self.backingArray) { [newArray addObject:(object == RACTupleNil.tupleNil ? NSNull.null : object)]; } return newArray; } - (instancetype)tupleByAddingObject:(id)obj { NSArray *newArray = [self.backingArray arrayByAddingObject:obj ?: RACTupleNil.tupleNil]; return [self.class tupleWithObjectsFromArray:newArray]; } - (NSUInteger)count { return self.backingArray.count; } - (id)first { return self[0]; } - (id)second { return self[1]; } - (id)third { return self[2]; } - (id)fourth { return self[3]; } - (id)fifth { return self[4]; } - (id)last { return self[self.count - 1]; } @end @implementation RACTuple (RACSequenceAdditions) - (RACSequence *)rac_sequence { return [RACTupleSequence sequenceWithTupleBackingArray:self.backingArray offset:0]; } @end @implementation RACTuple (ObjectSubscripting) - (id)objectAtIndexedSubscript:(NSUInteger)idx { return [self objectAtIndex:idx]; } @end @implementation RACTupleUnpackingTrampoline #pragma mark Lifecycle + (instancetype)trampoline { static dispatch_once_t onceToken; static id trampoline = nil; dispatch_once(&onceToken, ^{ trampoline = [[self alloc] init]; }); return trampoline; } - (void)setObject:(RACTuple *)tuple forKeyedSubscript:(NSArray *)variables { NSCParameterAssert(variables != nil); [variables enumerateObjectsUsingBlock:^(NSValue *value, NSUInteger index, BOOL *stop) { __strong id *ptr = (__strong id *)value.pointerValue; *ptr = tuple[index]; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTupleSequence.h ================================================ // // RACTupleSequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-05-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSequence.h" // Private class that adapts a RACTuple to the RACSequence interface. @interface RACTupleSequence : RACSequence // Returns a sequence for enumerating over the given backing array (from a // RACTuple), starting from the given offset. + (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTupleSequence.m ================================================ // // RACTupleSequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-05-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACTupleSequence.h" #import "RACTuple.h" @interface RACTupleSequence () // The array being sequenced, as taken from RACTuple.backingArray. @property (nonatomic, strong, readonly) NSArray *tupleBackingArray; // The index in the array from which the sequence starts. @property (nonatomic, assign, readonly) NSUInteger offset; @end @implementation RACTupleSequence #pragma mark Lifecycle + (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset { NSCParameterAssert(offset <= backingArray.count); if (offset == backingArray.count) return self.empty; RACTupleSequence *seq = [[self alloc] init]; seq->_tupleBackingArray = backingArray; seq->_offset = offset; return seq; } #pragma mark RACSequence - (id)head { id object = self.tupleBackingArray[self.offset]; return (object == RACTupleNil.tupleNil ? NSNull.null : object); } - (RACSequence *)tail { RACSequence *sequence = [self.class sequenceWithTupleBackingArray:self.tupleBackingArray offset:self.offset + 1]; sequence.name = self.name; return sequence; } - (NSArray *)array { NSRange range = NSMakeRange(self.offset, self.tupleBackingArray.count - self.offset); NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:range.length]; [self.tupleBackingArray enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range] options:0 usingBlock:^(id object, NSUInteger index, BOOL *stop) { id mappedObject = (object == RACTupleNil.tupleNil ? NSNull.null : object); [array addObject:mappedObject]; }]; return array; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ name = %@, tuple = %@ }", self.class, self, self.name, self.tupleBackingArray]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnarySequence.h ================================================ // // RACUnarySequence.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-05-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSequence.h" // Private class representing a sequence of exactly one value. @interface RACUnarySequence : RACSequence @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnarySequence.m ================================================ // // RACUnarySequence.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-05-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACUnarySequence.h" #import #import "NSObject+RACDescription.h" @interface RACUnarySequence () // The single value stored in this sequence. @property (nonatomic, strong, readwrite) id head; @end @implementation RACUnarySequence #pragma mark Properties @synthesize head = _head; #pragma mark Lifecycle + (instancetype)return:(id)value { RACUnarySequence *sequence = [[self alloc] init]; sequence.head = value; return [sequence setNameWithFormat:@"+return: %@", RACDescription(value)]; } #pragma mark RACSequence - (RACSequence *)tail { return nil; } - (instancetype)bind:(RACStreamBindBlock (^)(void))block { RACStreamBindBlock bindBlock = block(); BOOL stop = NO; RACSequence *result = (id)[bindBlock(self.head, &stop) setNameWithFormat:@"[%@] -bind:", self.name]; return result ?: self.class.empty; } #pragma mark NSCoding - (Class)classForCoder { // Unary sequences should be encoded as themselves, not array sequences. return self.class; } - (id)initWithCoder:(NSCoder *)coder { id value = [coder decodeObjectForKey:@keypath(self.head)]; return [self.class return:value]; } - (void)encodeWithCoder:(NSCoder *)coder { if (self.head != nil) [coder encodeObject:self.head forKey:@keypath(self.head)]; } #pragma mark NSObject - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p>{ name = %@, head = %@ }", self.class, self, self.name, self.head]; } - (NSUInteger)hash { return [self.head hash]; } - (BOOL)isEqual:(RACUnarySequence *)seq { if (self == seq) return YES; if (![seq isKindOfClass:RACUnarySequence.class]) return NO; return self.head == seq.head || [(NSObject *)self.head isEqual:seq.head]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnit.h ================================================ // // RACUnit.h // ReactiveCocoa // // Created by Josh Abernathy on 3/27/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import /// A unit represents an empty value. /// /// It should never be necessary to create a unit yourself. Just use +defaultUnit. @interface RACUnit : NSObject /// A singleton instance. + (RACUnit *)defaultUnit; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnit.m ================================================ // // RACUnit.m // ReactiveCocoa // // Created by Josh Abernathy on 3/27/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACUnit.h" @implementation RACUnit #pragma mark API + (RACUnit *)defaultUnit { static dispatch_once_t onceToken; static RACUnit *defaultUnit = nil; dispatch_once(&onceToken, ^{ defaultUnit = [[self alloc] init]; }); return defaultUnit; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACValueTransformer.h ================================================ // // RACValueTransformer.h // ReactiveCocoa // // Created by Josh Abernathy on 3/6/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import // A private block based transformer. @interface RACValueTransformer : NSValueTransformer + (instancetype)transformerWithBlock:(id (^)(id value))block; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACValueTransformer.m ================================================ // // RACValueTransformer.m // ReactiveCocoa // // Created by Josh Abernathy on 3/6/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACValueTransformer.h" @interface RACValueTransformer () @property (nonatomic, copy) id (^transformBlock)(id value); @end @implementation RACValueTransformer #pragma mark NSValueTransformer + (BOOL)allowsReverseTransformation { return NO; } - (id)transformedValue:(id)value { return self.transformBlock(value); } #pragma mark API @synthesize transformBlock; + (instancetype)transformerWithBlock:(id (^)(id value))block { NSCParameterAssert(block != NULL); RACValueTransformer *transformer = [[self alloc] init]; transformer.transformBlock = block; return transformer; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/ReactiveCocoa-Bridging-Header.h ================================================ // // Use this file to import your target's public headers that you would like to expose to Swift. // #import "RACCommand.h" #import "RACDisposable.h" #import "RACEvent.h" #import "RACScheduler.h" #import "RACTargetQueueScheduler.h" #import "RACSignal.h" #import "RACSignal+Operations.h" #import "RACStream.h" #import "RACSubscriber.h" ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIActionSheet+RACSignalSupport.h ================================================ // // UIActionSheet+RACSignalSupport.h // ReactiveCocoa // // Created by Dave Lee on 2013-06-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACDelegateProxy; @class RACSignal; @interface UIActionSheet (RACSignalSupport) /// A delegate proxy which will be set as the receiver's delegate when any of the /// methods in this category are used. @property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; /// Creates a signal for button clicks on the receiver. /// /// When this method is invoked, the `rac_delegateProxy` will become the /// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy /// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't /// know how to handle. Setting the receiver's `delegate` afterward is /// considered undefined behavior. /// /// Returns a signal which will send the index of the specific button clicked. /// The signal will complete when the receiver is deallocated. - (RACSignal *)rac_buttonClickedSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIActionSheet+RACSignalSupport.m ================================================ // // UIActionSheet+RACSignalSupport.m // ReactiveCocoa // // Created by Dave Lee on 2013-06-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIActionSheet+RACSignalSupport.h" #import "RACDelegateProxy.h" #import "RACSignal+Operations.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import @implementation UIActionSheet (RACSignalSupport) static void RACUseDelegateProxy(UIActionSheet *self) { if (self.delegate == self.rac_delegateProxy) return; self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; self.delegate = (id)self.rac_delegateProxy; } - (RACDelegateProxy *)rac_delegateProxy { RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); if (proxy == nil) { proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIActionSheetDelegate)]; objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return proxy; } - (RACSignal *)rac_buttonClickedSignal { RACSignal *signal = [[[[self.rac_delegateProxy signalForSelector:@selector(actionSheet:clickedButtonAtIndex:)] reduceEach:^(UIActionSheet *actionSheet, NSNumber *buttonIndex) { return buttonIndex; }] takeUntil:self.rac_willDeallocSignal] setNameWithFormat:@"%@ -rac_buttonClickedSignal", RACDescription(self)]; RACUseDelegateProxy(self); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIAlertView+RACSignalSupport.h ================================================ // // UIAlertView+RACSignalSupport.h // ReactiveCocoa // // Created by Henrik Hodne on 6/16/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACDelegateProxy; @class RACSignal; @interface UIAlertView (RACSignalSupport) /// A delegate proxy which will be set as the receiver's delegate when any of the /// methods in this category are used. @property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; /// Creates a signal for button clicks on the receiver. /// /// When this method is invoked, the `rac_delegateProxy` will become the /// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy /// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't /// know how to handle. Setting the receiver's `delegate` afterward is considered /// undefined behavior. /// /// Note that this signal will not send a value when the alert is dismissed /// programatically. /// /// Returns a signal which will send the index of the specific button clicked. /// The signal will complete itself when the receiver is deallocated. - (RACSignal *)rac_buttonClickedSignal; /// Creates a signal for dismissal of the receiver. /// /// When this method is invoked, the `rac_delegateProxy` will become the /// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy /// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't /// know how to handle. Setting the receiver's `delegate` afterward is considered /// undefined behavior. /// /// Returns a signal which will send the index of the button associated with the /// dismissal. The signal will complete itself when the receiver is deallocated. - (RACSignal *)rac_willDismissSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIAlertView+RACSignalSupport.m ================================================ // // UIAlertView+RACSignalSupport.m // ReactiveCocoa // // Created by Henrik Hodne on 6/16/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIAlertView+RACSignalSupport.h" #import "RACDelegateProxy.h" #import "RACSignal+Operations.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import @implementation UIAlertView (RACSignalSupport) static void RACUseDelegateProxy(UIAlertView *self) { if (self.delegate == self.rac_delegateProxy) return; self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; self.delegate = (id)self.rac_delegateProxy; } - (RACDelegateProxy *)rac_delegateProxy { RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); if (proxy == nil) { proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIAlertViewDelegate)]; objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return proxy; } - (RACSignal *)rac_buttonClickedSignal { RACSignal *signal = [[[[self.rac_delegateProxy signalForSelector:@selector(alertView:clickedButtonAtIndex:)] reduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex) { return buttonIndex; }] takeUntil:self.rac_willDeallocSignal] setNameWithFormat:@"%@ -rac_buttonClickedSignal", RACDescription(self)]; RACUseDelegateProxy(self); return signal; } - (RACSignal *)rac_willDismissSignal { RACSignal *signal = [[[[self.rac_delegateProxy signalForSelector:@selector(alertView:willDismissWithButtonIndex:)] reduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex) { return buttonIndex; }] takeUntil:self.rac_willDeallocSignal] setNameWithFormat:@"%@ -rac_willDismissSignal", RACDescription(self)]; RACUseDelegateProxy(self); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIBarButtonItem+RACCommandSupport.h ================================================ // // UIBarButtonItem+RACCommandSupport.h // ReactiveCocoa // // Created by Kyle LeNeau on 3/27/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACCommand<__contravariant InputType>; @interface UIBarButtonItem (RACCommandSupport) /// Sets the control's command. When the control is clicked, the command is /// executed with the sender of the event. The control's enabledness is bound /// to the command's `canExecute`. /// /// Note: this will reset the control's target and action. @property (nonatomic, strong) RACCommand<__kindof UIBarButtonItem *> *rac_command; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIBarButtonItem+RACCommandSupport.m ================================================ // // UIBarButtonItem+RACCommandSupport.m // ReactiveCocoa // // Created by Kyle LeNeau on 3/27/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIBarButtonItem+RACCommandSupport.h" #import #import "RACCommand.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" #import static void *UIControlRACCommandKey = &UIControlRACCommandKey; static void *UIControlEnabledDisposableKey = &UIControlEnabledDisposableKey; @implementation UIBarButtonItem (RACCommandSupport) - (RACCommand *)rac_command { return objc_getAssociatedObject(self, UIControlRACCommandKey); } - (void)setRac_command:(RACCommand *)command { objc_setAssociatedObject(self, UIControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // Check for stored signal in order to remove it and add a new one RACDisposable *disposable = objc_getAssociatedObject(self, UIControlEnabledDisposableKey); [disposable dispose]; if (command == nil) return; disposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self]; objc_setAssociatedObject(self, UIControlEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self rac_hijackActionAndTargetIfNeeded]; } - (void)rac_hijackActionAndTargetIfNeeded { SEL hijackSelector = @selector(rac_commandPerformAction:); if (self.target == self && self.action == hijackSelector) return; if (self.target != nil) NSLog(@"WARNING: UIBarButtonItem.rac_command hijacks the control's existing target and action."); self.target = self; self.action = hijackSelector; } - (void)rac_commandPerformAction:(id)sender { [self.rac_command execute:sender]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIButton+RACCommandSupport.h ================================================ // // UIButton+RACCommandSupport.h // ReactiveCocoa // // Created by Ash Furrow on 2013-06-06. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACCommand<__contravariant InputType>; @interface UIButton (RACCommandSupport) /// Sets the button's command. When the button is clicked, the command is /// executed with the sender of the event. The button's enabledness is bound /// to the command's `canExecute`. @property (nonatomic, strong) RACCommand<__kindof UIButton *> *rac_command; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIButton+RACCommandSupport.m ================================================ // // UIButton+RACCommandSupport.m // ReactiveCocoa // // Created by Ash Furrow on 2013-06-06. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIButton+RACCommandSupport.h" #import #import "RACCommand.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" #import static void *UIButtonRACCommandKey = &UIButtonRACCommandKey; static void *UIButtonEnabledDisposableKey = &UIButtonEnabledDisposableKey; @implementation UIButton (RACCommandSupport) - (RACCommand *)rac_command { return objc_getAssociatedObject(self, UIButtonRACCommandKey); } - (void)setRac_command:(RACCommand *)command { objc_setAssociatedObject(self, UIButtonRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // Check for stored signal in order to remove it and add a new one RACDisposable *disposable = objc_getAssociatedObject(self, UIButtonEnabledDisposableKey); [disposable dispose]; if (command == nil) return; disposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self]; objc_setAssociatedObject(self, UIButtonEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self rac_hijackActionAndTargetIfNeeded]; } - (void)rac_hijackActionAndTargetIfNeeded { SEL hijackSelector = @selector(rac_commandPerformAction:); for (NSString *selector in [self actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]) { if (hijackSelector == NSSelectorFromString(selector)) { return; } } [self addTarget:self action:hijackSelector forControlEvents:UIControlEventTouchUpInside]; } - (void)rac_commandPerformAction:(id)sender { [self.rac_command execute:sender]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UICollectionReusableView+RACSignalSupport.h ================================================ // // UICollectionReusableView+RACSignalSupport.h // ReactiveCocoa // // Created by Kent Wong on 2013-10-04. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; // This category is only applicable to iOS >= 6.0. @interface UICollectionReusableView (RACSignalSupport) /// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon /// the receiver. /// /// Examples /// /// [[[self.cancelButton /// rac_signalForControlEvents:UIControlEventTouchUpInside] /// takeUntil:self.rac_prepareForReuseSignal] /// subscribeNext:^(UIButton *x) { /// // do other things /// }]; @property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UICollectionReusableView+RACSignalSupport.m ================================================ // // UICollectionReusableView+RACSignalSupport.m // ReactiveCocoa // // Created by Kent Wong on 2013-10-04. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UICollectionReusableView+RACSignalSupport.h" #import "NSObject+RACDescription.h" #import "NSObject+RACSelectorSignal.h" #import "RACSignal+Operations.h" #import "RACUnit.h" #import @implementation UICollectionReusableView (RACSignalSupport) - (RACSignal *)rac_prepareForReuseSignal { RACSignal *signal = objc_getAssociatedObject(self, _cmd); if (signal != nil) return signal; signal = [[[self rac_signalForSelector:@selector(prepareForReuse)] mapReplace:RACUnit.defaultUnit] setNameWithFormat:@"%@ -rac_prepareForReuseSignal", RACDescription(self)]; objc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupport.h ================================================ // // UIControl+RACSignalSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 4/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACSignal; @interface UIControl (RACSignalSupport) /// Creates and returns a signal that sends the sender of the control event /// whenever one of the control events is triggered. - (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupport.m ================================================ // // UIControl+RACSignalSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 4/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "UIControl+RACSignalSupport.h" #import #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal.h" #import "RACSubscriber.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" @implementation UIControl (RACSignalSupport) - (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents { @weakify(self); return [[RACSignal createSignal:^(id subscriber) { @strongify(self); [self addTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents]; RACDisposable *disposable = [RACDisposable disposableWithBlock:^{ [subscriber sendCompleted]; }]; [self.rac_deallocDisposable addDisposable:disposable]; return [RACDisposable disposableWithBlock:^{ @strongify(self); [self.rac_deallocDisposable removeDisposable:disposable]; [self removeTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents]; }]; }] setNameWithFormat:@"%@ -rac_signalForControlEvents: %lx", RACDescription(self), (unsigned long)controlEvents]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupportPrivate.h ================================================ // // UIControl+RACSignalSupportPrivate.h // ReactiveCocoa // // Created by Uri Baghin on 06/08/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface UIControl (RACSignalSupportPrivate) // Adds a RACChannel-based interface to the receiver for the given // UIControlEvents and exposes it. // // controlEvents - A mask of UIControlEvents on which to send new values. // key - The key whose value should be read and set when a control // event fires and when a value is sent to the // RACChannelTerminal respectively. // nilValue - The value to be assigned to the key when `nil` is sent to the // RACChannelTerminal. // // Returns a RACChannelTerminal which will send future values from the receiver, // and update the receiver when values are sent to the terminal. - (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupportPrivate.m ================================================ // // UIControl+RACSignalSupportPrivate.m // ReactiveCocoa // // Created by Uri Baghin on 06/08/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIControl+RACSignalSupportPrivate.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACLifting.h" #import "RACChannel.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" #import "UIControl+RACSignalSupport.h" @implementation UIControl (RACSignalSupportPrivate) - (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue { NSCParameterAssert(key.length > 0); key = [key copy]; RACChannel *channel = [[RACChannel alloc] init]; [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ [channel.followingTerminal sendCompleted]; }]]; RACSignal *eventSignal = [[[self rac_signalForControlEvents:controlEvents] mapReplace:key] takeUntil:[[channel.followingTerminal ignoreValues] catchTo:RACSignal.empty]]; [[self rac_liftSelector:@selector(valueForKey:) withSignals:eventSignal, nil] subscribe:channel.followingTerminal]; RACSignal *valuesSignal = [channel.followingTerminal map:^(id value) { return value ?: nilValue; }]; [self rac_liftSelector:@selector(setValue:forKey:) withSignals:valuesSignal, [RACSignal return:key], nil]; return channel.leadingTerminal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIDatePicker+RACSignalSupport.h ================================================ // // UIDatePicker+RACSignalSupport.h // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface UIDatePicker (RACSignalSupport) /// Creates a new RACChannel-based binding to the receiver. /// /// nilValue - The date to set when the terminal receives `nil`. /// /// Returns a RACChannelTerminal that sends the receiver's date whenever the /// UIControlEventValueChanged control event is fired, and sets the date to the /// values it receives. - (RACChannelTerminal *)rac_newDateChannelWithNilValue:(NSDate *)nilValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIDatePicker+RACSignalSupport.m ================================================ // // UIDatePicker+RACSignalSupport.m // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIDatePicker+RACSignalSupport.h" #import #import "UIControl+RACSignalSupportPrivate.h" @implementation UIDatePicker (RACSignalSupport) - (RACChannelTerminal *)rac_newDateChannelWithNilValue:(NSDate *)nilValue { return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.date) nilValue:nilValue]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIGestureRecognizer+RACSignalSupport.h ================================================ // // UIGestureRecognizer+RACSignalSupport.h // ReactiveCocoa // // Created by Josh Vera on 5/5/13. // Copyright (c) 2013 GitHub. All rights reserved. // #import @class RACSignal; @interface UIGestureRecognizer (RACSignalSupport) /// Returns a signal that sends the receiver when its gesture occurs. - (RACSignal *)rac_gestureSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIGestureRecognizer+RACSignalSupport.m ================================================ // // UIGestureRecognizer+RACSignalSupport.m // ReactiveCocoa // // Created by Josh Vera on 5/5/13. // Copyright (c) 2013 GitHub. All rights reserved. // #import "UIGestureRecognizer+RACSignalSupport.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal.h" #import "RACSubscriber.h" @implementation UIGestureRecognizer (RACSignalSupport) - (RACSignal *)rac_gestureSignal { @weakify(self); return [[RACSignal createSignal:^(id subscriber) { @strongify(self); [self addTarget:subscriber action:@selector(sendNext:)]; [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ [subscriber sendCompleted]; }]]; return [RACDisposable disposableWithBlock:^{ @strongify(self); [self removeTarget:subscriber action:@selector(sendNext:)]; }]; }] setNameWithFormat:@"%@ -rac_gestureSignal", RACDescription(self)]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIImagePickerController+RACSignalSupport.h ================================================ // // UIImagePickerController+RACSignalSupport.h // ReactiveCocoa // // Created by Timur Kuchkarov on 28.03.14. // Copyright (c) 2014 GitHub. All rights reserved. // #import @class RACDelegateProxy; @class RACSignal; @interface UIImagePickerController (RACSignalSupport) /// A delegate proxy which will be set as the receiver's delegate when any of the /// methods in this category are used. @property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; /// Creates a signal for every new selected image. /// /// When this method is invoked, the `rac_delegateProxy` will become the /// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy /// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't /// know how to handle. Setting the receiver's `delegate` afterward is considered /// undefined behavior. /// /// Returns a signal which will send the dictionary with info for the selected image. /// Caller is responsible for picker controller dismissal. The signal will complete /// itself when the receiver is deallocated or when user cancels selection. - (RACSignal *)rac_imageSelectedSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIImagePickerController+RACSignalSupport.m ================================================ // // UIImagePickerController+RACSignalSupport.m // ReactiveCocoa // // Created by Timur Kuchkarov on 28.03.14. // Copyright (c) 2014 GitHub. All rights reserved. // #import "UIImagePickerController+RACSignalSupport.h" #import "RACDelegateProxy.h" #import "RACSignal+Operations.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import @implementation UIImagePickerController (RACSignalSupport) static void RACUseDelegateProxy(UIImagePickerController *self) { if (self.delegate == self.rac_delegateProxy) return; self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; self.delegate = (id)self.rac_delegateProxy; } - (RACDelegateProxy *)rac_delegateProxy { RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); if (proxy == nil) { proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIImagePickerControllerDelegate)]; objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return proxy; } - (RACSignal *)rac_imageSelectedSignal { RACSignal *pickerCancelledSignal = [[self.rac_delegateProxy signalForSelector:@selector(imagePickerControllerDidCancel:)] merge:self.rac_willDeallocSignal]; RACSignal *imagePickerSignal = [[[[self.rac_delegateProxy signalForSelector:@selector(imagePickerController:didFinishPickingMediaWithInfo:)] reduceEach:^(UIImagePickerController *pickerController, NSDictionary *userInfo) { return userInfo; }] takeUntil:pickerCancelledSignal] setNameWithFormat:@"%@ -rac_imageSelectedSignal", RACDescription(self)]; RACUseDelegateProxy(self); return imagePickerSignal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIRefreshControl+RACCommandSupport.h ================================================ // // UIRefreshControl+RACCommandSupport.h // ReactiveCocoa // // Created by Dave Lee on 2013-10-17. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACCommand<__contravariant InputType>; @interface UIRefreshControl (RACCommandSupport) /// Manipulate the RACCommand property associated with this refresh control. /// /// When this refresh control is activated by the user, the command will be /// executed. Upon completion or error of the execution signal, -endRefreshing /// will be invoked. @property (nonatomic, strong) RACCommand<__kindof UIRefreshControl *> *rac_command; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIRefreshControl+RACCommandSupport.m ================================================ // // UIRefreshControl+RACCommandSupport.m // ReactiveCocoa // // Created by Dave Lee on 2013-10-17. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIRefreshControl+RACCommandSupport.h" #import #import "RACCommand.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal.h" #import "RACSignal+Operations.h" #import "UIControl+RACSignalSupport.h" #import static void *UIRefreshControlRACCommandKey = &UIRefreshControlRACCommandKey; static void *UIRefreshControlDisposableKey = &UIRefreshControlDisposableKey; @implementation UIRefreshControl (RACCommandSupport) - (RACCommand *)rac_command { return objc_getAssociatedObject(self, UIRefreshControlRACCommandKey); } - (void)setRac_command:(RACCommand *)command { objc_setAssociatedObject(self, UIRefreshControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // Dispose of any active command associations. [objc_getAssociatedObject(self, UIRefreshControlDisposableKey) dispose]; if (command == nil) return; // Like RAC(self, enabled) = command.enabled; but with access to disposable. RACDisposable *enabledDisposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self]; RACDisposable *executionDisposable = [[[[[self rac_signalForControlEvents:UIControlEventValueChanged] map:^(UIRefreshControl *x) { return [[[command execute:x] catchTo:[RACSignal empty]] then:^{ return [RACSignal return:x]; }]; }] concat] deliverOnMainThread] subscribeNext:^(UIRefreshControl *x) { [x endRefreshing]; }]; RACDisposable *commandDisposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ enabledDisposable, executionDisposable ]]; objc_setAssociatedObject(self, UIRefreshControlDisposableKey, commandDisposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISegmentedControl+RACSignalSupport.h ================================================ // // UISegmentedControl+RACSignalSupport.h // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface UISegmentedControl (RACSignalSupport) /// Creates a new RACChannel-based binding to the receiver. /// /// nilValue - The segment to select when the terminal receives `nil`. /// /// Returns a RACChannelTerminal that sends the receiver's currently selected /// segment's index whenever the UIControlEventValueChanged control event is /// fired, and sets the selected segment index to the values it receives. - (RACChannelTerminal *)rac_newSelectedSegmentIndexChannelWithNilValue:(NSNumber *)nilValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISegmentedControl+RACSignalSupport.m ================================================ // // UISegmentedControl+RACSignalSupport.m // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UISegmentedControl+RACSignalSupport.h" #import #import "UIControl+RACSignalSupportPrivate.h" @implementation UISegmentedControl (RACSignalSupport) - (RACChannelTerminal *)rac_newSelectedSegmentIndexChannelWithNilValue:(NSNumber *)nilValue { return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.selectedSegmentIndex) nilValue:nilValue]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISlider+RACSignalSupport.h ================================================ // // UISlider+RACSignalSupport.h // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface UISlider (RACSignalSupport) /// Creates a new RACChannel-based binding to the receiver. /// /// nilValue - The value to set when the terminal receives `nil`. /// /// Returns a RACChannelTerminal that sends the receiver's value whenever the /// UIControlEventValueChanged control event is fired, and sets the value to the /// values it receives. - (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISlider+RACSignalSupport.m ================================================ // // UISlider+RACSignalSupport.m // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UISlider+RACSignalSupport.h" #import #import "UIControl+RACSignalSupportPrivate.h" @implementation UISlider (RACSignalSupport) - (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue { return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.value) nilValue:nilValue]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIStepper+RACSignalSupport.h ================================================ // // UIStepper+RACSignalSupport.h // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface UIStepper (RACSignalSupport) /// Creates a new RACChannel-based binding to the receiver. /// /// nilValue - The value to set when the terminal receives `nil`. /// /// Returns a RACChannelTerminal that sends the receiver's value whenever the /// UIControlEventValueChanged control event is fired, and sets the value to the /// values it receives. - (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIStepper+RACSignalSupport.m ================================================ // // UIStepper+RACSignalSupport.m // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UIStepper+RACSignalSupport.h" #import #import "UIControl+RACSignalSupportPrivate.h" @implementation UIStepper (RACSignalSupport) - (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue { return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.value) nilValue:nilValue]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISwitch+RACSignalSupport.h ================================================ // // UISwitch+RACSignalSupport.h // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @interface UISwitch (RACSignalSupport) /// Creates a new RACChannel-based binding to the receiver. /// /// Returns a RACChannelTerminal that sends whether the receiver is on whenever /// the UIControlEventValueChanged control event is fired, and sets it on or off /// when it receives @YES or @NO respectively. - (RACChannelTerminal *)rac_newOnChannel; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISwitch+RACSignalSupport.m ================================================ // // UISwitch+RACSignalSupport.m // ReactiveCocoa // // Created by Uri Baghin on 20/07/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UISwitch+RACSignalSupport.h" #import #import "UIControl+RACSignalSupportPrivate.h" @implementation UISwitch (RACSignalSupport) - (RACChannelTerminal *)rac_newOnChannel { return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.on) nilValue:@NO]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewCell+RACSignalSupport.h ================================================ // // UITableViewCell+RACSignalSupport.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; @interface UITableViewCell (RACSignalSupport) /// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon /// the receiver. /// /// Examples /// /// [[[self.cancelButton /// rac_signalForControlEvents:UIControlEventTouchUpInside] /// takeUntil:self.rac_prepareForReuseSignal] /// subscribeNext:^(UIButton *x) { /// // do other things /// }]; @property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewCell+RACSignalSupport.m ================================================ // // UITableViewCell+RACSignalSupport.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UITableViewCell+RACSignalSupport.h" #import "NSObject+RACDescription.h" #import "NSObject+RACSelectorSignal.h" #import "RACSignal+Operations.h" #import "RACUnit.h" #import @implementation UITableViewCell (RACSignalSupport) - (RACSignal *)rac_prepareForReuseSignal { RACSignal *signal = objc_getAssociatedObject(self, _cmd); if (signal != nil) return signal; signal = [[[self rac_signalForSelector:@selector(prepareForReuse)] mapReplace:RACUnit.defaultUnit] setNameWithFormat:@"%@ -rac_prepareForReuseSignal", RACDescription(self)]; objc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewHeaderFooterView+RACSignalSupport.h ================================================ // // UITableViewHeaderFooterView+RACSignalSupport.h // ReactiveCocoa // // Created by Syo Ikeda on 12/30/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @class RACSignal; // This category is only applicable to iOS >= 6.0. @interface UITableViewHeaderFooterView (RACSignalSupport) /// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon /// the receiver. /// /// Examples /// /// [[[self.cancelButton /// rac_signalForControlEvents:UIControlEventTouchUpInside] /// takeUntil:self.rac_prepareForReuseSignal] /// subscribeNext:^(UIButton *x) { /// // do other things /// }]; @property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewHeaderFooterView+RACSignalSupport.m ================================================ // // UITableViewHeaderFooterView+RACSignalSupport.m // ReactiveCocoa // // Created by Syo Ikeda on 12/30/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "UITableViewHeaderFooterView+RACSignalSupport.h" #import "NSObject+RACDescription.h" #import "NSObject+RACSelectorSignal.h" #import "RACSignal+Operations.h" #import "RACUnit.h" #import @implementation UITableViewHeaderFooterView (RACSignalSupport) - (RACSignal *)rac_prepareForReuseSignal { RACSignal *signal = objc_getAssociatedObject(self, _cmd); if (signal != nil) return signal; signal = [[[self rac_signalForSelector:@selector(prepareForReuse)] mapReplace:RACUnit.defaultUnit] setNameWithFormat:@"%@ -rac_prepareForReuseSignal", RACDescription(self)]; objc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextField+RACSignalSupport.h ================================================ // // UITextField+RACSignalSupport.h // ReactiveCocoa // // Created by Josh Abernathy on 4/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import @class RACChannelTerminal; @class RACSignal; @interface UITextField (RACSignalSupport) /// Creates and returns a signal for the text of the field. It always starts with /// the current text. The signal sends next when the UIControlEventAllEditingEvents /// control event is fired on the control. - (RACSignal *)rac_textSignal; /// Creates a new RACChannel-based binding to the receiver. /// /// Returns a RACChannelTerminal that sends the receiver's text whenever the /// UIControlEventAllEditingEvents control event is fired, and sets the text /// to the values it receives. - (RACChannelTerminal *)rac_newTextChannel; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextField+RACSignalSupport.m ================================================ // // UITextField+RACSignalSupport.m // ReactiveCocoa // // Created by Josh Abernathy on 4/17/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "UITextField+RACSignalSupport.h" #import #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "RACSignal+Operations.h" #import "UIControl+RACSignalSupport.h" #import "UIControl+RACSignalSupportPrivate.h" @implementation UITextField (RACSignalSupport) - (RACSignal *)rac_textSignal { @weakify(self); return [[[[[RACSignal defer:^{ @strongify(self); return [RACSignal return:self]; }] concat:[self rac_signalForControlEvents:UIControlEventAllEditingEvents]] map:^(UITextField *x) { return x.text; }] takeUntil:self.rac_willDeallocSignal] setNameWithFormat:@"%@ -rac_textSignal", RACDescription(self)]; } - (RACChannelTerminal *)rac_newTextChannel { return [self rac_channelForControlEvents:UIControlEventAllEditingEvents key:@keypath(self.text) nilValue:@""]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextView+RACSignalSupport.h ================================================ // // UITextView+RACSignalSupport.h // ReactiveCocoa // // Created by Cody Krieger on 5/18/12. // Copyright (c) 2012 Cody Krieger. All rights reserved. // #import @class RACDelegateProxy; @class RACSignal; @interface UITextView (RACSignalSupport) /// A delegate proxy which will be set as the receiver's delegate when any of the /// methods in this category are used. @property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; /// Creates a signal for the text of the receiver. /// /// When this method is invoked, the `rac_delegateProxy` will become the /// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy /// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't /// know how to handle. Setting the receiver's `delegate` afterward is /// considered undefined behavior. /// /// Returns a signal which will send the current text upon subscription, then /// again whenever the receiver's text is changed. The signal will complete when /// the receiver is deallocated. - (RACSignal *)rac_textSignal; @end @interface UITextView (RACSignalSupportUnavailable) - (RACSignal *)rac_signalForDelegateMethod:(SEL)method __attribute__((unavailable("Use -rac_signalForSelector:fromProtocol: instead"))); @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextView+RACSignalSupport.m ================================================ // // UITextView+RACSignalSupport.m // ReactiveCocoa // // Created by Cody Krieger on 5/18/12. // Copyright (c) 2012 Cody Krieger. All rights reserved. // #import "UITextView+RACSignalSupport.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACDescription.h" #import "RACDelegateProxy.h" #import "RACSignal+Operations.h" #import "RACTuple.h" #import @implementation UITextView (RACSignalSupport) static void RACUseDelegateProxy(UITextView *self) { if (self.delegate == self.rac_delegateProxy) return; self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; self.delegate = (id)self.rac_delegateProxy; } - (RACDelegateProxy *)rac_delegateProxy { RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); if (proxy == nil) { proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UITextViewDelegate)]; objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return proxy; } - (RACSignal *)rac_textSignal { @weakify(self); RACSignal *signal = [[[[[RACSignal defer:^{ @strongify(self); return [RACSignal return:RACTuplePack(self)]; }] concat:[self.rac_delegateProxy signalForSelector:@selector(textViewDidChange:)]] reduceEach:^(UITextView *x) { return x.text; }] takeUntil:self.rac_willDeallocSignal] setNameWithFormat:@"%@ -rac_textSignal", RACDescription(self)]; RACUseDelegateProxy(self); return signal; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTKeyPathCoding.h ================================================ // // EXTKeyPathCoding.h // extobjc // // Created by Justin Spahr-Summers on 19.06.12. // Copyright (C) 2012 Justin Spahr-Summers. // Released under the MIT license. // #import #import "metamacros.h" /** * \@keypath allows compile-time verification of key paths. Given a real object * receiver and key path: * * @code NSString *UTF8StringPath = @keypath(str.lowercaseString.UTF8String); // => @"lowercaseString.UTF8String" NSString *versionPath = @keypath(NSObject, version); // => @"version" NSString *lowercaseStringPath = @keypath(NSString.new, lowercaseString); // => @"lowercaseString" * @endcode * * ... the macro returns an \c NSString containing all but the first path * component or argument (e.g., @"lowercaseString.UTF8String", @"version"). * * In addition to simply creating a key path, this macro ensures that the key * path is valid at compile-time (causing a syntax error if not), and supports * refactoring, such that changing the name of the property will also update any * uses of \@keypath. */ #define keypath(...) \ metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__))(keypath1(__VA_ARGS__))(keypath2(__VA_ARGS__)) #define keypath1(PATH) \ (((void)(NO && ((void)PATH, NO)), strchr(# PATH, '.') + 1)) #define keypath2(OBJ, PATH) \ (((void)(NO && ((void)OBJ.PATH, NO)), # PATH)) /** * \@collectionKeypath allows compile-time verification of key paths across collections NSArray/NSSet etc. Given a real object * receiver, collection object receiver and related keypaths: * * @code NSString *employessFirstNamePath = @collectionKeypath(department.employees, Employee.new, firstName) // => @"employees.firstName" NSString *employessFirstNamePath = @collectionKeypath(Department.new, employees, Employee.new, firstName) // => @"employees.firstName" * @endcode * */ #define collectionKeypath(...) \ metamacro_if_eq(3, metamacro_argcount(__VA_ARGS__))(collectionKeypath3(__VA_ARGS__))(collectionKeypath4(__VA_ARGS__)) #define collectionKeypath3(PATH, COLLECTION_OBJECT, COLLECTION_PATH) ([[NSString stringWithFormat:@"%s.%s",keypath(PATH), keypath(COLLECTION_OBJECT, COLLECTION_PATH)] UTF8String]) #define collectionKeypath4(OBJ, PATH, COLLECTION_OBJECT, COLLECTION_PATH) ([[NSString stringWithFormat:@"%s.%s",keypath(OBJ, PATH), keypath(COLLECTION_OBJECT, COLLECTION_PATH)] UTF8String]) ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTRuntimeExtensions.h ================================================ // // EXTRuntimeExtensions.h // extobjc // // Created by Justin Spahr-Summers on 2011-03-05. // Copyright (C) 2012 Justin Spahr-Summers. // Released under the MIT license. // #import /** * Describes the memory management policy of a property. */ typedef enum { /** * The value is assigned. */ rac_propertyMemoryManagementPolicyAssign = 0, /** * The value is retained. */ rac_propertyMemoryManagementPolicyRetain, /** * The value is copied. */ rac_propertyMemoryManagementPolicyCopy } rac_propertyMemoryManagementPolicy; /** * Describes the attributes and type information of a property. */ typedef struct { /** * Whether this property was declared with the \c readonly attribute. */ BOOL readonly; /** * Whether this property was declared with the \c nonatomic attribute. */ BOOL nonatomic; /** * Whether the property is a weak reference. */ BOOL weak; /** * Whether the property is eligible for garbage collection. */ BOOL canBeCollected; /** * Whether this property is defined with \c \@dynamic. */ BOOL dynamic; /** * The memory management policy for this property. This will always be * #rac_propertyMemoryManagementPolicyAssign if #readonly is \c YES. */ rac_propertyMemoryManagementPolicy memoryManagementPolicy; /** * The selector for the getter of this property. This will reflect any * custom \c getter= attribute provided in the property declaration, or the * inferred getter name otherwise. */ SEL getter; /** * The selector for the setter of this property. This will reflect any * custom \c setter= attribute provided in the property declaration, or the * inferred setter name otherwise. * * @note If #readonly is \c YES, this value will represent what the setter * \e would be, if the property were writable. */ SEL setter; /** * The backing instance variable for this property, or \c NULL if \c * \c @synthesize was not used, and therefore no instance variable exists. This * would also be the case if the property is implemented dynamically. */ const char *ivar; /** * If this property is defined as being an instance of a specific class, * this will be the class object representing it. * * This will be \c nil if the property was defined as type \c id, if the * property is not of an object type, or if the class could not be found at * runtime. */ Class objectClass; /** * The type encoding for the value of this property. This is the type as it * would be returned by the \c \@encode() directive. */ char type[]; } rac_propertyAttributes; /** * Finds the instance method named \a aSelector on \a aClass and returns it, or * returns \c NULL if no such instance method exists. Unlike \c * class_getInstanceMethod(), this does not search superclasses. * * @note To get class methods in this manner, use a metaclass for \a aClass. */ Method rac_getImmediateInstanceMethod (Class aClass, SEL aSelector); /** * Returns a pointer to a structure containing information about \a property. * You must \c free() the returned pointer. Returns \c NULL if there is an error * obtaining information from \a property. */ rac_propertyAttributes *rac_copyPropertyAttributes (objc_property_t property); ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTRuntimeExtensions.m ================================================ // // EXTRuntimeExtensions.m // extobjc // // Created by Justin Spahr-Summers on 2011-03-05. // Copyright (C) 2012 Justin Spahr-Summers. // Released under the MIT license. // #import #import #import #import #import #import #import #import #import rac_propertyAttributes *rac_copyPropertyAttributes (objc_property_t property) { const char * const attrString = property_getAttributes(property); if (!attrString) { fprintf(stderr, "ERROR: Could not get attribute string from property %s\n", property_getName(property)); return NULL; } if (attrString[0] != 'T') { fprintf(stderr, "ERROR: Expected attribute string \"%s\" for property %s to start with 'T'\n", attrString, property_getName(property)); return NULL; } const char *typeString = attrString + 1; const char *next = NSGetSizeAndAlignment(typeString, NULL, NULL); if (!next) { fprintf(stderr, "ERROR: Could not read past type in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); return NULL; } size_t typeLength = (size_t)(next - typeString); if (!typeLength) { fprintf(stderr, "ERROR: Invalid type in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); return NULL; } // allocate enough space for the structure and the type string (plus a NUL) rac_propertyAttributes *attributes = calloc(1, sizeof(rac_propertyAttributes) + typeLength + 1); if (!attributes) { fprintf(stderr, "ERROR: Could not allocate rac_propertyAttributes structure for attribute string \"%s\" for property %s\n", attrString, property_getName(property)); return NULL; } // copy the type string strncpy(attributes->type, typeString, typeLength); attributes->type[typeLength] = '\0'; // if this is an object type, and immediately followed by a quoted string... if (typeString[0] == *(@encode(id)) && typeString[1] == '"') { // we should be able to extract a class name const char *className = typeString + 2; next = strchr(className, '"'); if (!next) { fprintf(stderr, "ERROR: Could not read class name in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); return NULL; } if (className != next) { size_t classNameLength = (size_t)(next - className); char trimmedName[classNameLength + 1]; strncpy(trimmedName, className, classNameLength); trimmedName[classNameLength] = '\0'; // attempt to look up the class in the runtime attributes->objectClass = objc_getClass(trimmedName); } } if (*next != '\0') { // skip past any junk before the first flag next = strchr(next, ','); } while (next && *next == ',') { char flag = next[1]; next += 2; switch (flag) { case '\0': break; case 'R': attributes->readonly = YES; break; case 'C': attributes->memoryManagementPolicy = rac_propertyMemoryManagementPolicyCopy; break; case '&': attributes->memoryManagementPolicy = rac_propertyMemoryManagementPolicyRetain; break; case 'N': attributes->nonatomic = YES; break; case 'G': case 'S': { const char *nextFlag = strchr(next, ','); SEL name = NULL; if (!nextFlag) { // assume that the rest of the string is the selector const char *selectorString = next; next = ""; name = sel_registerName(selectorString); } else { size_t selectorLength = (size_t)(nextFlag - next); if (!selectorLength) { fprintf(stderr, "ERROR: Found zero length selector name in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); goto errorOut; } char selectorString[selectorLength + 1]; strncpy(selectorString, next, selectorLength); selectorString[selectorLength] = '\0'; name = sel_registerName(selectorString); next = nextFlag; } if (flag == 'G') attributes->getter = name; else attributes->setter = name; } break; case 'D': attributes->dynamic = YES; attributes->ivar = NULL; break; case 'V': // assume that the rest of the string (if present) is the ivar name if (*next == '\0') { // if there's nothing there, let's assume this is dynamic attributes->ivar = NULL; } else { attributes->ivar = next; next = ""; } break; case 'W': attributes->weak = YES; break; case 'P': attributes->canBeCollected = YES; break; case 't': fprintf(stderr, "ERROR: Old-style type encoding is unsupported in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); // skip over this type encoding while (*next != ',' && *next != '\0') ++next; break; default: fprintf(stderr, "ERROR: Unrecognized attribute string flag '%c' in attribute string \"%s\" for property %s\n", flag, attrString, property_getName(property)); } } if (next && *next != '\0') { fprintf(stderr, "Warning: Unparsed data \"%s\" in attribute string \"%s\" for property %s\n", next, attrString, property_getName(property)); } if (!attributes->getter) { // use the property name as the getter by default attributes->getter = sel_registerName(property_getName(property)); } if (!attributes->setter) { const char *propertyName = property_getName(property); size_t propertyNameLength = strlen(propertyName); // we want to transform the name to setProperty: style size_t setterLength = propertyNameLength + 4; char setterName[setterLength + 1]; strncpy(setterName, "set", 3); strncpy(setterName + 3, propertyName, propertyNameLength); // capitalize property name for the setter setterName[3] = (char)toupper(setterName[3]); setterName[setterLength - 1] = ':'; setterName[setterLength] = '\0'; attributes->setter = sel_registerName(setterName); } return attributes; errorOut: free(attributes); return NULL; } Method rac_getImmediateInstanceMethod (Class aClass, SEL aSelector) { unsigned methodCount = 0; Method *methods = class_copyMethodList(aClass, &methodCount); Method foundMethod = NULL; for (unsigned methodIndex = 0;methodIndex < methodCount;++methodIndex) { if (method_getName(methods[methodIndex]) == aSelector) { foundMethod = methods[methodIndex]; break; } } free(methods); return foundMethod; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTScope.h ================================================ // // EXTScope.h // extobjc // // Created by Justin Spahr-Summers on 2011-05-04. // Copyright (C) 2012 Justin Spahr-Summers. // Released under the MIT license. // #import "metamacros.h" /** * \@onExit defines some code to be executed when the current scope exits. The * code must be enclosed in braces and terminated with a semicolon, and will be * executed regardless of how the scope is exited, including from exceptions, * \c goto, \c return, \c break, and \c continue. * * Provided code will go into a block to be executed later. Keep this in mind as * it pertains to memory management, restrictions on assignment, etc. Because * the code is used within a block, \c return is a legal (though perhaps * confusing) way to exit the cleanup block early. * * Multiple \@onExit statements in the same scope are executed in reverse * lexical order. This helps when pairing resource acquisition with \@onExit * statements, as it guarantees teardown in the opposite order of acquisition. * * @note This statement cannot be used within scopes defined without braces * (like a one line \c if). In practice, this is not an issue, since \@onExit is * a useless construct in such a case anyways. */ #define onExit \ rac_keywordify \ __strong rac_cleanupBlock_t metamacro_concat(rac_exitBlock_, __LINE__) __attribute__((cleanup(rac_executeCleanupBlock), unused)) = ^ /** * Creates \c __weak shadow variables for each of the variables provided as * arguments, which can later be made strong again with #strongify. * * This is typically used to weakly reference variables in a block, but then * ensure that the variables stay alive during the actual execution of the block * (if they were live upon entry). * * See #strongify for an example of usage. */ #define weakify(...) \ rac_keywordify \ metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__) /** * Like #weakify, but uses \c __unsafe_unretained instead, for targets or * classes that do not support weak references. */ #define unsafeify(...) \ rac_keywordify \ metamacro_foreach_cxt(rac_weakify_,, __unsafe_unretained, __VA_ARGS__) /** * Strongly references each of the variables provided as arguments, which must * have previously been passed to #weakify. * * The strong references created will shadow the original variable names, such * that the original names can be used without issue (and a significantly * reduced risk of retain cycles) in the current scope. * * @code id foo = [[NSObject alloc] init]; id bar = [[NSObject alloc] init]; @weakify(foo, bar); // this block will not keep 'foo' or 'bar' alive BOOL (^matchesFooOrBar)(id) = ^ BOOL (id obj){ // but now, upon entry, 'foo' and 'bar' will stay alive until the block has // finished executing @strongify(foo, bar); return [foo isEqual:obj] || [bar isEqual:obj]; }; * @endcode */ #define strongify(...) \ rac_keywordify \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wshadow\"") \ metamacro_foreach(rac_strongify_,, __VA_ARGS__) \ _Pragma("clang diagnostic pop") /*** implementation details follow ***/ typedef void (^rac_cleanupBlock_t)(); static inline void rac_executeCleanupBlock (__strong rac_cleanupBlock_t *block) { (*block)(); } #define rac_weakify_(INDEX, CONTEXT, VAR) \ CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR); #define rac_strongify_(INDEX, VAR) \ __strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_); // Details about the choice of backing keyword: // // The use of @try/@catch/@finally can cause the compiler to suppress // return-type warnings. // The use of @autoreleasepool {} is not optimized away by the compiler, // resulting in superfluous creation of autorelease pools. // // Since neither option is perfect, and with no other alternatives, the // compromise is to use @autorelease in DEBUG builds to maintain compiler // analysis, and to use @try/@catch otherwise to avoid insertion of unnecessary // autorelease pools. #if DEBUG #define rac_keywordify autoreleasepool {} #else #define rac_keywordify try {} @catch (...) {} #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/metamacros.h ================================================ /** * Macros for metaprogramming * ExtendedC * * Copyright (C) 2012 Justin Spahr-Summers * Released under the MIT license */ #ifndef EXTC_METAMACROS_H #define EXTC_METAMACROS_H /** * Executes one or more expressions (which may have a void type, such as a call * to a function that returns no value) and always returns true. */ #define metamacro_exprify(...) \ ((__VA_ARGS__), true) /** * Returns a string representation of VALUE after full macro expansion. */ #define metamacro_stringify(VALUE) \ metamacro_stringify_(VALUE) /** * Returns A and B concatenated after full macro expansion. */ #define metamacro_concat(A, B) \ metamacro_concat_(A, B) /** * Returns the Nth variadic argument (starting from zero). At least * N + 1 variadic arguments must be given. N must be between zero and twenty, * inclusive. */ #define metamacro_at(N, ...) \ metamacro_concat(metamacro_at, N)(__VA_ARGS__) /** * Returns the number of arguments (up to twenty) provided to the macro. At * least one argument must be provided. * * Inspired by P99: http://p99.gforge.inria.fr */ #define metamacro_argcount(...) \ metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) /** * Identical to #metamacro_foreach_cxt, except that no CONTEXT argument is * given. Only the index and current argument will thus be passed to MACRO. */ #define metamacro_foreach(MACRO, SEP, ...) \ metamacro_foreach_cxt(metamacro_foreach_iter, SEP, MACRO, __VA_ARGS__) /** * For each consecutive variadic argument (up to twenty), MACRO is passed the * zero-based index of the current argument, CONTEXT, and then the argument * itself. The results of adjoining invocations of MACRO are then separated by * SEP. * * Inspired by P99: http://p99.gforge.inria.fr */ #define metamacro_foreach_cxt(MACRO, SEP, CONTEXT, ...) \ metamacro_concat(metamacro_foreach_cxt, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) /** * Identical to #metamacro_foreach_cxt. This can be used when the former would * fail due to recursive macro expansion. */ #define metamacro_foreach_cxt_recursive(MACRO, SEP, CONTEXT, ...) \ metamacro_concat(metamacro_foreach_cxt_recursive, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) /** * In consecutive order, appends each variadic argument (up to twenty) onto * BASE. The resulting concatenations are then separated by SEP. * * This is primarily useful to manipulate a list of macro invocations into instead * invoking a different, possibly related macro. */ #define metamacro_foreach_concat(BASE, SEP, ...) \ metamacro_foreach_cxt(metamacro_foreach_concat_iter, SEP, BASE, __VA_ARGS__) /** * Iterates COUNT times, each time invoking MACRO with the current index * (starting at zero) and CONTEXT. The results of adjoining invocations of MACRO * are then separated by SEP. * * COUNT must be an integer between zero and twenty, inclusive. */ #define metamacro_for_cxt(COUNT, MACRO, SEP, CONTEXT) \ metamacro_concat(metamacro_for_cxt, COUNT)(MACRO, SEP, CONTEXT) /** * Returns the first argument given. At least one argument must be provided. * * This is useful when implementing a variadic macro, where you may have only * one variadic argument, but no way to retrieve it (for example, because \c ... * always needs to match at least one argument). * * @code #define varmacro(...) \ metamacro_head(__VA_ARGS__) * @endcode */ #define metamacro_head(...) \ metamacro_head_(__VA_ARGS__, 0) /** * Returns every argument except the first. At least two arguments must be * provided. */ #define metamacro_tail(...) \ metamacro_tail_(__VA_ARGS__) /** * Returns the first N (up to twenty) variadic arguments as a new argument list. * At least N variadic arguments must be provided. */ #define metamacro_take(N, ...) \ metamacro_concat(metamacro_take, N)(__VA_ARGS__) /** * Removes the first N (up to twenty) variadic arguments from the given argument * list. At least N variadic arguments must be provided. */ #define metamacro_drop(N, ...) \ metamacro_concat(metamacro_drop, N)(__VA_ARGS__) /** * Decrements VAL, which must be a number between zero and twenty, inclusive. * * This is primarily useful when dealing with indexes and counts in * metaprogramming. */ #define metamacro_dec(VAL) \ metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) /** * Increments VAL, which must be a number between zero and twenty, inclusive. * * This is primarily useful when dealing with indexes and counts in * metaprogramming. */ #define metamacro_inc(VAL) \ metamacro_at(VAL, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) /** * If A is equal to B, the next argument list is expanded; otherwise, the * argument list after that is expanded. A and B must be numbers between zero * and twenty, inclusive. Additionally, B must be greater than or equal to A. * * @code // expands to true metamacro_if_eq(0, 0)(true)(false) // expands to false metamacro_if_eq(0, 1)(true)(false) * @endcode * * This is primarily useful when dealing with indexes and counts in * metaprogramming. */ #define metamacro_if_eq(A, B) \ metamacro_concat(metamacro_if_eq, A)(B) /** * Identical to #metamacro_if_eq. This can be used when the former would fail * due to recursive macro expansion. */ #define metamacro_if_eq_recursive(A, B) \ metamacro_concat(metamacro_if_eq_recursive, A)(B) /** * Returns 1 if N is an even number, or 0 otherwise. N must be between zero and * twenty, inclusive. * * For the purposes of this test, zero is considered even. */ #define metamacro_is_even(N) \ metamacro_at(N, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1) /** * Returns the logical NOT of B, which must be the number zero or one. */ #define metamacro_not(B) \ metamacro_at(B, 1, 0) // IMPLEMENTATION DETAILS FOLLOW! // Do not write code that depends on anything below this line. #define metamacro_stringify_(VALUE) # VALUE #define metamacro_concat_(A, B) A ## B #define metamacro_foreach_iter(INDEX, MACRO, ARG) MACRO(INDEX, ARG) #define metamacro_head_(FIRST, ...) FIRST #define metamacro_tail_(FIRST, ...) __VA_ARGS__ #define metamacro_consume_(...) #define metamacro_expand_(...) __VA_ARGS__ // implemented from scratch so that metamacro_concat() doesn't end up nesting #define metamacro_foreach_concat_iter(INDEX, BASE, ARG) metamacro_foreach_concat_iter_(BASE, ARG) #define metamacro_foreach_concat_iter_(BASE, ARG) BASE ## ARG // metamacro_at expansions #define metamacro_at0(...) metamacro_head(__VA_ARGS__) #define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__) #define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__) #define metamacro_at3(_0, _1, _2, ...) metamacro_head(__VA_ARGS__) #define metamacro_at4(_0, _1, _2, _3, ...) metamacro_head(__VA_ARGS__) #define metamacro_at5(_0, _1, _2, _3, _4, ...) metamacro_head(__VA_ARGS__) #define metamacro_at6(_0, _1, _2, _3, _4, _5, ...) metamacro_head(__VA_ARGS__) #define metamacro_at7(_0, _1, _2, _3, _4, _5, _6, ...) metamacro_head(__VA_ARGS__) #define metamacro_at8(_0, _1, _2, _3, _4, _5, _6, _7, ...) metamacro_head(__VA_ARGS__) #define metamacro_at9(_0, _1, _2, _3, _4, _5, _6, _7, _8, ...) metamacro_head(__VA_ARGS__) #define metamacro_at10(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ...) metamacro_head(__VA_ARGS__) #define metamacro_at11(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) metamacro_head(__VA_ARGS__) #define metamacro_at12(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) metamacro_head(__VA_ARGS__) #define metamacro_at13(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) metamacro_head(__VA_ARGS__) #define metamacro_at14(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) metamacro_head(__VA_ARGS__) #define metamacro_at15(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) metamacro_head(__VA_ARGS__) #define metamacro_at16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) metamacro_head(__VA_ARGS__) #define metamacro_at17(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) metamacro_head(__VA_ARGS__) #define metamacro_at18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) metamacro_head(__VA_ARGS__) #define metamacro_at19(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) metamacro_head(__VA_ARGS__) #define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__) // metamacro_foreach_cxt expansions #define metamacro_foreach_cxt0(MACRO, SEP, CONTEXT) #define metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) #define metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) \ SEP \ MACRO(1, CONTEXT, _1) #define metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ SEP \ MACRO(2, CONTEXT, _2) #define metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ SEP \ MACRO(3, CONTEXT, _3) #define metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ SEP \ MACRO(4, CONTEXT, _4) #define metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ SEP \ MACRO(5, CONTEXT, _5) #define metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ SEP \ MACRO(6, CONTEXT, _6) #define metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ SEP \ MACRO(7, CONTEXT, _7) #define metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ SEP \ MACRO(8, CONTEXT, _8) #define metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ SEP \ MACRO(9, CONTEXT, _9) #define metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ SEP \ MACRO(10, CONTEXT, _10) #define metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ SEP \ MACRO(11, CONTEXT, _11) #define metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ SEP \ MACRO(12, CONTEXT, _12) #define metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ SEP \ MACRO(13, CONTEXT, _13) #define metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ SEP \ MACRO(14, CONTEXT, _14) #define metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ SEP \ MACRO(15, CONTEXT, _15) #define metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ SEP \ MACRO(16, CONTEXT, _16) #define metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ SEP \ MACRO(17, CONTEXT, _17) #define metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ SEP \ MACRO(18, CONTEXT, _18) #define metamacro_foreach_cxt20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ SEP \ MACRO(19, CONTEXT, _19) // metamacro_foreach_cxt_recursive expansions #define metamacro_foreach_cxt_recursive0(MACRO, SEP, CONTEXT) #define metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) #define metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) \ SEP \ MACRO(1, CONTEXT, _1) #define metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ SEP \ MACRO(2, CONTEXT, _2) #define metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ SEP \ MACRO(3, CONTEXT, _3) #define metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ SEP \ MACRO(4, CONTEXT, _4) #define metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ SEP \ MACRO(5, CONTEXT, _5) #define metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ SEP \ MACRO(6, CONTEXT, _6) #define metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ SEP \ MACRO(7, CONTEXT, _7) #define metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ SEP \ MACRO(8, CONTEXT, _8) #define metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ SEP \ MACRO(9, CONTEXT, _9) #define metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ SEP \ MACRO(10, CONTEXT, _10) #define metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ SEP \ MACRO(11, CONTEXT, _11) #define metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ SEP \ MACRO(12, CONTEXT, _12) #define metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ SEP \ MACRO(13, CONTEXT, _13) #define metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ SEP \ MACRO(14, CONTEXT, _14) #define metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ SEP \ MACRO(15, CONTEXT, _15) #define metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ SEP \ MACRO(16, CONTEXT, _16) #define metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ SEP \ MACRO(17, CONTEXT, _17) #define metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ SEP \ MACRO(18, CONTEXT, _18) #define metamacro_foreach_cxt_recursive20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ SEP \ MACRO(19, CONTEXT, _19) // metamacro_for_cxt expansions #define metamacro_for_cxt0(MACRO, SEP, CONTEXT) #define metamacro_for_cxt1(MACRO, SEP, CONTEXT) MACRO(0, CONTEXT) #define metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ metamacro_for_cxt1(MACRO, SEP, CONTEXT) \ SEP \ MACRO(1, CONTEXT) #define metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ SEP \ MACRO(2, CONTEXT) #define metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ SEP \ MACRO(3, CONTEXT) #define metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ SEP \ MACRO(4, CONTEXT) #define metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ SEP \ MACRO(5, CONTEXT) #define metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ SEP \ MACRO(6, CONTEXT) #define metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ SEP \ MACRO(7, CONTEXT) #define metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ SEP \ MACRO(8, CONTEXT) #define metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ SEP \ MACRO(9, CONTEXT) #define metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ SEP \ MACRO(10, CONTEXT) #define metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ SEP \ MACRO(11, CONTEXT) #define metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ SEP \ MACRO(12, CONTEXT) #define metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ SEP \ MACRO(13, CONTEXT) #define metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ SEP \ MACRO(14, CONTEXT) #define metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ SEP \ MACRO(15, CONTEXT) #define metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ SEP \ MACRO(16, CONTEXT) #define metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ SEP \ MACRO(17, CONTEXT) #define metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ SEP \ MACRO(18, CONTEXT) #define metamacro_for_cxt20(MACRO, SEP, CONTEXT) \ metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ SEP \ MACRO(19, CONTEXT) // metamacro_if_eq expansions #define metamacro_if_eq0(VALUE) \ metamacro_concat(metamacro_if_eq0_, VALUE) #define metamacro_if_eq0_0(...) __VA_ARGS__ metamacro_consume_ #define metamacro_if_eq0_1(...) metamacro_expand_ #define metamacro_if_eq0_2(...) metamacro_expand_ #define metamacro_if_eq0_3(...) metamacro_expand_ #define metamacro_if_eq0_4(...) metamacro_expand_ #define metamacro_if_eq0_5(...) metamacro_expand_ #define metamacro_if_eq0_6(...) metamacro_expand_ #define metamacro_if_eq0_7(...) metamacro_expand_ #define metamacro_if_eq0_8(...) metamacro_expand_ #define metamacro_if_eq0_9(...) metamacro_expand_ #define metamacro_if_eq0_10(...) metamacro_expand_ #define metamacro_if_eq0_11(...) metamacro_expand_ #define metamacro_if_eq0_12(...) metamacro_expand_ #define metamacro_if_eq0_13(...) metamacro_expand_ #define metamacro_if_eq0_14(...) metamacro_expand_ #define metamacro_if_eq0_15(...) metamacro_expand_ #define metamacro_if_eq0_16(...) metamacro_expand_ #define metamacro_if_eq0_17(...) metamacro_expand_ #define metamacro_if_eq0_18(...) metamacro_expand_ #define metamacro_if_eq0_19(...) metamacro_expand_ #define metamacro_if_eq0_20(...) metamacro_expand_ #define metamacro_if_eq1(VALUE) metamacro_if_eq0(metamacro_dec(VALUE)) #define metamacro_if_eq2(VALUE) metamacro_if_eq1(metamacro_dec(VALUE)) #define metamacro_if_eq3(VALUE) metamacro_if_eq2(metamacro_dec(VALUE)) #define metamacro_if_eq4(VALUE) metamacro_if_eq3(metamacro_dec(VALUE)) #define metamacro_if_eq5(VALUE) metamacro_if_eq4(metamacro_dec(VALUE)) #define metamacro_if_eq6(VALUE) metamacro_if_eq5(metamacro_dec(VALUE)) #define metamacro_if_eq7(VALUE) metamacro_if_eq6(metamacro_dec(VALUE)) #define metamacro_if_eq8(VALUE) metamacro_if_eq7(metamacro_dec(VALUE)) #define metamacro_if_eq9(VALUE) metamacro_if_eq8(metamacro_dec(VALUE)) #define metamacro_if_eq10(VALUE) metamacro_if_eq9(metamacro_dec(VALUE)) #define metamacro_if_eq11(VALUE) metamacro_if_eq10(metamacro_dec(VALUE)) #define metamacro_if_eq12(VALUE) metamacro_if_eq11(metamacro_dec(VALUE)) #define metamacro_if_eq13(VALUE) metamacro_if_eq12(metamacro_dec(VALUE)) #define metamacro_if_eq14(VALUE) metamacro_if_eq13(metamacro_dec(VALUE)) #define metamacro_if_eq15(VALUE) metamacro_if_eq14(metamacro_dec(VALUE)) #define metamacro_if_eq16(VALUE) metamacro_if_eq15(metamacro_dec(VALUE)) #define metamacro_if_eq17(VALUE) metamacro_if_eq16(metamacro_dec(VALUE)) #define metamacro_if_eq18(VALUE) metamacro_if_eq17(metamacro_dec(VALUE)) #define metamacro_if_eq19(VALUE) metamacro_if_eq18(metamacro_dec(VALUE)) #define metamacro_if_eq20(VALUE) metamacro_if_eq19(metamacro_dec(VALUE)) // metamacro_if_eq_recursive expansions #define metamacro_if_eq_recursive0(VALUE) \ metamacro_concat(metamacro_if_eq_recursive0_, VALUE) #define metamacro_if_eq_recursive0_0(...) __VA_ARGS__ metamacro_consume_ #define metamacro_if_eq_recursive0_1(...) metamacro_expand_ #define metamacro_if_eq_recursive0_2(...) metamacro_expand_ #define metamacro_if_eq_recursive0_3(...) metamacro_expand_ #define metamacro_if_eq_recursive0_4(...) metamacro_expand_ #define metamacro_if_eq_recursive0_5(...) metamacro_expand_ #define metamacro_if_eq_recursive0_6(...) metamacro_expand_ #define metamacro_if_eq_recursive0_7(...) metamacro_expand_ #define metamacro_if_eq_recursive0_8(...) metamacro_expand_ #define metamacro_if_eq_recursive0_9(...) metamacro_expand_ #define metamacro_if_eq_recursive0_10(...) metamacro_expand_ #define metamacro_if_eq_recursive0_11(...) metamacro_expand_ #define metamacro_if_eq_recursive0_12(...) metamacro_expand_ #define metamacro_if_eq_recursive0_13(...) metamacro_expand_ #define metamacro_if_eq_recursive0_14(...) metamacro_expand_ #define metamacro_if_eq_recursive0_15(...) metamacro_expand_ #define metamacro_if_eq_recursive0_16(...) metamacro_expand_ #define metamacro_if_eq_recursive0_17(...) metamacro_expand_ #define metamacro_if_eq_recursive0_18(...) metamacro_expand_ #define metamacro_if_eq_recursive0_19(...) metamacro_expand_ #define metamacro_if_eq_recursive0_20(...) metamacro_expand_ #define metamacro_if_eq_recursive1(VALUE) metamacro_if_eq_recursive0(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive2(VALUE) metamacro_if_eq_recursive1(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive3(VALUE) metamacro_if_eq_recursive2(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive4(VALUE) metamacro_if_eq_recursive3(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive5(VALUE) metamacro_if_eq_recursive4(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive6(VALUE) metamacro_if_eq_recursive5(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive7(VALUE) metamacro_if_eq_recursive6(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive8(VALUE) metamacro_if_eq_recursive7(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive9(VALUE) metamacro_if_eq_recursive8(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive10(VALUE) metamacro_if_eq_recursive9(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive11(VALUE) metamacro_if_eq_recursive10(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive12(VALUE) metamacro_if_eq_recursive11(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive13(VALUE) metamacro_if_eq_recursive12(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive14(VALUE) metamacro_if_eq_recursive13(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive15(VALUE) metamacro_if_eq_recursive14(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive16(VALUE) metamacro_if_eq_recursive15(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive17(VALUE) metamacro_if_eq_recursive16(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive18(VALUE) metamacro_if_eq_recursive17(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive19(VALUE) metamacro_if_eq_recursive18(metamacro_dec(VALUE)) #define metamacro_if_eq_recursive20(VALUE) metamacro_if_eq_recursive19(metamacro_dec(VALUE)) // metamacro_take expansions #define metamacro_take0(...) #define metamacro_take1(...) metamacro_head(__VA_ARGS__) #define metamacro_take2(...) metamacro_head(__VA_ARGS__), metamacro_take1(metamacro_tail(__VA_ARGS__)) #define metamacro_take3(...) metamacro_head(__VA_ARGS__), metamacro_take2(metamacro_tail(__VA_ARGS__)) #define metamacro_take4(...) metamacro_head(__VA_ARGS__), metamacro_take3(metamacro_tail(__VA_ARGS__)) #define metamacro_take5(...) metamacro_head(__VA_ARGS__), metamacro_take4(metamacro_tail(__VA_ARGS__)) #define metamacro_take6(...) metamacro_head(__VA_ARGS__), metamacro_take5(metamacro_tail(__VA_ARGS__)) #define metamacro_take7(...) metamacro_head(__VA_ARGS__), metamacro_take6(metamacro_tail(__VA_ARGS__)) #define metamacro_take8(...) metamacro_head(__VA_ARGS__), metamacro_take7(metamacro_tail(__VA_ARGS__)) #define metamacro_take9(...) metamacro_head(__VA_ARGS__), metamacro_take8(metamacro_tail(__VA_ARGS__)) #define metamacro_take10(...) metamacro_head(__VA_ARGS__), metamacro_take9(metamacro_tail(__VA_ARGS__)) #define metamacro_take11(...) metamacro_head(__VA_ARGS__), metamacro_take10(metamacro_tail(__VA_ARGS__)) #define metamacro_take12(...) metamacro_head(__VA_ARGS__), metamacro_take11(metamacro_tail(__VA_ARGS__)) #define metamacro_take13(...) metamacro_head(__VA_ARGS__), metamacro_take12(metamacro_tail(__VA_ARGS__)) #define metamacro_take14(...) metamacro_head(__VA_ARGS__), metamacro_take13(metamacro_tail(__VA_ARGS__)) #define metamacro_take15(...) metamacro_head(__VA_ARGS__), metamacro_take14(metamacro_tail(__VA_ARGS__)) #define metamacro_take16(...) metamacro_head(__VA_ARGS__), metamacro_take15(metamacro_tail(__VA_ARGS__)) #define metamacro_take17(...) metamacro_head(__VA_ARGS__), metamacro_take16(metamacro_tail(__VA_ARGS__)) #define metamacro_take18(...) metamacro_head(__VA_ARGS__), metamacro_take17(metamacro_tail(__VA_ARGS__)) #define metamacro_take19(...) metamacro_head(__VA_ARGS__), metamacro_take18(metamacro_tail(__VA_ARGS__)) #define metamacro_take20(...) metamacro_head(__VA_ARGS__), metamacro_take19(metamacro_tail(__VA_ARGS__)) // metamacro_drop expansions #define metamacro_drop0(...) __VA_ARGS__ #define metamacro_drop1(...) metamacro_tail(__VA_ARGS__) #define metamacro_drop2(...) metamacro_drop1(metamacro_tail(__VA_ARGS__)) #define metamacro_drop3(...) metamacro_drop2(metamacro_tail(__VA_ARGS__)) #define metamacro_drop4(...) metamacro_drop3(metamacro_tail(__VA_ARGS__)) #define metamacro_drop5(...) metamacro_drop4(metamacro_tail(__VA_ARGS__)) #define metamacro_drop6(...) metamacro_drop5(metamacro_tail(__VA_ARGS__)) #define metamacro_drop7(...) metamacro_drop6(metamacro_tail(__VA_ARGS__)) #define metamacro_drop8(...) metamacro_drop7(metamacro_tail(__VA_ARGS__)) #define metamacro_drop9(...) metamacro_drop8(metamacro_tail(__VA_ARGS__)) #define metamacro_drop10(...) metamacro_drop9(metamacro_tail(__VA_ARGS__)) #define metamacro_drop11(...) metamacro_drop10(metamacro_tail(__VA_ARGS__)) #define metamacro_drop12(...) metamacro_drop11(metamacro_tail(__VA_ARGS__)) #define metamacro_drop13(...) metamacro_drop12(metamacro_tail(__VA_ARGS__)) #define metamacro_drop14(...) metamacro_drop13(metamacro_tail(__VA_ARGS__)) #define metamacro_drop15(...) metamacro_drop14(metamacro_tail(__VA_ARGS__)) #define metamacro_drop16(...) metamacro_drop15(metamacro_tail(__VA_ARGS__)) #define metamacro_drop17(...) metamacro_drop16(metamacro_tail(__VA_ARGS__)) #define metamacro_drop18(...) metamacro_drop17(metamacro_tail(__VA_ARGS__)) #define metamacro_drop19(...) metamacro_drop18(metamacro_tail(__VA_ARGS__)) #define metamacro_drop20(...) metamacro_drop19(metamacro_tail(__VA_ARGS__)) #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h ================================================ // // ReactiveCocoa.h // ReactiveCocoa // // Created by Josh Abernathy on 3/5/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import //! Project version number for ReactiveCocoa. FOUNDATION_EXPORT double ReactiveCocoaVersionNumber; //! Project version string for ReactiveCocoa. FOUNDATION_EXPORT const unsigned char ReactiveCocoaVersionString[]; #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #if TARGET_OS_WATCH #elif TARGET_OS_IOS || TARGET_OS_TV #import #import #import #import #import #import #import #import #import #import #if TARGET_OS_IOS #import #import #import #import #import #import #import #import #import #import #endif #elif TARGET_OS_MAC #import #import #import #import #import #endif ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Action.swift ================================================ import Foundation import enum Result.NoError /// Represents an action that will do some work when executed with a value of /// type `Input`, then return zero or more values of type `Output` and/or fail /// with an error of type `Error`. If no failure should be possible, NoError can /// be specified for the `Error` parameter. /// /// Actions enforce serial execution. Any attempt to execute an action multiple /// times concurrently will return an error. public final class Action { private let executeClosure: Input -> SignalProducer private let eventsObserver: Signal, NoError>.Observer /// A signal of all events generated from applications of the Action. /// /// In other words, this will send every `Event` from every signal generated /// by each SignalProducer returned from apply(). public let events: Signal, NoError> /// A signal of all values generated from applications of the Action. /// /// In other words, this will send every value from every signal generated /// by each SignalProducer returned from apply(). public let values: Signal /// A signal of all errors generated from applications of the Action. /// /// In other words, this will send errors from every signal generated by /// each SignalProducer returned from apply(). public let errors: Signal /// Whether the action is currently executing. public var executing: AnyProperty { return AnyProperty(_executing) } private let _executing: MutableProperty = MutableProperty(false) /// Whether the action is currently enabled. public var enabled: AnyProperty { return AnyProperty(_enabled) } private let _enabled: MutableProperty = MutableProperty(false) /// Whether the instantiator of this action wants it to be enabled. private let userEnabled: AnyProperty /// This queue is used for read-modify-write operations on the `_executing` /// property. private let executingQueue = dispatch_queue_create("org.reactivecocoa.ReactiveCocoa.Action.executingQueue", DISPATCH_QUEUE_SERIAL) /// Whether the action should be enabled for the given combination of user /// enabledness and executing status. private static func shouldBeEnabled(userEnabled userEnabled: Bool, executing: Bool) -> Bool { return userEnabled && !executing } /// Initializes an action that will be conditionally enabled, and creates a /// SignalProducer for each input. /// /// - parameters: /// - enabledIf: Boolean property that shows whether the action is /// enabled. /// - execute: A closure that returns the signal producer returned by /// calling `apply(Input)` on the action. public init(enabledIf: P, _ execute: Input -> SignalProducer) { executeClosure = execute userEnabled = AnyProperty(enabledIf) (events, eventsObserver) = Signal, NoError>.pipe() values = events.map { $0.value }.ignoreNil() errors = events.map { $0.error }.ignoreNil() _enabled <~ enabledIf.producer .combineLatestWith(_executing.producer) .map(Action.shouldBeEnabled) } /// Initializes an action that will be enabled by default, and creates a /// SignalProducer for each input. /// /// - parameters: /// - execute: A closure that returns the signal producer returned by /// calling `apply(Input)` on the action. public convenience init(_ execute: Input -> SignalProducer) { self.init(enabledIf: ConstantProperty(true), execute) } deinit { eventsObserver.sendCompleted() } /// Creates a SignalProducer that, when started, will execute the action /// with the given input, then forward the results upon the produced Signal. /// /// - note: If the action is disabled when the returned SignalProducer is /// started, the produced signal will send `ActionError.NotEnabled`, /// and nothing will be sent upon `values` or `errors` for that /// particular signal. /// /// - parameters: /// - input: A value that will be passed to the closure creating the signal /// producer. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func apply(input: Input) -> SignalProducer> { return SignalProducer { observer, disposable in var startedExecuting = false dispatch_sync(self.executingQueue) { if self._enabled.value { self._executing.value = true startedExecuting = true } } if !startedExecuting { observer.sendFailed(.NotEnabled) return } self.executeClosure(input).startWithSignal { signal, signalDisposable in disposable.addDisposable(signalDisposable) signal.observe { event in observer.action(event.mapError(ActionError.ProducerError)) self.eventsObserver.sendNext(event) } } disposable += { self._executing.value = false } } } } public protocol ActionType { /// The type of argument to apply the action to. associatedtype Input /// The type of values returned by the action. associatedtype Output /// The type of error when the action fails. If errors aren't possible then /// `NoError` can be used. associatedtype Error: ErrorType /// Whether the action is currently enabled. var enabled: AnyProperty { get } /// Extracts an action from the receiver. var action: Action { get } /// Creates a SignalProducer that, when started, will execute the action /// with the given input, then forward the results upon the produced Signal. /// /// - note: If the action is disabled when the returned SignalProducer is /// started, the produced signal will send `ActionError.NotEnabled`, /// and nothing will be sent upon `values` or `errors` for that /// particular signal. /// /// - parameters: /// - input: A value that will be passed to the closure creating the signal /// producer. func apply(input: Input) -> SignalProducer> } extension Action: ActionType { public var action: Action { return self } } /// The type of error that can occur from Action.apply, where `Error` is the /// type of error that can be generated by the specific Action instance. public enum ActionError: ErrorType { /// The producer returned from apply() was started while the Action was /// disabled. case NotEnabled /// The producer returned from apply() sent the given error. case ProducerError(Error) } public func == (lhs: ActionError, rhs: ActionError) -> Bool { switch (lhs, rhs) { case (.NotEnabled, .NotEnabled): return true case let (.ProducerError(left), .ProducerError(right)): return left == right default: return false } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Atomic.swift ================================================ // // Atomic.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-06-10. // Copyright (c) 2014 GitHub. All rights reserved. // import Foundation /// An atomic variable. public final class Atomic { private var mutex = pthread_mutex_t() private var _value: Value /// Atomically get or set the value of the variable. public var value: Value { get { return withValue { $0 } } set(newValue) { modify { _ in newValue } } } /// Initialize the variable with the given initial value. /// /// - parameters: /// - value: Initial value for `self`. public init(_ value: Value) { _value = value let result = pthread_mutex_init(&mutex, nil) assert(result == 0, "Failed to initialize mutex with error \(result).") } deinit { let result = pthread_mutex_destroy(&mutex) assert(result == 0, "Failed to destroy mutex with error \(result).") } private func lock() { let result = pthread_mutex_lock(&mutex) assert(result == 0, "Failed to lock \(self) with error \(result).") } private func unlock() { let result = pthread_mutex_unlock(&mutex) assert(result == 0, "Failed to unlock \(self) with error \(result).") } /// Atomically replace the contents of the variable. /// /// - parameters: /// - newValue: A new value for the variable. /// /// - returns: The old value. public func swap(newValue: Value) -> Value { return modify { _ in newValue } } /// Atomically modify the variable. /// /// - parameters: /// - action: A closure that takes the current value. /// /// - returns: The old value. public func modify(@noescape action: (Value) throws -> Value) rethrows -> Value { return try withValue { value in _value = try action(value) return value } } /// Atomically perform an arbitrary action using the current value of the /// variable. /// /// - parameters: /// - action: A closure that takes the current value. /// /// - returns: The result of the action. public func withValue(@noescape action: (Value) throws -> Result) rethrows -> Result { lock() defer { unlock() } return try action(_value) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Bag.swift ================================================ // // Bag.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-10. // Copyright (c) 2014 GitHub. All rights reserved. // /// A uniquely identifying token for removing a value that was inserted into a /// Bag. public final class RemovalToken { private var identifier: UInt? private init(identifier: UInt) { self.identifier = identifier } } /// An unordered, non-unique collection of values of type `Element`. public struct Bag { private var elements: [BagElement] = [] private var currentIdentifier: UInt = 0 public init() { } /// Insert the given value into `self`, and return a token that can /// later be passed to `removeValueForToken()`. /// /// - parameters: /// - value: A value that will be inserted. public mutating func insert(value: Element) -> RemovalToken { let (nextIdentifier, overflow) = UInt.addWithOverflow(currentIdentifier, 1) if overflow { reindex() } let token = RemovalToken(identifier: currentIdentifier) let element = BagElement(value: value, identifier: currentIdentifier, token: token) elements.append(element) currentIdentifier = nextIdentifier return token } /// Remove a value, given the token returned from `insert()`. /// /// - note: If the value has already been removed, nothing happens. /// /// - parameters: /// - token: A token returned from a call to `insert()`. public mutating func removeValueForToken(token: RemovalToken) { if let identifier = token.identifier { // Removal is more likely for recent objects than old ones. for i in elements.indices.reverse() { if elements[i].identifier == identifier { elements.removeAtIndex(i) token.identifier = nil break } } } } /// In the event of an identifier overflow (highly, highly unlikely), reset /// all current identifiers to reclaim a contiguous set of available /// identifiers for the future. private mutating func reindex() { for i in elements.indices { currentIdentifier = UInt(i) elements[i].identifier = currentIdentifier elements[i].token.identifier = currentIdentifier } } } extension Bag: CollectionType { public typealias Index = Array.Index public var startIndex: Index { return elements.startIndex } public var endIndex: Index { return elements.endIndex } public subscript(index: Index) -> Element { return elements[index].value } } private struct BagElement { let value: Value var identifier: UInt let token: RemovalToken } extension BagElement: CustomStringConvertible { var description: String { return "BagElement(\(value))" } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/CocoaAction.swift ================================================ import Foundation /// Wraps an Action for use by a GUI control (such as `NSControl` or /// `UIControl`), with KVO, or with Cocoa Bindings. public final class CocoaAction: NSObject { /// The selector that a caller should invoke upon a CocoaAction in order to /// execute it. public static let selector: Selector = #selector(CocoaAction.execute(_:)) /// Whether the action is enabled. /// /// This property will only change on the main thread, and will generate a /// KVO notification for every change. public private(set) var enabled: Bool = false /// Whether the action is executing. /// /// This property will only change on the main thread, and will generate a /// KVO notification for every change. public private(set) var executing: Bool = false private let _execute: AnyObject? -> Void private let disposable = CompositeDisposable() /// Initializes a Cocoa action that will invoke the given Action by /// transforming the object given to execute(). /// /// - note: You must cast the passed in object to the control type you need /// since there is no way to know where this cocoa action will be /// added as a target. /// /// - parameters: /// - action: Executable action. /// - inputTransform: Closure that accepts the UI control performing the /// action and returns a value (e.g. /// `(UISwitch) -> (Bool)` to reflect whether a provided /// switch is currently on. public init(_ action: Action, _ inputTransform: AnyObject? -> Input) { _execute = { input in let producer = action.apply(inputTransform(input)) producer.start() } super.init() disposable += action.enabled.producer .observeOn(UIScheduler()) .startWithNext { [weak self] value in self?.willChangeValueForKey("enabled") self?.enabled = value self?.didChangeValueForKey("enabled") } disposable += action.executing.producer .observeOn(UIScheduler()) .startWithNext { [weak self] value in self?.willChangeValueForKey("executing") self?.executing = value self?.didChangeValueForKey("executing") } } /// Initializes a Cocoa action that will invoke the given Action by always /// providing the given input. /// /// - parameters: /// - action: Executable action. /// - input: A value given as input to the action. public convenience init(_ action: Action, input: Input) { self.init(action, { _ in input }) } deinit { disposable.dispose() } /// Attempts to execute the underlying action with the given input, subject /// to the behavior described by the initializer that was used. /// /// - parameters: /// - input: A value for the action passed during initialization. @IBAction public func execute(input: AnyObject?) { _execute(input) } public override class func automaticallyNotifiesObserversForKey(key: String) -> Bool { return false } } extension Action { /// A UI bindable `CocoaAction`. /// /// - warning: The default behavior force casts the `AnyObject?` input to /// match the action's `Input` type. This makes it unsafe for use /// when the action is parameterized for something like `Void` /// input. In those cases, explicitly assign a value to this /// property that transforms the input to suit your needs. public var unsafeCocoaAction: CocoaAction { return CocoaAction(self) { $0 as! Input } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Disposable.swift ================================================ // // Disposable.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-06-02. // Copyright (c) 2014 GitHub. All rights reserved. // /// Represents something that can be “disposed,” usually associated with freeing /// resources or canceling work. public protocol Disposable: class { /// Whether this disposable has been disposed already. var disposed: Bool { get } /// Method for disposing of resources when appropriate. func dispose() } /// A disposable that only flips `disposed` upon disposal, and performs no other /// work. public final class SimpleDisposable: Disposable { private let _disposed = Atomic(false) public var disposed: Bool { return _disposed.value } public init() {} public func dispose() { _disposed.value = true } } /// A disposable that will run an action upon disposal. public final class ActionDisposable: Disposable { private let action: Atomic<(() -> Void)?> public var disposed: Bool { return action.value == nil } /// Initialize the disposable to run the given action upon disposal. /// /// - parameters: /// - action: A closure to run when calling `dispose()`. public init(action: () -> Void) { self.action = Atomic(action) } public func dispose() { let oldAction = action.swap(nil) oldAction?() } } /// A disposable that will dispose of any number of other disposables. public final class CompositeDisposable: Disposable { private let disposables: Atomic?> /// Represents a handle to a disposable previously added to a /// CompositeDisposable. public final class DisposableHandle { private let bagToken: Atomic private weak var disposable: CompositeDisposable? private static let empty = DisposableHandle() private init() { self.bagToken = Atomic(nil) } private init(bagToken: RemovalToken, disposable: CompositeDisposable) { self.bagToken = Atomic(bagToken) self.disposable = disposable } /// Remove the pointed-to disposable from its `CompositeDisposable`. /// /// - note: This is useful to minimize memory growth, by removing /// disposables that are no longer needed. public func remove() { if let token = bagToken.swap(nil) { disposable?.disposables.modify { bag in guard var bag = bag else { return nil } bag.removeValueForToken(token) return bag } } } } public var disposed: Bool { return disposables.value == nil } /// Initialize a `CompositeDisposable` containing the given sequence of /// disposables. /// /// - parameters: /// - disposables: A collection of objects conforming to the `Disposable` /// protocol public init(_ disposables: S) { var bag: Bag = Bag() for disposable in disposables { bag.insert(disposable) } self.disposables = Atomic(bag) } /// Initialize a `CompositeDisposable` containing the given sequence of /// disposables. /// /// - parameters: /// - disposables: A collection of objects conforming to the `Disposable` /// protocol public convenience init(_ disposables: S) { self.init(disposables.flatMap { $0 }) } /// Initializes an empty `CompositeDisposable`. public convenience init() { self.init([Disposable]()) } public func dispose() { if let ds = disposables.swap(nil) { for d in ds.reverse() { d.dispose() } } } /// Add the given disposable to the list, then return a handle which can /// be used to opaquely remove the disposable later (if desired). /// /// - parameters: /// - d: Optional disposable. /// /// - returns: An instance of `DisposableHandle` that can be used to /// opaquely remove the disposable later (if desired). public func addDisposable(d: Disposable?) -> DisposableHandle { guard let d = d else { return DisposableHandle.empty } var handle: DisposableHandle? = nil disposables.modify { ds in guard var ds = ds else { return nil } let token = ds.insert(d) handle = DisposableHandle(bagToken: token, disposable: self) return ds } if let handle = handle { return handle } else { d.dispose() return DisposableHandle.empty } } /// Add an ActionDisposable to the list. /// /// - parameters: /// - action: A closure that will be invoked when `dispose()` is called. /// /// - returns: An instance of `DisposableHandle` that can be used to /// opaquely remove the disposable later (if desired). public func addDisposable(action: () -> Void) -> DisposableHandle { return addDisposable(ActionDisposable(action: action)) } } /// A disposable that, upon deinitialization, will automatically dispose of /// another disposable. public final class ScopedDisposable: Disposable { /// The disposable which will be disposed when the ScopedDisposable /// deinitializes. public let innerDisposable: Disposable public var disposed: Bool { return innerDisposable.disposed } /// Initialize the receiver to dispose of the argument upon /// deinitialization. /// /// - parameters: /// - disposable: A disposable to dispose of when deinitializing. public init(_ disposable: Disposable) { innerDisposable = disposable } deinit { dispose() } public func dispose() { innerDisposable.dispose() } } /// A disposable that will optionally dispose of another disposable. public final class SerialDisposable: Disposable { private struct State { var innerDisposable: Disposable? = nil var disposed = false } private let state = Atomic(State()) public var disposed: Bool { return state.value.disposed } /// The inner disposable to dispose of. /// /// Whenever this property is set (even to the same value!), the previous /// disposable is automatically disposed. public var innerDisposable: Disposable? { get { return state.value.innerDisposable } set(d) { let oldState = state.modify { state in var state = state state.innerDisposable = d return state } oldState.innerDisposable?.dispose() if oldState.disposed { d?.dispose() } } } /// Initializes the receiver to dispose of the argument when the /// SerialDisposable is disposed. /// /// - parameters: /// - disposable: Optional disposable. public init(_ disposable: Disposable? = nil) { innerDisposable = disposable } public func dispose() { let orig = state.swap(State(innerDisposable: nil, disposed: true)) orig.innerDisposable?.dispose() } } /// Adds the right-hand-side disposable to the left-hand-side /// `CompositeDisposable`. /// /// ```` /// disposable += producer /// .filter { ... } /// .map { ... } /// .start(observer) /// ```` /// /// - parameters: /// - lhs: Disposable to add to. /// - rhs: Disposable to add. /// /// - returns: An instance of `DisposableHandle` that can be used to opaquely /// remove the disposable later (if desired). public func +=(lhs: CompositeDisposable, rhs: Disposable?) -> CompositeDisposable.DisposableHandle { return lhs.addDisposable(rhs) } /// Adds the right-hand-side `ActionDisposable` to the left-hand-side /// `CompositeDisposable`. /// /// ```` /// disposable += { ... } /// ```` /// /// - parameters: /// - lhs: Disposable to add to. /// - rhs: Closure to add as a disposable. /// /// - returns: An instance of `DisposableHandle` that can be used to opaquely /// remove the disposable later (if desired). public func +=(lhs: CompositeDisposable, rhs: () -> ()) -> CompositeDisposable.DisposableHandle { return lhs.addDisposable(rhs) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/DynamicProperty.swift ================================================ import Foundation import enum Result.NoError /// Wraps a `dynamic` property, or one defined in Objective-C, using Key-Value /// Coding and Key-Value Observing. /// /// Use this class only as a last resort! `MutableProperty` is generally better /// unless KVC/KVO is required by the API you're using (for example, /// `NSOperation`). @objc public final class DynamicProperty: RACDynamicPropertySuperclass, MutablePropertyType { public typealias Value = AnyObject? private weak var object: NSObject? private let keyPath: String private var property: MutableProperty? /// The current value of the property, as read and written using Key-Value /// Coding. public var value: AnyObject? { @objc(rac_value) get { return object?.valueForKeyPath(keyPath) } @objc(setRac_value:) set(newValue) { object?.setValue(newValue, forKeyPath: keyPath) } } /// A producer that will create a Key-Value Observer for the given object, /// send its initial value then all changes over time, and then complete /// when the observed object has deallocated. /// /// - important: This only works if the object given to init() is KVO-compliant. /// Most UI controls are not! public var producer: SignalProducer { return property?.producer ?? .empty } public var signal: Signal { return property?.signal ?? .empty } /// Initializes a property that will observe and set the given key path of /// the given object. /// /// - important: `object` must support weak references! /// /// - parameters: /// - object: An object to be observed. /// - keyPath: Key path to observe on the object. public init(object: NSObject?, keyPath: String) { self.object = object self.keyPath = keyPath self.property = MutableProperty(nil) /// A DynamicProperty will stay alive as long as its object is alive. /// This is made possible by strong reference cycles. super.init() object?.rac_valuesForKeyPath(keyPath, observer: nil)? .toSignalProducer() .start { event in switch event { case let .Next(newValue): self.property?.value = newValue case let .Failed(error): fatalError("Received unexpected error from KVO signal: \(error)") case .Interrupted, .Completed: self.property = nil } } } } // MARK: Operators /// Binds a signal to a `DynamicProperty`, automatically bridging values to Objective-C. public func <~ (property: DynamicProperty, signal: S) -> Disposable { return property <~ signal.map { $0._bridgeToObjectiveC() } } /// Binds a signal producer to a `DynamicProperty`, automatically bridging values to Objective-C. public func <~ (property: DynamicProperty, producer: S) -> Disposable { return property <~ producer.map { $0._bridgeToObjectiveC() } } /// Binds `destinationProperty` to the latest values of `sourceProperty`, automatically bridging values to Objective-C. public func <~ (destinationProperty: DynamicProperty, sourceProperty: Source) -> Disposable { return destinationProperty <~ sourceProperty.producer } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Errors.swift ================================================ // // Errors.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. // /// An “error” that is impossible to construct. /// /// This can be used to describe signals or producers where errors will never /// be generated. For example, `Signal` describes a signal that /// sends integers and is guaranteed never to error out. public enum NoError: ErrorType { } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Event.swift ================================================ // // Event.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2015-01-16. // Copyright (c) 2015 GitHub. All rights reserved. // /// Represents a signal event. /// /// Signals must conform to the grammar: /// `Next* (Failed | Completed | Interrupted)?` public enum Event { /// A value provided by the signal. case Next(Value) /// The signal terminated because of an error. No further events will be /// received. case Failed(Error) /// The signal successfully terminated. No further events will be received. case Completed /// Event production on the signal has been interrupted. No further events /// will be received. /// /// - important: This event does not signify the successful or failed /// completion of the signal. case Interrupted /// Whether this event indicates signal termination (i.e., that no further /// events will be received). public var isTerminating: Bool { switch self { case .Next: return false case .Failed, .Completed, .Interrupted: return true } } /// Lift the given closure over the event's value. /// /// - important: The closure is called only on `Next` type events. /// /// - parameters: /// - f: A closure that accepts a value and returns a new value /// /// - returns: An event with function applied to a value in case `self` is a /// `Next` type of event. public func map(f: Value -> U) -> Event { switch self { case let .Next(value): return .Next(f(value)) case let .Failed(error): return .Failed(error) case .Completed: return .Completed case .Interrupted: return .Interrupted } } /// Lift the given closure over the event's error. /// /// - important: The closure is called only on `Failed` type event. /// /// - parameters: /// - f: A closure that accepts an error object and returns /// a new error object /// /// - returns: An event with function applied to an error object in case /// `self` is a `.Failed` type of event. public func mapError(f: Error -> F) -> Event { switch self { case let .Next(value): return .Next(value) case let .Failed(error): return .Failed(f(error)) case .Completed: return .Completed case .Interrupted: return .Interrupted } } /// Unwrap the contained `Next` value. public var value: Value? { if case let .Next(value) = self { return value } else { return nil } } /// Unwrap the contained `Error` value. public var error: Error? { if case let .Failed(error) = self { return error } else { return nil } } } public func == (lhs: Event, rhs: Event) -> Bool { switch (lhs, rhs) { case let (.Next(left), .Next(right)): return left == right case let (.Failed(left), .Failed(right)): return left == right case (.Completed, .Completed): return true case (.Interrupted, .Interrupted): return true default: return false } } extension Event: CustomStringConvertible { public var description: String { switch self { case let .Next(value): return "NEXT \(value)" case let .Failed(error): return "FAILED \(error)" case .Completed: return "COMPLETED" case .Interrupted: return "INTERRUPTED" } } } /// Event protocol for constraining signal extensions public protocol EventType { /// The value type of an event. associatedtype Value /// The error type of an event. If errors aren't possible then `NoError` can /// be used. associatedtype Error: ErrorType /// Extracts the event from the receiver. var event: Event { get } } extension Event: EventType { public var event: Event { return self } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/EventLogger.swift ================================================ // // EventLogger.swift // ReactiveCocoa // // Created by Rui Peres on 30/04/2016. // Copyright © 2016 GitHub. All rights reserved. // import Foundation /// A namespace for logging event types. public enum LoggingEvent { public enum Signal: String { case Next, Completed, Failed, Terminated, Disposed, Interrupted public static let allEvents: Set = [ .Next, .Completed, .Failed, .Terminated, .Disposed, .Interrupted, ] } public enum SignalProducer: String { case Started, Next, Completed, Failed, Terminated, Disposed, Interrupted public static let allEvents: Set = [ .Started, .Next, .Completed, .Failed, .Terminated, .Disposed, .Interrupted, ] } } private func defaultEventLog(identifier: String, event: String, fileName: String, functionName: String, lineNumber: Int) { print("[\(identifier)] \(event) fileName: \(fileName), functionName: \(functionName), lineNumber: \(lineNumber)") } /// A type that represents an event logging function. public typealias EventLogger = (identifier: String, event: String, fileName: String, functionName: String, lineNumber: Int) -> Void extension SignalType { /// Logs all events that the receiver sends. By default, it will print to /// the standard output. /// /// - parameters: /// - identifier: a string to identify the Signal firing events. /// - events: Types of events to log. /// - fileName: Name of the file containing the code which fired the /// event. /// - functionName: Function where event was fired. /// - lineNumber: Line number where event was fired. /// - logger: Logger that logs the events. /// /// - returns: Signal that, when observed, logs the fired events. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func logEvents(identifier identifier: String = "", events: Set = LoggingEvent.Signal.allEvents, fileName: String = #file, functionName: String = #function, lineNumber: Int = #line, logger: EventLogger = defaultEventLog) -> Signal { func log(event: LoggingEvent.Signal) -> (T -> Void)? { return event.logIfNeeded(events) { event in logger(identifier: identifier, event: event, fileName: fileName, functionName: functionName, lineNumber: lineNumber) } } return self.on( failed: log(.Failed), completed: log(.Completed), interrupted: log(.Interrupted), terminated: log(.Terminated), disposed: log(.Disposed), next: log(.Next) ) } } extension SignalProducerType { /// Logs all events that the receiver sends. By default, it will print to /// the standard output. /// /// - parameters: /// - identifier: a string to identify the SignalProducer firing events. /// - events: Types of events to log. /// - fileName: Name of the file containing the code which fired the /// event. /// - functionName: Function where event was fired. /// - lineNumber: Line number where event was fired. /// - logger: Logger that logs the events. /// /// - returns: Signal producer that, when started, logs the fired events. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func logEvents(identifier identifier: String = "", events: Set = LoggingEvent.SignalProducer.allEvents, fileName: String = #file, functionName: String = #function, lineNumber: Int = #line, logger: EventLogger = defaultEventLog) -> SignalProducer { func log(event: LoggingEvent.SignalProducer) -> (T -> Void)? { return event.logIfNeeded(events) { event in logger(identifier: identifier, event: event, fileName: fileName, functionName: functionName, lineNumber: lineNumber) } } return self.on( started: log(.Started), failed: log(.Failed), completed: log(.Completed), interrupted: log(.Interrupted), terminated: log(.Terminated), disposed: log(.Disposed), next: log(.Next) ) } } private protocol LoggingEventType: Hashable, RawRepresentable {} extension LoggingEvent.Signal: LoggingEventType {} extension LoggingEvent.SignalProducer: LoggingEventType {} private extension LoggingEventType { func logIfNeeded(events: Set, logger: String -> Void) -> (T -> Void)? { guard events.contains(self) else { return nil } return { value in if value is Void { logger("\(self.rawValue)") } else { logger("\(self.rawValue) \(value)") } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Flatten.swift ================================================ // // Flatten.swift // ReactiveCocoa // // Created by Neil Pankey on 11/30/15. // Copyright © 2015 GitHub. All rights reserved. // import enum Result.NoError /// Describes how multiple producers should be joined together. public enum FlattenStrategy: Equatable { /// The producers should be merged, so that any value received on any of the /// input producers will be forwarded immediately to the output producer. /// /// The resulting producer will complete only when all inputs have /// completed. case Merge /// The producers should be concatenated, so that their values are sent in /// the order of the producers themselves. /// /// The resulting producer will complete only when all inputs have /// completed. case Concat /// Only the events from the latest input producer should be considered for /// the output. Any producers received before that point will be disposed /// of. /// /// The resulting producer will complete only when the producer-of-producers /// and the latest producer has completed. case Latest } extension SignalType where Value: SignalProducerType, Error == Value.Error { /// Flattens the inner producers sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If `signal` or an active inner producer fails, the returned /// signal will forward that failure immediately. /// /// - note: `Interrupted` events on inner producers will be treated like /// `Completed events on inner producers. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { switch strategy { case .Merge: return self.merge() case .Concat: return self.concat() case .Latest: return self.switchToLatest() } } } extension SignalType where Value: SignalProducerType, Error == NoError { /// Flattens the inner producers sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If an active inner producer fails, the returned signal will /// forward that failure immediately. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. /// /// - parameters: /// - strategy: Strategy used when flattening signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self .promoteErrors(Value.Error.self) .flatten(strategy) } } extension SignalType where Value: SignalProducerType, Error == NoError, Value.Error == NoError { /// Flattens the inner producers sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. /// /// - parameters: /// - strategy: Strategy used when flattening signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { switch strategy { case .Merge: return self.merge() case .Concat: return self.concat() case .Latest: return self.switchToLatest() } } } extension SignalType where Value: SignalProducerType, Value.Error == NoError { /// Flattens the inner producers sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If `signal` fails, the returned signal will forward that failure /// immediately. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self.flatMap(strategy) { $0.promoteErrors(Error.self) } } } extension SignalProducerType where Value: SignalProducerType, Error == Value.Error { /// Flattens the inner producers sent upon `producer` (into a single /// producer of values), according to the semantics of the given strategy. /// /// - note: If `producer` or an active inner producer fails, the returned /// producer will forward that failure immediately. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { switch strategy { case .Merge: return self.merge() case .Concat: return self.concat() case .Latest: return self.switchToLatest() } } } extension SignalProducerType where Value: SignalProducerType, Error == NoError { /// Flattens the inner producers sent upon `producer` (into a single /// producer of values), according to the semantics of the given strategy. /// /// - note: If an active inner producer fails, the returned producer will /// forward that failure immediately. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self .promoteErrors(Value.Error.self) .flatten(strategy) } } extension SignalProducerType where Value: SignalProducerType, Error == NoError, Value.Error == NoError { /// Flattens the inner producers sent upon `producer` (into a single /// producer of values), according to the semantics of the given strategy. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { switch strategy { case .Merge: return self.merge() case .Concat: return self.concat() case .Latest: return self.switchToLatest() } } } extension SignalProducerType where Value: SignalProducerType, Value.Error == NoError { /// Flattens the inner producers sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If `signal` fails, the returned signal will forward that failure /// immediately. /// /// - warning: `Interrupted` events on inner producers will be treated like /// `Completed` events on inner producers. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self.flatMap(strategy) { $0.promoteErrors(Error.self) } } } extension SignalType where Value: SignalType, Error == Value.Error { /// Flattens the inner signals sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If `signal` or an active inner signal emits an error, the /// returned signal will forward that error immediately. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self .map(SignalProducer.init) .flatten(strategy) } } extension SignalType where Value: SignalType, Error == NoError { /// Flattens the inner signals sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If an active inner signal emits an error, the returned signal /// will forward that error immediately. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self .promoteErrors(Value.Error.self) .flatten(strategy) } } extension SignalType where Value: SignalType, Error == NoError, Value.Error == NoError { /// Flattens the inner signals sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self .map(SignalProducer.init) .flatten(strategy) } } extension SignalType where Value: SignalType, Value.Error == NoError { /// Flattens the inner signals sent upon `signal` (into a single signal of /// values), according to the semantics of the given strategy. /// /// - note: If `signal` emits an error, the returned signal will forward /// that error immediately. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self.flatMap(strategy) { $0.promoteErrors(Error.self) } } } extension SignalType where Value: SequenceType, Error == NoError { /// Flattens the `sequence` value sent by `signal` according to /// the semantics of the given strategy. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> Signal { return self.flatMap(strategy) { .init(values: $0) } } } extension SignalProducerType where Value: SignalType, Error == Value.Error { /// Flattens the inner signals sent upon `producer` (into a single producer /// of values), according to the semantics of the given strategy. /// /// - note: If `producer` or an active inner signal emits an error, the /// returned producer will forward that error immediately. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self .map(SignalProducer.init) .flatten(strategy) } } extension SignalProducerType where Value: SignalType, Error == NoError { /// Flattens the inner signals sent upon `producer` (into a single producer /// of values), according to the semantics of the given strategy. /// /// - note: If an active inner signal emits an error, the returned producer /// will forward that error immediately. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self .promoteErrors(Value.Error.self) .flatten(strategy) } } extension SignalProducerType where Value: SignalType, Error == NoError, Value.Error == NoError { /// Flattens the inner signals sent upon `producer` (into a single producer /// of values), according to the semantics of the given strategy. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self .map(SignalProducer.init) .flatten(strategy) } } extension SignalProducerType where Value: SignalType, Value.Error == NoError { /// Flattens the inner signals sent upon `producer` (into a single producer /// of values), according to the semantics of the given strategy. /// /// - note: If `producer` emits an error, the returned producer will forward /// that error immediately. /// /// - warning: `Interrupted` events on inner signals will be treated like /// `Completed` events on inner signals. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self.flatMap(strategy) { $0.promoteErrors(Error.self) } } } extension SignalProducerType where Value: SequenceType, Error == NoError { /// Flattens the `sequence` value sent by `producer` according to /// the semantics of the given strategy. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatten(strategy: FlattenStrategy) -> SignalProducer { return self.flatMap(strategy) { .init(values: $0) } } } extension SignalType where Value: SignalProducerType, Error == Value.Error { /// Returns a signal which sends all the values from producer signal emitted /// from `signal`, waiting until each inner producer completes before /// beginning to send the values from the next inner producer. /// /// - note: If any of the inner producers fail, the returned signal will /// forward that failure immediately /// /// - note: The returned signal completes only when `signal` and all /// producers emitted from `signal` complete. private func concat() -> Signal { return Signal { relayObserver in let disposable = CompositeDisposable() let relayDisposable = CompositeDisposable() disposable += relayDisposable disposable += self.observeConcat(relayObserver, relayDisposable) return disposable } } private func observeConcat(observer: Observer, _ disposable: CompositeDisposable? = nil) -> Disposable? { let state = ConcatState(observer: observer, disposable: disposable) return self.observe { event in switch event { case let .Next(value): state.enqueueSignalProducer(value.producer) case let .Failed(error): observer.sendFailed(error) case .Completed: // Add one last producer to the queue, whose sole job is to // "turn out the lights" by completing `observer`. state.enqueueSignalProducer(SignalProducer.empty.on(completed: { observer.sendCompleted() })) case .Interrupted: observer.sendInterrupted() } } } } extension SignalProducerType where Value: SignalProducerType, Error == Value.Error { /// Returns a producer which sends all the values from each producer emitted /// from `producer`, waiting until each inner producer completes before /// beginning to send the values from the next inner producer. /// /// - note: If any of the inner producers emit an error, the returned /// producer will emit that error. /// /// - note: The returned producer completes only when `producer` and all /// producers emitted from `producer` complete. private func concat() -> SignalProducer { return SignalProducer { observer, disposable in self.startWithSignal { signal, signalDisposable in disposable += signalDisposable signal.observeConcat(observer, disposable) } } } } extension SignalProducerType { /// `concat`s `next` onto `self`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func concat(next: SignalProducer) -> SignalProducer { return SignalProducer, Error>(values: [ self.producer, next ]).flatten(.Concat) } /// `concat`s `value` onto `self`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func concat(value value: Value) -> SignalProducer { return self.concat(SignalProducer(value: value)) } /// `concat`s `self` onto initial `previous`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func prefix(previous: P) -> SignalProducer { return previous.concat(self.producer) } /// `concat`s `self` onto initial `value`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func prefix(value value: Value) -> SignalProducer { return self.prefix(SignalProducer(value: value)) } } private final class ConcatState { /// The observer of a started `concat` producer. let observer: Observer /// The top level disposable of a started `concat` producer. let disposable: CompositeDisposable? /// The active producer, if any, and the producers waiting to be started. let queuedSignalProducers: Atomic<[SignalProducer]> = Atomic([]) init(observer: Signal.Observer, disposable: CompositeDisposable?) { self.observer = observer self.disposable = disposable } func enqueueSignalProducer(producer: SignalProducer) { if let d = disposable where d.disposed { return } var shouldStart = true queuedSignalProducers.modify { // An empty queue means the concat is idle, ready & waiting to start // the next producer. var queue = $0 shouldStart = queue.isEmpty queue.append(producer) return queue } if shouldStart { startNextSignalProducer(producer) } } func dequeueSignalProducer() -> SignalProducer? { if let d = disposable where d.disposed { return nil } var nextSignalProducer: SignalProducer? queuedSignalProducers.modify { // Active producers remain in the queue until completed. Since // dequeueing happens at completion of the active producer, the // first producer in the queue can be removed. var queue = $0 if !queue.isEmpty { queue.removeAtIndex(0) } nextSignalProducer = queue.first return queue } return nextSignalProducer } /// Subscribes to the given signal producer. func startNextSignalProducer(signalProducer: SignalProducer) { signalProducer.startWithSignal { signal, disposable in let handle = self.disposable?.addDisposable(disposable) ?? nil signal.observe { event in switch event { case .Completed, .Interrupted: handle?.remove() if let nextSignalProducer = self.dequeueSignalProducer() { self.startNextSignalProducer(nextSignalProducer) } case .Next, .Failed: self.observer.action(event) } } } } } extension SignalType where Value: SignalProducerType, Error == Value.Error { /// Merges a `signal` of SignalProducers down into a single signal, biased /// toward the producer added earlier. Returns a Signal that will forward /// events from the inner producers as they arrive. private func merge() -> Signal { return Signal { relayObserver in let disposable = CompositeDisposable() let relayDisposable = CompositeDisposable() disposable += relayDisposable disposable += self.observeMerge(relayObserver, relayDisposable) return disposable } } private func observeMerge(observer: Observer, _ disposable: CompositeDisposable) -> Disposable? { let inFlight = Atomic(1) let decrementInFlight = { let orig = inFlight.modify { $0 - 1 } if orig == 1 { observer.sendCompleted() } } return self.observe { event in switch event { case let .Next(producer): producer.startWithSignal { innerSignal, innerDisposable in inFlight.modify { $0 + 1 } let handle = disposable.addDisposable(innerDisposable) innerSignal.observe { event in switch event { case .Completed, .Interrupted: handle.remove() decrementInFlight() case .Next, .Failed: observer.action(event) } } } case let .Failed(error): observer.sendFailed(error) case .Completed: decrementInFlight() case .Interrupted: observer.sendInterrupted() } } } } extension SignalProducerType where Value: SignalProducerType, Error == Value.Error { /// Merges a `signal` of SignalProducers down into a single signal, biased /// toward the producer added earlier. Returns a Signal that will forward /// events from the inner producers as they arrive. private func merge() -> SignalProducer { return SignalProducer { relayObserver, disposable in self.startWithSignal { signal, signalDisposable in disposable.addDisposable(signalDisposable) signal.observeMerge(relayObserver, disposable) } } } } extension SignalType { /// Merges the given signals into a single `Signal` that will emit all /// values from each of them, and complete when all of them have completed. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public static func merge(signals: Seq) -> Signal { let producer = SignalProducer(values: signals) var result: Signal! producer.startWithSignal { signal, _ in result = signal.flatten(.Merge) } return result } /// Merges the given signals into a single `Signal` that will emit all /// values from each of them, and complete when all of them have completed. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public static func merge(signals: S...) -> Signal { return Signal.merge(signals) } } extension SignalProducerType { /// Merges the given producers into a single `SignalProducer` that will emit /// all values from each of them, and complete when all of them have /// completed. @warn_unused_result(message="Did you forget to call `start` on the producer?") public static func merge(producers: Seq) -> SignalProducer { return SignalProducer(values: producers).flatten(.Merge) } /// Merges the given producers into a single `SignalProducer` that will emit /// all values from each of them, and complete when all of them have /// completed. @warn_unused_result(message="Did you forget to call `start` on the producer?") public static func merge(producers: S...) -> SignalProducer { return SignalProducer.merge(producers) } } extension SignalType where Value: SignalProducerType, Error == Value.Error { /// Returns a signal that forwards values from the latest signal sent on /// `signal`, ignoring values sent on previous inner signal. /// /// An error sent on `signal` or the latest inner signal will be sent on the /// returned signal. /// /// The returned signal completes when `signal` and the latest inner /// signal have both completed. private func switchToLatest() -> Signal { return Signal { observer in let composite = CompositeDisposable() let serial = SerialDisposable() composite += serial composite += self.observeSwitchToLatest(observer, serial) return composite } } private func observeSwitchToLatest(observer: Observer, _ latestInnerDisposable: SerialDisposable) -> Disposable? { let state = Atomic(LatestState()) return self.observe { event in switch event { case let .Next(innerProducer): innerProducer.startWithSignal { innerSignal, innerDisposable in state.modify { // When we replace the disposable below, this prevents // the generated Interrupted event from doing any work. var state = $0 state.replacingInnerSignal = true return state } latestInnerDisposable.innerDisposable = innerDisposable state.modify { var state = $0 state.replacingInnerSignal = false state.innerSignalComplete = false return state } innerSignal.observe { event in switch event { case .Interrupted: // If interruption occurred as a result of a new // producer arriving, we don't want to notify our // observer. let original = state.modify { var state = $0 if !state.replacingInnerSignal { state.innerSignalComplete = true } return state } if !original.replacingInnerSignal && original.outerSignalComplete { observer.sendCompleted() } case .Completed: let original = state.modify { var state = $0 state.innerSignalComplete = true return state } if original.outerSignalComplete { observer.sendCompleted() } case .Next, .Failed: observer.action(event) } } } case let .Failed(error): observer.sendFailed(error) case .Completed: let original = state.modify { var state = $0 state.outerSignalComplete = true return state } if original.innerSignalComplete { observer.sendCompleted() } case .Interrupted: observer.sendInterrupted() } } } } extension SignalProducerType where Value: SignalProducerType, Error == Value.Error { /// Returns a signal that forwards values from the latest signal sent on /// `signal`, ignoring values sent on previous inner signal. /// /// An error sent on `signal` or the latest inner signal will be sent on the /// returned signal. /// /// The returned signal completes when `signal` and the latest inner /// signal have both completed. private func switchToLatest() -> SignalProducer { return SignalProducer { observer, disposable in let latestInnerDisposable = SerialDisposable() disposable.addDisposable(latestInnerDisposable) self.startWithSignal { signal, signalDisposable in disposable += signalDisposable disposable += signal.observeSwitchToLatest(observer, latestInnerDisposable) } } } } private struct LatestState { var outerSignalComplete: Bool = false var innerSignalComplete: Bool = true var replacingInnerSignal: Bool = false } extension SignalType { /// Maps each event from `signal` to a new signal, then flattens the /// resulting producers (into a signal of values), according to the /// semantics of the given strategy. /// /// If `signal` or any of the created producers fail, the returned signal /// will forward that failure immediately. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> Signal { return map(transform).flatten(strategy) } /// Maps each event from `signal` to a new signal, then flattens the /// resulting producers (into a signal of values), according to the /// semantics of the given strategy. /// /// If `signal` fails, the returned signal will forward that failure /// immediately. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> Signal { return map(transform).flatten(strategy) } /// Maps each event from `signal` to a new signal, then flattens the /// resulting signals (into a signal of values), according to the /// semantics of the given strategy. /// /// If `signal` or any of the created signals emit an error, the returned /// signal will forward that error immediately. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> Signal { return map(transform).flatten(strategy) } /// Maps each event from `signal` to a new signal, then flattens the /// resulting signals (into a signal of values), according to the /// semantics of the given strategy. /// /// If `signal` emits an error, the returned signal will forward that /// error immediately. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> Signal { return map(transform).flatten(strategy) } } extension SignalType where Error == NoError { /// Maps each event from `signal` to a new signal, then flattens the /// resulting signals (into a signal of values), according to the /// semantics of the given strategy. /// /// If any of the created signals emit an error, the returned signal /// will forward that error immediately. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> Signal { return map(transform).flatten(strategy) } /// Maps each event from `signal` to a new signal, then flattens the /// resulting signals (into a signal of values), according to the /// semantics of the given strategy. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> Signal { return map(transform).flatten(strategy) } /// Maps each event from `signal` to a new signal, then flattens the /// resulting signals (into a signal of values), according to the /// semantics of the given strategy. /// /// If any of the created signals emit an error, the returned signal /// will forward that error immediately. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> Signal { return map(transform).flatten(strategy) } /// Maps each event from `signal` to a new signal, then flattens the /// resulting signals (into a signal of values), according to the /// semantics of the given strategy. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> Signal { return map(transform).flatten(strategy) } } extension SignalProducerType { /// Maps each event from `self` to a new producer, then flattens the /// resulting producers (into a producer of values), according to the /// semantics of the given strategy. /// /// If `self` or any of the created producers fail, the returned producer /// will forward that failure immediately. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> SignalProducer { return map(transform).flatten(strategy) } /// Maps each event from `self` to a new producer, then flattens the /// resulting producers (into a producer of values), according to the /// semantics of the given strategy. /// /// If `self` fails, the returned producer will forward that failure /// immediately. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> SignalProducer { return map(transform).flatten(strategy) } /// Maps each event from `self` to a new producer, then flattens the /// resulting signals (into a producer of values), according to the /// semantics of the given strategy. /// /// If `self` or any of the created signals emit an error, the returned /// producer will forward that error immediately. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> SignalProducer { return map(transform).flatten(strategy) } /// Maps each event from `self` to a new producer, then flattens the /// resulting signals (into a producer of values), according to the /// semantics of the given strategy. /// /// If `self` emits an error, the returned producer will forward that /// error immediately. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> SignalProducer { return map(transform).flatten(strategy) } } extension SignalProducerType where Error == NoError { /// Maps each event from `self` to a new producer, then flattens the /// resulting producers (into a producer of values), according to the /// semantics of the given strategy. /// /// If any of the created producers fail, the returned producer will /// forward that failure immediately. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> SignalProducer { return map(transform).flatten(strategy) } /// Maps each event from `self` to a new producer, then flattens the /// resulting producers (into a producer of values), according to the /// semantics of the given strategy. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> SignalProducer) -> SignalProducer { return map(transform).flatten(strategy) } /// Maps each event from `self` to a new producer, then flattens the /// resulting signals (into a producer of values), according to the /// semantics of the given strategy. /// /// If any of the created signals emit an error, the returned /// producer will forward that error immediately. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> SignalProducer { return map(transform).flatten(strategy) } /// Maps each event from `self` to a new producer, then flattens the /// resulting signals (into a producer of values), according to the /// semantics of the given strategy. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMap(strategy: FlattenStrategy, transform: Value -> Signal) -> SignalProducer { return map(transform).flatten(strategy) } } extension SignalType { /// Catches any failure that may occur on the input signal, mapping to a new /// producer that starts in its place. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func flatMapError(handler: Error -> SignalProducer) -> Signal { return Signal { observer in self.observeFlatMapError(handler, observer, SerialDisposable()) } } private func observeFlatMapError(handler: Error -> SignalProducer, _ observer: Observer, _ serialDisposable: SerialDisposable) -> Disposable? { return self.observe { event in switch event { case let .Next(value): observer.sendNext(value) case let .Failed(error): handler(error).startWithSignal { signal, disposable in serialDisposable.innerDisposable = disposable signal.observe(observer) } case .Completed: observer.sendCompleted() case .Interrupted: observer.sendInterrupted() } } } } extension SignalProducerType { /// Catches any failure that may occur on the input producer, mapping to a /// new producer that starts in its place. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func flatMapError(handler: Error -> SignalProducer) -> SignalProducer { return SignalProducer { observer, disposable in let serialDisposable = SerialDisposable() disposable.addDisposable(serialDisposable) self.startWithSignal { signal, signalDisposable in serialDisposable.innerDisposable = signalDisposable signal.observeFlatMapError(handler, observer, serialDisposable) } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/FoundationExtensions.swift ================================================ // // FoundationExtensions.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-10-19. // Copyright (c) 2014 GitHub. All rights reserved. // import Foundation import enum Result.NoError extension NSNotificationCenter { /// Returns a SignalProducer to observe posting of the specified /// notification. /// /// - parameters: /// - name: name of the notification to observe /// - object: an instance which sends the notifications /// /// - returns: A SignalProducer of notifications posted that match the given /// criteria. /// /// - note: If the `object` is deallocated before starting the producer, it /// will terminate immediately with an `Interrupted` event. /// Otherwise, the producer will not terminate naturally, so it must /// be explicitly disposed to avoid leaks. public func rac_notifications(name: String? = nil, object: AnyObject? = nil) -> SignalProducer { // We're weakly capturing an optional reference here, which makes destructuring awkward. let objectWasNil = (object == nil) return SignalProducer { [weak object] observer, disposable in guard object != nil || objectWasNil else { observer.sendInterrupted() return } let notificationObserver = self.addObserverForName(name, object: object, queue: nil) { notification in observer.sendNext(notification) } disposable += { self.removeObserver(notificationObserver) } } } } private let defaultSessionError = NSError(domain: "org.reactivecocoa.ReactiveCocoa.rac_dataWithRequest", code: 1, userInfo: nil) extension NSURLSession { /// Returns a SignalProducer which performs the work associated with an /// `NSURLSession` /// /// - parameters: /// - request: A request that will be performed when the producer is /// started /// /// - returns: A producer that will execute the given request once for each /// invocation of `start()`. /// /// - note: This method will not send an error event in the case of a server /// side error (i.e. when a response with status code other than /// 200...299 is received). public func rac_dataWithRequest(request: NSURLRequest) -> SignalProducer<(NSData, NSURLResponse), NSError> { return SignalProducer { observer, disposable in let task = self.dataTaskWithRequest(request) { data, response, error in if let data = data, response = response { observer.sendNext((data, response)) observer.sendCompleted() } else { observer.sendFailed(error ?? defaultSessionError) } } disposable += { task.cancel() } task.resume() } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/ObjectiveCBridging.swift ================================================ // // ObjectiveCBridging.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-02. // Copyright (c) 2014 GitHub, Inc. All rights reserved. // import Result extension RACDisposable: Disposable {} extension RACScheduler: DateSchedulerType { /// The current date, as determined by this scheduler. public var currentDate: NSDate { return NSDate() } /// Schedule an action for immediate execution. /// /// - note: This method calls the Objective-C implementation of `schedule:` /// method. /// /// - parameters: /// - action: Closure to perform. /// /// - returns: Disposable that can be used to cancel the work before it /// begins. public func schedule(action: () -> Void) -> Disposable? { let disposable: RACDisposable = self.schedule(action) // Call the Objective-C implementation return disposable as Disposable? } /// Schedule an action for execution at or after the given date. /// /// - parameters: /// - date: Starting date. /// - action: Closure to perform. /// /// - returns: Optional disposable that can be used to cancel the work /// before it begins. public func scheduleAfter(date: NSDate, action: () -> Void) -> Disposable? { return self.after(date, schedule: action) } /// Schedule a recurring action at the given interval, beginning at the /// given start time. /// /// - parameters: /// - date: Starting date. /// - repeatingEvery: Repetition interval. /// - withLeeway: Some delta for repetition. /// - action: Closure of the action to perform. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. public func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway: NSTimeInterval, action: () -> Void) -> Disposable? { return self.after(date, repeatingEvery: repeatingEvery, withLeeway: withLeeway, schedule: action) } } extension ImmediateScheduler { /// Create `RACScheduler` that performs actions instantly. /// /// - returns: `RACScheduler` that instantly performs actions. public func toRACScheduler() -> RACScheduler { return RACScheduler.immediateScheduler() } } extension UIScheduler { /// Create `RACScheduler` for `UIScheduler` /// /// - returns: `RACScheduler` instance that queues events on main thread. public func toRACScheduler() -> RACScheduler { return RACScheduler.mainThreadScheduler() } } extension QueueScheduler { /// Create `RACScheduler` backed with own queue /// /// - returns: Instance `RACScheduler` that queues events on /// `QueueScheduler`'s queue. public func toRACScheduler() -> RACScheduler { return RACTargetQueueScheduler(name: "org.reactivecocoa.ReactiveCocoa.QueueScheduler.toRACScheduler()", targetQueue: queue) } } private func defaultNSError(message: String, file: String, line: Int) -> NSError { return Result<(), NSError>.error(message, file: file, line: line) } extension RACSignal { /// Create a `SignalProducer` which will subscribe to the receiver once for /// each invocation of `start()`. /// /// - parameters: /// - file: Current file name. /// - line: Current line in file. /// /// - returns: Signal producer created from `self`. public func toSignalProducer(file: String = #file, line: Int = #line) -> SignalProducer { return SignalProducer { observer, disposable in let next = { obj in observer.sendNext(obj) } let failed = { nsError in observer.sendFailed(nsError ?? defaultNSError("Nil RACSignal error", file: file, line: line)) } let completed = { observer.sendCompleted() } disposable += self.subscribeNext(next, error: failed, completed: completed) } } } extension SignalType { /// Turn each value into an Optional. private func optionalize() -> Signal { return signal.map(Optional.init) } } // MARK: - toRACSignal extension SignalProducerType where Value: AnyObject { /// Create a `RACSignal` that will `start()` the producer once for each /// subscription. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { return self .lift { $0.optionalize() } .toRACSignal() } } extension SignalProducerType where Value: OptionalType, Value.Wrapped: AnyObject { /// Create a `RACSignal` that will `start()` the producer once for each /// subscription. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { return self .mapError { $0 as NSError } .toRACSignal() } } extension SignalProducerType where Value: AnyObject, Error: NSError { /// Create a `RACSignal` that will `start()` the producer once for each /// subscription. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { return self .lift { $0.optionalize() } .toRACSignal() } } extension SignalProducerType where Value: OptionalType, Value.Wrapped: AnyObject, Error: NSError { /// Create a `RACSignal` that will `start()` the producer once for each /// subscription. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { // This special casing of `Error: NSError` is a workaround for // rdar://22708537 which causes an NSError's UserInfo dictionary to get // discarded during a cast from ErrorType to NSError in a generic // function return RACSignal.createSignal { subscriber in let selfDisposable = self.start { event in switch event { case let .Next(value): subscriber.sendNext(value.optional) case let .Failed(error): subscriber.sendError(error) case .Completed: subscriber.sendCompleted() case .Interrupted: break } } return RACDisposable { selfDisposable.dispose() } } } } extension SignalType where Value: AnyObject { /// Create a `RACSignal` that will observe the given signal. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { return self .optionalize() .toRACSignal() } } extension SignalType where Value: AnyObject, Error: NSError { /// Create a `RACSignal` that will observe the given signal. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { return self .optionalize() .toRACSignal() } } extension SignalType where Value: OptionalType, Value.Wrapped: AnyObject { /// Create a `RACSignal` that will observe the given signal. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { return self .mapError { $0 as NSError } .toRACSignal() } } extension SignalType where Value: OptionalType, Value.Wrapped: AnyObject, Error: NSError { /// Create a `RACSignal` that will observe the given signal. /// /// - note: Any `Interrupted` events will be silently discarded. /// /// - returns: `RACSignal` instantiated from `self`. public func toRACSignal() -> RACSignal { // This special casing of `Error: NSError` is a workaround for // rdar://22708537 which causes an NSError's UserInfo dictionary to get // discarded during a cast from ErrorType to NSError in a generic // function return RACSignal.createSignal { subscriber in let selfDisposable = self.observe { event in switch event { case let .Next(value): subscriber.sendNext(value.optional) case let .Failed(error): subscriber.sendError(error) case .Completed: subscriber.sendCompleted() case .Interrupted: break } } return RACDisposable { selfDisposable?.dispose() } } } } // MARK: - extension RACCommand { /// Creates an Action that will execute the receiver. /// /// - note: The returned Action will not necessarily be marked as executing /// when the command is. However, the reverse is always true: the /// RACCommand will always be marked as executing when the action /// is. /// /// - parameters: /// - file: Current file name. /// - line: Current line in file. /// /// - returns: Action created from `self`. public func toAction(file: String = #file, line: Int = #line) -> Action { let enabledProperty = MutableProperty(true) enabledProperty <~ self.enabled.toSignalProducer() .map { $0 as! Bool } .flatMapError { _ in SignalProducer(value: false) } return Action(enabledIf: enabledProperty) { input -> SignalProducer in let executionSignal = RACSignal.`defer` { return self.execute(input) } return executionSignal.toSignalProducer(file, line: line) } } } extension ActionType { private var commandEnabled: RACSignal { return self.enabled.producer .map { $0 as NSNumber } .toRACSignal() } } /// Create a `RACCommand` that will execute the action. /// /// - note: The returned command will not necessarily be marked as executing /// when the action is. However, the reverse is always true: the Action /// will always be marked as executing when the RACCommand is. /// /// - returns: `RACCommand` with bound action. public func toRACCommand(action: Action) -> RACCommand { return RACCommand(enabled: action.commandEnabled) { input -> RACSignal in return action .apply(input) .toRACSignal() } } /// Creates a RACCommand that will execute the action. /// /// - note: The returned command will not necessarily be marked as executing /// when the action is. However, the reverse is always true: the Action /// will always be marked as executing when the RACCommand is. /// /// - returns: `RACCommand` with bound action. public func toRACCommand(action: Action) -> RACCommand { return RACCommand(enabled: action.commandEnabled) { input -> RACSignal in return action .apply(input) .toRACSignal() } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Observer.swift ================================================ // // Observer.swift // ReactiveCocoa // // Created by Andy Matuschak on 10/2/15. // Copyright © 2015 GitHub. All rights reserved. // /// A protocol for type-constrained extensions of `Observer`. public protocol ObserverType { associatedtype Value associatedtype Error: ErrorType /// Puts a `Next` event into `self`. func sendNext(value: Value) /// Puts a `Failed` event into `self`. func sendFailed(error: Error) /// Puts a `Completed` event into `self`. func sendCompleted() /// Puts an `Interrupted` event into `self`. func sendInterrupted() } /// An Observer is a simple wrapper around a function which can receive Events /// (typically from a Signal). public struct Observer { public typealias Action = Event -> Void /// An action that will be performed upon arrival of the event. public let action: Action /// An initializer that accepts a closure accepting an event for the /// observer. /// /// - parameters: /// - action: A closure to lift over received event. public init(_ action: Action) { self.action = action } /// An initializer that accepts closures for different event types. /// /// - parameters: /// - failed: Optional closure that accepts an `Error` parameter when a /// `Failed` event is observed. /// - completed: Optional closure executed when a `Completed` event is /// observed. /// - interruped: Optional closure executed when an `Interrupted` event is /// observed. /// - next: Optional closure executed when a `Next` event is observed. public init(failed: (Error -> Void)? = nil, completed: (() -> Void)? = nil, interrupted: (() -> Void)? = nil, next: (Value -> Void)? = nil) { self.init { event in switch event { case let .Next(value): next?(value) case let .Failed(error): failed?(error) case .Completed: completed?() case .Interrupted: interrupted?() } } } } extension Observer: ObserverType { /// Puts a `Next` event into `self`. /// /// - parameters: /// - value: A value sent with the `Next` event. public func sendNext(value: Value) { action(.Next(value)) } /// Puts a `Failed` event into `self`. /// /// - parameters: /// - error: An error object sent with `Failed` event. public func sendFailed(error: Error) { action(.Failed(error)) } /// Puts a `Completed` event into `self`. public func sendCompleted() { action(.Completed) } /// Puts an `Interrupted` event into `self`. public func sendInterrupted() { action(.Interrupted) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Optional.swift ================================================ // // Optional.swift // ReactiveCocoa // // Created by Neil Pankey on 6/24/15. // Copyright (c) 2015 GitHub. All rights reserved. // /// An optional protocol for use in type constraints. public protocol OptionalType { /// The type contained in the otpional. associatedtype Wrapped /// Extracts an optional from the receiver. var optional: Wrapped? { get } } extension Optional: OptionalType { public var optional: Wrapped? { return self } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Property.swift ================================================ import Foundation import enum Result.NoError /// Represents a property that allows observation of its changes. public protocol PropertyType { associatedtype Value /// The current value of the property. var value: Value { get } /// A producer for Signals that will send the property's current value, /// followed by all changes over time. var producer: SignalProducer { get } /// A signal that will send the property's changes over time. var signal: Signal { get } } /// A read-only property that allows observation of its changes. public struct AnyProperty: PropertyType { private let _value: () -> Value private let _producer: () -> SignalProducer private let _signal: () -> Signal public var value: Value { return _value() } public var producer: SignalProducer { return _producer() } public var signal: Signal { return _signal() } /// Initializes a property as a read-only view of the given property. /// /// - parameters: /// - property: A property to read as this property's own value. public init(_ property: P) { _value = { property.value } _producer = { property.producer } _signal = { property.signal } } /// Initializes a property that first takes on `initialValue`, then each /// value sent on a signal created by `producer`. /// /// - parameters: /// - initialValue: Starting value for the property. /// - producer: A producer that will start immediately and send values to /// the property. public init(initialValue: Value, producer: SignalProducer) { let mutableProperty = MutableProperty(initialValue) mutableProperty <~ producer self.init(mutableProperty) } /// Initializes a property that first takes on `initialValue`, then each /// value sent on `signal`. /// /// - parameters: /// - initialValue: Starting value for the property. /// - signal: A signal that will send values to the property. public init(initialValue: Value, signal: Signal) { let mutableProperty = MutableProperty(initialValue) mutableProperty <~ signal self.init(mutableProperty) } } extension PropertyType { /// Maps the current value and all subsequent values to a new value. /// /// - parameters: /// - transform: A closure that will map the current `value` of this /// `Property` to a new value. /// /// - returns: A new instance of `AnyProperty` who's holds a mapped value /// from `self`. public func map(transform: Value -> U) -> AnyProperty { let mappedProducer = SignalProducer { observer, disposable in disposable += ActionDisposable { self } disposable += self.producer.map(transform).start(observer) } return AnyProperty(initialValue: transform(value), producer: mappedProducer) } } /// A property that never changes. public struct ConstantProperty: PropertyType { public let value: Value public let producer: SignalProducer public let signal: Signal /// Initializes the property to have the given value. /// /// - parameters: /// - value: Property's value. public init(_ value: Value) { self.value = value self.producer = SignalProducer(value: value) self.signal = .empty } } /// Represents an observable property that can be mutated directly. /// /// Only classes can conform to this protocol, because instances must support /// weak references (and value types currently do not). public protocol MutablePropertyType: class, PropertyType { var value: Value { get set } } /// A mutable property of type `Value` that allows observation of its changes. /// /// Instances of this class are thread-safe. public final class MutableProperty: MutablePropertyType { private let observer: Signal.Observer /// Need a recursive lock around `value` to allow recursive access to /// `value`. Note that recursive sets will still deadlock because the /// underlying producer prevents sending recursive events. private let lock: NSRecursiveLock /// The getter of the underlying storage, which may outlive the property /// if a returned producer is being retained. private let getter: () -> Value /// The setter of the underlying storage. private let setter: Value -> Void /// The current value of the property. /// /// Setting this to a new value will notify all observers of any Signals /// created from the `values` producer. public var value: Value { get { return withValue { $0 } } set { swap(newValue) } } /// A signal that will send the property's changes over time, /// then complete when the property has deinitialized. public let signal: Signal /// A producer for Signals that will send the property's current value, /// followed by all changes over time, then complete when the property has /// deinitialized. public var producer: SignalProducer { return SignalProducer { [getter, weak self] producerObserver, producerDisposable in if let strongSelf = self { strongSelf.withValue { value in producerObserver.sendNext(value) producerDisposable += strongSelf.signal.observe(producerObserver) } } else { /// As the setter would have been deinitialized with the property, /// the underlying storage would be immutable, and locking is no longer necessary. producerObserver.sendNext(getter()) producerObserver.sendCompleted() } } } /// Initializes a mutable property that first takes on `initialValue` /// /// - parameters: /// - initialValue: Starting value for the mutable property. public init(_ initialValue: Value) { var value = initialValue lock = NSRecursiveLock() lock.name = "org.reactivecocoa.ReactiveCocoa.MutableProperty" getter = { value } setter = { newValue in value = newValue } (signal, observer) = Signal.pipe() } /// Atomically replaces the contents of the variable. /// /// - parameters: /// - newValue: New property value. /// /// - returns: The previous property value. public func swap(newValue: Value) -> Value { return modify { _ in newValue } } /// Atomically modifies the variable. /// /// - parameters: /// - action: A closure that accepts old property value and returns a new /// property value. /// - returns: The previous property value. public func modify(@noescape action: (Value) throws -> Value) rethrows -> Value { return try withValue { value in let newValue = try action(value) setter(newValue) observer.sendNext(newValue) return value } } /// Atomically performs an arbitrary action using the current value of the /// variable. /// /// - parameters: /// - action: A closure that accepts current property value. /// /// - returns: the result of the action. public func withValue(@noescape action: (Value) throws -> Result) rethrows -> Result { lock.lock() defer { lock.unlock() } return try action(getter()) } deinit { observer.sendCompleted() } } infix operator <~ { associativity right // Binds tighter than assignment but looser than everything else precedence 93 } /// Binds a signal to a property, updating the property's value to the latest /// value sent by the signal. /// /// - note: The binding will automatically terminate when the property is /// deinitialized, or when the signal sends a `Completed` event. /// /// ```` /// let property = MutableProperty(0) /// let signal = Signal({ /* do some work after some time */ }) /// property <~ signal /// ```` /// /// ```` /// let property = MutableProperty(0) /// let signal = Signal({ /* do some work after some time */ }) /// let disposable = property <~ signal /// ... /// // Terminates binding before property dealloc or signal's /// // `Completed` event. /// disposable.dispose() /// ```` /// /// - parameters: /// - property: A property to bind to. /// - signal: A signal to bind. /// /// - returns: A disposable that can be used to terminate binding before the /// deinitialization of property or signal's `Completed` event. public func <~ (property: P, signal: Signal) -> Disposable { let disposable = CompositeDisposable() disposable += property.producer.startWithCompleted { disposable.dispose() } disposable += signal.observe { [weak property] event in switch event { case let .Next(value): property?.value = value case .Completed: disposable.dispose() case .Failed, .Interrupted: break } } return disposable } /// Creates a signal from the given producer, which will be immediately bound to /// the given property, updating the property's value to the latest value sent /// by the signal. /// /// ```` /// let property = MutableProperty(0) /// let producer = SignalProducer(value: 1) /// property <~ producer /// print(property.value) // prints `1` /// ```` /// /// ```` /// let property = MutableProperty(0) /// let producer = SignalProducer({ /* do some work after some time */ }) /// let disposable = (property <~ producer) /// ... /// // Terminates binding before property dealloc or /// // signal's `Completed` event. /// disposable.dispose() /// ```` /// /// - note: The binding will automatically terminate when the property is /// deinitialized, or when the created producer sends a `Completed` /// event. /// /// - parameters: /// - property: A property to bind to. /// - producer: A producer to bind. /// /// - returns: A disposable that can be used to terminate binding before the /// deinitialization of property or producer's `Completed` event. public func <~ (property: P, producer: SignalProducer) -> Disposable { let disposable = CompositeDisposable() producer .on(completed: { disposable.dispose() }) .startWithSignal { signal, signalDisposable in disposable += property <~ signal disposable += signalDisposable disposable += property.producer.startWithCompleted { disposable.dispose() } } return disposable } /// Binds `destinationProperty` to the latest values of `sourceProperty`. /// /// ```` /// let dstProperty = MutableProperty(0) /// let srcProperty = ConstantProperty(10) /// dstProperty <~ srcProperty /// print(dstProperty.value) // prints 10 /// ```` /// /// ```` /// let dstProperty = MutableProperty(0) /// let srcProperty = ConstantProperty(10) /// let disposable = (dstProperty <~ srcProperty) /// ... /// disposable.dispose() // terminate the binding earlier if /// // needed /// ```` /// /// - note: The binding will automatically terminate when either property is /// deinitialized. /// /// - parameters: /// - destinationProperty: A property to bind to. /// - sourceProperty: A property to bind. /// /// - returns: A disposable that can be used to terminate binding before the /// deinitialization of destination property or source property /// producer's `Completed` event. public func <~ (destinationProperty: Destination, sourceProperty: Source) -> Disposable { return destinationProperty <~ sourceProperty.producer } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Scheduler.swift ================================================ // // Scheduler.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-06-02. // Copyright (c) 2014 GitHub. All rights reserved. // import Foundation /// Represents a serial queue of work items. public protocol SchedulerType { /// Enqueues an action on the scheduler. /// /// When the work is executed depends on the scheduler in use. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. func schedule(action: () -> Void) -> Disposable? } /// A particular kind of scheduler that supports enqueuing actions at future /// dates. public protocol DateSchedulerType: SchedulerType { /// The current date, as determined by this scheduler. /// /// This can be implemented to deterministically return a known date (e.g., /// for testing purposes). var currentDate: NSDate { get } /// Schedules an action for execution at or after the given date. /// /// - parameters: /// - date: Starting time. /// - action: Closure of the action to perform. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. func scheduleAfter(date: NSDate, action: () -> Void) -> Disposable? /// Schedules a recurring action at the given interval, beginning at the /// given date. /// /// - parameters: /// - date: Starting time. /// - repeatingEvery: Repetition interval. /// - withLeeway: Some delta for repetition. /// - action: Closure of the action to perform. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway: NSTimeInterval, action: () -> Void) -> Disposable? } /// A scheduler that performs all work synchronously. public final class ImmediateScheduler: SchedulerType { public init() {} /// Immediately calls passed in `action`. /// /// - parameters: /// - action: Closure of the action to perform. /// /// - returns: `nil`. public func schedule(action: () -> Void) -> Disposable? { action() return nil } } /// A scheduler that performs all work on the main queue, as soon as possible. /// /// If the caller is already running on the main queue when an action is /// scheduled, it may be run synchronously. However, ordering between actions /// will always be preserved. public final class UIScheduler: SchedulerType { private static var dispatchOnceToken: dispatch_once_t = 0 private static var dispatchSpecificKey: UInt8 = 0 private static var dispatchSpecificContext: UInt8 = 0 private var queueLength: Int32 = 0 /// Initializes `UIScheduler` public init() { dispatch_once(&UIScheduler.dispatchOnceToken) { dispatch_queue_set_specific( dispatch_get_main_queue(), &UIScheduler.dispatchSpecificKey, &UIScheduler.dispatchSpecificContext, nil ) } } /// Queues an action to be performed on main queue. If the action is called /// on the main thread and no work is queued, no scheduling takes place and /// the action is called instantly. /// /// - parameters: /// - action: Closure of the action to perform on the main thread. /// /// - returns: `Disposable` that can be used to cancel the work before it /// begins. public func schedule(action: () -> Void) -> Disposable? { let disposable = SimpleDisposable() let actionAndDecrement = { if !disposable.disposed { action() } OSAtomicDecrement32(&self.queueLength) } let queued = OSAtomicIncrement32(&queueLength) // If we're already running on the main queue, and there isn't work // already enqueued, we can skip scheduling and just execute directly. if queued == 1 && dispatch_get_specific(&UIScheduler.dispatchSpecificKey) == &UIScheduler.dispatchSpecificContext { actionAndDecrement() } else { dispatch_async(dispatch_get_main_queue(), actionAndDecrement) } return disposable } } /// A scheduler backed by a serial GCD queue. public final class QueueScheduler: DateSchedulerType { internal let queue: dispatch_queue_t internal init(internalQueue: dispatch_queue_t) { queue = internalQueue } /// Initializes a scheduler that will target the given queue with its /// work. /// /// - note: Even if the queue is concurrent, all work items enqueued with /// the `QueueScheduler` will be serial with respect to each other. /// /// - warning: Obsoleted in OS X 10.11. @available(OSX, deprecated=10.10, obsoleted=10.11, message="Use init(qos:, name:) instead") public convenience init(queue: dispatch_queue_t, name: String = "org.reactivecocoa.ReactiveCocoa.QueueScheduler") { self.init(internalQueue: dispatch_queue_create(name, DISPATCH_QUEUE_SERIAL)) dispatch_set_target_queue(self.queue, queue) } /// A singleton `QueueScheduler` that always targets the main thread's GCD /// queue. /// /// - note: Unlike `UIScheduler`, this scheduler supports scheduling for a /// future date, and will always schedule asynchronously (even if /// already running on the main thread). public static let mainQueueScheduler = QueueScheduler(internalQueue: dispatch_get_main_queue()) public var currentDate: NSDate { return NSDate() } /// Initializes a scheduler that will target a new serial queue with the /// given quality of service class. /// /// - parameters: /// - qos: Dispatch queue's QoS value. /// - name: Name for the queue in the form of reverse domain. @available(iOS 8, watchOS 2, OSX 10.10, *) public convenience init(qos: dispatch_qos_class_t = QOS_CLASS_DEFAULT, name: String = "org.reactivecocoa.ReactiveCocoa.QueueScheduler") { self.init(internalQueue: dispatch_queue_create(name, dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, qos, 0))) } /// Schedules action for dispatch on internal queue /// /// - parameters: /// - action: Closure of the action to schedule. /// /// - returns: `Disposable` that can be used to cancel the work before it /// begins. public func schedule(action: () -> Void) -> Disposable? { let d = SimpleDisposable() dispatch_async(queue) { if !d.disposed { action() } } return d } private func wallTimeWithDate(date: NSDate) -> dispatch_time_t { let (seconds, frac) = modf(date.timeIntervalSince1970) let nsec: Double = frac * Double(NSEC_PER_SEC) var walltime = timespec(tv_sec: Int(seconds), tv_nsec: Int(nsec)) return dispatch_walltime(&walltime, 0) } /// Schedules an action for execution at or after the given date. /// /// - parameters: /// - date: Starting time. /// - action: Closure of the action to perform. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. public func scheduleAfter(date: NSDate, action: () -> Void) -> Disposable? { let d = SimpleDisposable() dispatch_after(wallTimeWithDate(date), queue) { if !d.disposed { action() } } return d } /// Schedules a recurring action at the given interval and beginning at the /// given start time. A reasonable default timer interval leeway is /// provided. /// /// - parameters: /// - date: Date to schedule the first action for. /// - repeatingEvery: Repetition interval. /// - action: Closure of the action to repeat. /// /// - returns: Optional disposable that can be used to cancel the work /// before it begins. public func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, action: () -> Void) -> Disposable? { // Apple's "Power Efficiency Guide for Mac Apps" recommends a leeway of // at least 10% of the timer interval. return scheduleAfter(date, repeatingEvery: repeatingEvery, withLeeway: repeatingEvery * 0.1, action: action) } /// Schedules a recurring action at the given interval with provided leeway, /// beginning at the given start time. /// /// - parameters: /// - date: Date to schedule the first action for. /// - repeatingEvery: Repetition interval. /// - leeway: Some delta for repetition interval. /// - action: Closure of the action to repeat. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. public func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway leeway: NSTimeInterval, action: () -> Void) -> Disposable? { precondition(repeatingEvery >= 0) precondition(leeway >= 0) let nsecInterval = repeatingEvery * Double(NSEC_PER_SEC) let nsecLeeway = leeway * Double(NSEC_PER_SEC) let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue) dispatch_source_set_timer(timer, wallTimeWithDate(date), UInt64(nsecInterval), UInt64(nsecLeeway)) dispatch_source_set_event_handler(timer, action) dispatch_resume(timer) return ActionDisposable { dispatch_source_cancel(timer) } } } /// A scheduler that implements virtualized time, for use in testing. public final class TestScheduler: DateSchedulerType { private final class ScheduledAction { let date: NSDate let action: () -> Void init(date: NSDate, action: () -> Void) { self.date = date self.action = action } func less(rhs: ScheduledAction) -> Bool { return date.compare(rhs.date) == .OrderedAscending } } private let lock = NSRecursiveLock() private var _currentDate: NSDate /// The virtual date that the scheduler is currently at. public var currentDate: NSDate { let d: NSDate lock.lock() d = _currentDate lock.unlock() return d } private var scheduledActions: [ScheduledAction] = [] /// Initializes a TestScheduler with the given start date. /// /// - parameters: /// - startDate: The start date of the scheduler. public init(startDate: NSDate = NSDate(timeIntervalSinceReferenceDate: 0)) { lock.name = "org.reactivecocoa.ReactiveCocoa.TestScheduler" _currentDate = startDate } private func schedule(action: ScheduledAction) -> Disposable { lock.lock() scheduledActions.append(action) scheduledActions.sortInPlace { $0.less($1) } lock.unlock() return ActionDisposable { self.lock.lock() self.scheduledActions = self.scheduledActions.filter { $0 !== action } self.lock.unlock() } } /// Enqueues an action on the scheduler. /// /// - note: The work is executed on `currentDate` as it is understood by the /// scheduler. /// /// - parameters: /// - action: An action that will be performed on scheduler's /// `currentDate`. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. public func schedule(action: () -> Void) -> Disposable? { return schedule(ScheduledAction(date: currentDate, action: action)) } /// Schedules an action for execution at or after the given date. /// /// - parameters: /// - date: Starting date. /// - action: Closure of the action to perform. /// /// - returns: Optional disposable that can be used to cancel the work /// before it begins. public func scheduleAfter(interval: NSTimeInterval, action: () -> Void) -> Disposable? { return scheduleAfter(currentDate.dateByAddingTimeInterval(interval), action: action) } public func scheduleAfter(date: NSDate, action: () -> Void) -> Disposable? { return schedule(ScheduledAction(date: date, action: action)) } /// Schedules a recurring action at the given interval, beginning at the /// given start time /// /// - parameters: /// - date: Date to schedule the first action for. /// - repeatingEvery: Repetition interval. /// - action: Closure of the action to repeat. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. private func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, disposable: SerialDisposable, action: () -> Void) { precondition(repeatingEvery >= 0) disposable.innerDisposable = scheduleAfter(date) { [unowned self] in action() self.scheduleAfter(date.dateByAddingTimeInterval(repeatingEvery), repeatingEvery: repeatingEvery, disposable: disposable, action: action) } } /// Schedules a recurring action at the given interval, beginning at the /// given interval (counted from `currentDate`). /// /// - parameters: /// - interval: Interval to add to `currentDate`. /// - repeatingEvery: Repetition interval. /// - leeway: Some delta for repetition interval. /// - action: Closure of the action to repeat. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. public func scheduleAfter(interval: NSTimeInterval, repeatingEvery: NSTimeInterval, withLeeway leeway: NSTimeInterval = 0, action: () -> Void) -> Disposable? { return scheduleAfter(currentDate.dateByAddingTimeInterval(interval), repeatingEvery: repeatingEvery, withLeeway: leeway, action: action) } /// Schedules a recurring action at the given interval with /// provided leeway, beginning at the given start time. /// /// - parameters: /// - date: Date to schedule the first action for. /// - repeatingEvery: Repetition interval. /// - leeway: Some delta for repetition interval. /// - action: Closure of the action to repeat. /// /// - returns: Optional `Disposable` that can be used to cancel the work /// before it begins. public func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway: NSTimeInterval = 0, action: () -> Void) -> Disposable? { let disposable = SerialDisposable() scheduleAfter(date, repeatingEvery: repeatingEvery, disposable: disposable, action: action) return disposable } /// Advances the virtualized clock by an extremely tiny interval, dequeuing /// and executing any actions along the way. /// /// This is intended to be used as a way to execute actions that have been /// scheduled to run as soon as possible. public func advance() { advanceByInterval(DBL_EPSILON) } /// Advances the virtualized clock by the given interval, dequeuing and /// executing any actions along the way. /// /// - parameters: /// - interval: Interval by which the current date will be advanced. public func advanceByInterval(interval: NSTimeInterval) { lock.lock() advanceToDate(currentDate.dateByAddingTimeInterval(interval)) lock.unlock() } /// Advances the virtualized clock to the given future date, dequeuing and /// executing any actions up until that point. /// /// - parameters: /// - newDate: Future date to which the virtual clock will be advanced. public func advanceToDate(newDate: NSDate) { lock.lock() assert(currentDate.compare(newDate) != .OrderedDescending) while scheduledActions.count > 0 { if newDate.compare(scheduledActions[0].date) == .OrderedAscending { break } _currentDate = scheduledActions[0].date let scheduledAction = scheduledActions.removeAtIndex(0) scheduledAction.action() } _currentDate = newDate lock.unlock() } /// Dequeues and executes all scheduled actions, leaving the scheduler's /// date at `NSDate.distantFuture()`. public func run() { advanceToDate(NSDate.distantFuture()) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Signal.swift ================================================ import Foundation import Result /// A push-driven stream that sends Events over time, parameterized by the type /// of values being sent (`Value`) and the type of failure that can occur /// (`Error`). If no failures should be possible, NoError can be specified for /// `Error`. /// /// An observer of a Signal will see the exact same sequence of events as all /// other observers. In other words, events will be sent to all observers at the /// same time. /// /// Signals are generally used to represent event streams that are already “in /// progress,” like notifications, user input, etc. To represent streams that /// must first be _started_, see the SignalProducer type. /// /// Signals do not need to be retained. A Signal will be automatically kept /// alive until the event stream has terminated. public final class Signal { public typealias Observer = ReactiveCocoa.Observer private let atomicObservers: Atomic?> = Atomic(Bag()) /// Initialize a Signal that will immediately invoke the given generator, /// then forward events sent to the given observer. /// /// - note: The disposable returned from the closure will be automatically /// disposed if a terminating event is sent to the observer. The /// Signal itself will remain alive until the observer is released. /// /// - parameters: /// - generator: A closure that accepts an implicitly created observer /// that will act as an event emitter for the signal. public init(@noescape _ generator: Observer -> Disposable?) { /// Used to ensure that events are serialized during delivery to /// observers. let sendLock = NSLock() sendLock.name = "org.reactivecocoa.ReactiveCocoa.Signal" let generatorDisposable = SerialDisposable() /// When set to `true`, the Signal should interrupt as soon as possible. let interrupted = Atomic(false) let observer = Observer { event in if case .Interrupted = event { // Normally we disallow recursive events, but Interrupted is // kind of a special snowflake, since it can inadvertently be // sent by downstream consumers. // // So we'll flag Interrupted events specially, and if it // happened to occur while we're sending something else, we'll // wait to deliver it. interrupted.value = true if sendLock.tryLock() { self.interrupt() sendLock.unlock() generatorDisposable.dispose() } } else { if let observers = (event.isTerminating ? self.atomicObservers.swap(nil) : self.atomicObservers.value) { sendLock.lock() for observer in observers { observer.action(event) } let shouldInterrupt = !event.isTerminating && interrupted.value if shouldInterrupt { self.interrupt() } sendLock.unlock() if event.isTerminating || shouldInterrupt { // Dispose only after notifying observers, so disposal // logic is consistently the last thing to run. generatorDisposable.dispose() } } } } generatorDisposable.innerDisposable = generator(observer) } /// A Signal that never sends any events to its observers. public static var never: Signal { return self.init { _ in nil } } /// A Signal that completes immediately without emitting any value. public static var empty: Signal { return self.init { observer in observer.sendCompleted() return nil } } /// Create a Signal that will be controlled by sending events to the given /// observer. /// /// - note: The Signal will remain alive until a terminating event is sent /// to the observer. /// /// - returns: A tuple made of signal and observer. public static func pipe() -> (Signal, Observer) { var observer: Observer! let signal = self.init { innerObserver in observer = innerObserver return nil } return (signal, observer) } /// Interrupts all observers and terminates the stream. private func interrupt() { if let observers = self.atomicObservers.swap(nil) { for observer in observers { observer.sendInterrupted() } } } /// Observe the Signal by sending any future events to the given observer. /// /// - note: If the Signal has already terminated, the observer will /// immediately receive an `Interrupted` event. /// /// - parameters: /// - observer: An observer to forward the events to. /// /// - returns: An optional `Disposable` which can be used to disconnect the /// observer. Disposing of the Disposable will have no effect on /// the Signal itself. public func observe(observer: Observer) -> Disposable? { var token: RemovalToken? atomicObservers.modify { observers in guard var observers = observers else { return nil } token = observers.insert(observer) return observers } if let token = token { return ActionDisposable { [weak self] in self?.atomicObservers.modify { observers in guard var observers = observers else { return nil } observers.removeValueForToken(token) return observers } } } else { observer.sendInterrupted() return nil } } } public protocol SignalType { /// The type of values being sent on the signal. associatedtype Value /// The type of error that can occur on the signal. If errors aren't /// possible then `NoError` can be used. associatedtype Error: ErrorType /// Extracts a signal from the receiver. var signal: Signal { get } /// Observes the Signal by sending any future events to the given observer. func observe(observer: Signal.Observer) -> Disposable? } extension Signal: SignalType { public var signal: Signal { return self } } extension SignalType { /// Convenience override for observe(_:) to allow trailing-closure style /// invocations. /// /// - parameters: /// - action: A closure that will accept an event of the signal /// /// - returns: An optional `Disposable` which can be used to stop the /// invocation of the callback. Disposing of the Disposable will /// have no effect on the Signal itself. public func observe(action: Signal.Observer.Action) -> Disposable? { return observe(Observer(action)) } @available(*, deprecated, message="This Signal may emit errors which must be handled explicitly, or observed using observeResult:") public func observeNext(next: Value -> Void) -> Disposable? { return observe(Observer(next: next)) } /// Observe the `Signal` by invoking the given callback when `next` or /// `failed` event are received. /// /// - parameters: /// - result: A closure that accepts instance of `Result` /// enum that contains either a `Success(Value)` or /// `Failure` case. /// /// - returns: An optional `Disposable` which can be used to stop the /// invocation of the callback. Disposing of the Disposable will /// have no effect on the Signal itself. public func observeResult(result: (Result) -> Void) -> Disposable? { return observe( Observer( next: { result(.Success($0)) }, failed: { result(.Failure($0)) } ) ) } /// Observe the `Signal` by invoking the given callback when a `completed` /// event is received. /// /// - parameters: /// - completed: A closure that is called when `Completed` event is /// received. /// /// - returns: An optional `Disposable` which can be used to stop the /// invocation of the callback. Disposing of the Disposable will /// have no effect on the Signal itself. public func observeCompleted(completed: () -> Void) -> Disposable? { return observe(Observer(completed: completed)) } /// Observe the `Signal` by invoking the given callback when a `failed` /// event is received. /// /// - parameters: /// - error: A closure that is called when `Failed` event is received. It /// accepts an error parameter. /// /// - returns: An optional `Disposable` which can be used to stop the /// invocation of the callback. Disposing of the Disposable will /// have no effect on the Signal itself. public func observeFailed(error: Error -> Void) -> Disposable? { return observe(Observer(failed: error)) } /// Observe the `Signal` by invoking the given callback when an /// `interrupted` event is received. If the Signal has already terminated, /// the callback will be invoked immediately. /// /// - parameters: /// - interrupted: A closure that is invoked when `Interrupted` event is /// received /// /// - returns: An optional `Disposable` which can be used to stop the /// invocation of the callback. Disposing of the Disposable will /// have no effect on the Signal itself. public func observeInterrupted(interrupted: () -> Void) -> Disposable? { return observe(Observer(interrupted: interrupted)) } } extension SignalType where Error == NoError { /// Observe the Signal by invoking the given callback when `next` events are /// received. /// /// - parameters: /// - next: A closure that accepts a value when `Next` event is received. /// /// - returns: An optional `Disposable` which can be used to stop the /// invocation of the callback. Disposing of the Disposable will /// have no effect on the Signal itself. public func observeNext(next: Value -> Void) -> Disposable? { return observe(Observer(next: next)) } } extension SignalType { /// Map each value in the signal to a new value. /// /// - parameters: /// - transform: A closure that accepts a value from the `Next` event and /// returns a new value. /// /// - returns: A signal that will send new values. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func map(transform: Value -> U) -> Signal { return Signal { observer in return self.observe { event in observer.action(event.map(transform)) } } } /// Map errors in the signal to a new error. /// /// - parameters: /// - transform: A closure that accepts current error object and returns /// a new type of error object. /// /// - returns: A signal that will send new type of errors. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func mapError(transform: Error -> F) -> Signal { return Signal { observer in return self.observe { event in observer.action(event.mapError(transform)) } } } /// Preserve only the values of the signal that pass the given predicate. /// /// - parameters: /// - predicate: A closure that accepts value and returns `Bool` denoting /// whether value has passed the test. /// /// - returns: A signal that will send only the values passing the given /// predicate. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func filter(predicate: Value -> Bool) -> Signal { return Signal { observer in return self.observe { (event: Event) -> Void in guard let value = event.value else { observer.action(event) return } if predicate(value) { observer.sendNext(value) } } } } } extension SignalType where Value: OptionalType { /// Unwrap non-`nil` values and forward them on the returned signal, `nil` /// values are dropped. /// /// - returns: A signal that sends only non-nil values. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func ignoreNil() -> Signal { return filter { $0.optional != nil }.map { $0.optional! } } } extension SignalType { /// Take up to `n` values from the signal and then complete. /// /// - precondition: `count` must be non-negative number. /// /// - parameters: /// - count: A number of values to take from the signal. /// /// - returns: A signal that will yield the first `count` values from `self` @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func take(count: Int) -> Signal { precondition(count >= 0) return Signal { observer in if count == 0 { observer.sendCompleted() return nil } var taken = 0 return self.observe { event in guard let value = event.value else { observer.action(event) return } if taken < count { taken += 1 observer.sendNext(value) } if taken == count { observer.sendCompleted() } } } } } /// A reference type which wraps an array to auxiliate the collection of values /// for `collect` operator. private final class CollectState { var values: [Value] = [] /// Collects a new value. func append(value: Value) { values.append(value) } /// Check if there are any items remaining. /// /// - note: This method also checks if there weren't collected any values /// and, in that case, it means an empty array should be sent as the /// result of collect. var isEmpty: Bool { /// We use capacity being zero to determine if we haven't collected any /// value since we're keeping the capacity of the array to avoid /// unnecessary and expensive allocations). This also guarantees /// retro-compatibility around the original `collect()` operator. return values.isEmpty && values.capacity > 0 } /// Removes all values previously collected if any. func flush() { // Minor optimization to avoid consecutive allocations. Can // be useful for sequences of regular or similar size and to // track if any value was ever collected. values.removeAll(keepCapacity: true) } } extension SignalType { /// Collect all values sent by the signal then forward them as a single /// array and complete. /// /// - note: When `self` completes without collecting any value, it will send /// an empty array of values. /// /// - returns: A signal that will yield an array of values when `self` /// completes. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func collect() -> Signal<[Value], Error> { return collect { _,_ in false } } /// Collect at most `count` values from `self`, forward them as a single /// array and complete. /// /// - note: When the count is reached the array is sent and the signal /// starts over yielding a new array of values. /// /// - note: When `self` completes any remaining values will be sent, the /// last array may not have `count` values. Alternatively, if were /// not collected any values will sent an empty array of values. /// /// - precondition: `count` should be greater than zero. /// /// - returns: A signal that collects at most `count` values from `self`, /// forwards them as a single array and completes. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func collect(count count: Int) -> Signal<[Value], Error> { precondition(count > 0) return collect { values in values.count == count } } /// Collect values that pass the given predicate then forward them as a /// single array and complete. /// /// - note: When `self` completes any remaining values will be sent, the /// last array may not match `predicate`. Alternatively, if were not /// collected any values will sent an empty array of values. /// /// ```` /// let (signal, observer) = Signal.pipe() /// /// signal /// .collect { values in values.reduce(0, combine: +) == 8 } /// .observeNext { print($0) } /// /// observer.sendNext(1) /// observer.sendNext(3) /// observer.sendNext(4) /// observer.sendNext(7) /// observer.sendNext(1) /// observer.sendNext(5) /// observer.sendNext(6) /// observer.sendCompleted() /// /// // Output: /// // [1, 3, 4] /// // [7, 1] /// // [5, 6] /// ```` /// /// - parameters: /// - predicate: Predicate to match when values should be sent (returning /// `true`) or alternatively when they should be collected /// (where it should return `false`). The most recent value /// (`next`) is included in `values` and will be the end of /// the current array of values if the predicate returns /// `true`. /// /// - returns: A signal that collects values passing the predicate and, when /// `self` completes, forwards them as a single array and /// complets. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func collect(predicate: (values: [Value]) -> Bool) -> Signal<[Value], Error> { return Signal { observer in let state = CollectState() return self.observe { event in switch event { case let .Next(value): state.append(value) if predicate(values: state.values) { observer.sendNext(state.values) state.flush() } case .Completed: if !state.isEmpty { observer.sendNext(state.values) } observer.sendCompleted() case let .Failed(error): observer.sendFailed(error) case .Interrupted: observer.sendInterrupted() } } } } /// Repeatedly collect an array of values up to a matching `Next` value. /// Then forward them as single array and wait for next events. /// /// - note: When `self` completes any remaining values will be sent, the /// last array may not match `predicate`. Alternatively, if no /// values were collected an empty array will be sent. /// /// ```` /// let (signal, observer) = Signal.pipe() /// /// signal /// .collect { values, next in next == 7 } /// .observeNext { print($0) } /// /// observer.sendNext(1) /// observer.sendNext(1) /// observer.sendNext(7) /// observer.sendNext(7) /// observer.sendNext(5) /// observer.sendNext(6) /// observer.sendCompleted() /// /// // Output: /// // [1, 1] /// // [7] /// // [7, 5, 6] /// ```` /// /// - parameters: /// - predicate: Predicate to match when values should be sent (returning /// `true`) or alternatively when they should be collected /// (where it should return `false`). The most recent value /// (`next`) is not included in `values` and will be the /// start of the next array of values if the predicate /// returns `true`. /// /// - returns: A signal that will yield an array of values based on a /// predicate which matches the values collected and the next /// value. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func collect(predicate: (values: [Value], next: Value) -> Bool) -> Signal<[Value], Error> { return Signal { observer in let state = CollectState() return self.observe { event in switch event { case let .Next(value): if predicate(values: state.values, next: value) { observer.sendNext(state.values) state.flush() } state.append(value) case .Completed: if !state.isEmpty { observer.sendNext(state.values) } observer.sendCompleted() case let .Failed(error): observer.sendFailed(error) case .Interrupted: observer.sendInterrupted() } } } } /// Forward all events onto the given scheduler, instead of whichever /// scheduler they originally arrived upon. /// /// - parameters: /// - scheduler: A scheduler to deliver events on. /// /// - returns: A signal that will yield `self` values on provided scheduler. public func observeOn(scheduler: SchedulerType) -> Signal { return Signal { observer in return self.observe { event in scheduler.schedule { observer.action(event) } } } } } private final class CombineLatestState { var latestValue: Value? var completed = false } extension SignalType { private func observeWithStates(signalState: CombineLatestState, _ otherState: CombineLatestState, _ lock: NSLock, _ observer: Signal<(), Error>.Observer) -> Disposable? { return self.observe { event in switch event { case let .Next(value): lock.lock() signalState.latestValue = value if otherState.latestValue != nil { observer.sendNext() } lock.unlock() case let .Failed(error): observer.sendFailed(error) case .Completed: lock.lock() signalState.completed = true if otherState.completed { observer.sendCompleted() } lock.unlock() case .Interrupted: observer.sendInterrupted() } } } /// Combine the latest value of the receiver with the latest value from the /// given signal. /// /// - note: The returned signal will not send a value until both inputs have /// sent at least one value each. /// /// - note: If either signal is interrupted, the returned signal will also /// be interrupted. /// /// - parameters: /// - otherSignal: A signal to combine `self`'s value with. /// /// - returns: A signal that will yield a tuple containing values of `self` /// and given signal. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatestWith(otherSignal: Signal) -> Signal<(Value, U), Error> { return Signal { observer in let lock = NSLock() lock.name = "org.reactivecocoa.ReactiveCocoa.combineLatestWith" let signalState = CombineLatestState() let otherState = CombineLatestState() let onBothNext = { observer.sendNext((signalState.latestValue!, otherState.latestValue!)) } let observer = Signal<(), Error>.Observer(next: onBothNext, failed: observer.sendFailed, completed: observer.sendCompleted, interrupted: observer.sendInterrupted) let disposable = CompositeDisposable() disposable += self.observeWithStates(signalState, otherState, lock, observer) disposable += otherSignal.observeWithStates(otherState, signalState, lock, observer) return disposable } } /// Delay `Next` and `Completed` events by the given interval, forwarding /// them on the given scheduler. /// /// - note: `Failed` and `Interrupted` events are always scheduled /// immediately. /// /// - parameters: /// - interval: Interval to delay `Next` and `Completed` events by. /// - scheduler: A scheduler to deliver delayed events on. /// /// - returns: A signal that will delay `Next` and `Completed` events and /// will yield them on given scheduler. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func delay(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal { precondition(interval >= 0) return Signal { observer in return self.observe { event in switch event { case .Failed, .Interrupted: scheduler.schedule { observer.action(event) } case .Next, .Completed: let date = scheduler.currentDate.dateByAddingTimeInterval(interval) scheduler.scheduleAfter(date) { observer.action(event) } } } } } /// Skip first `count` number of values then act as usual. /// /// - parameters: /// - count: A number of values to skip. /// /// - returns: A signal that will skip the first `count` values, then /// forward everything afterward. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func skip(count: Int) -> Signal { precondition(count >= 0) if count == 0 { return signal } return Signal { observer in var skipped = 0 return self.observe { event in if case .Next = event where skipped < count { skipped += 1 } else { observer.action(event) } } } } /// Treat all Events from `self` as plain values, allowing them to be /// manipulated just like any other value. /// /// In other words, this brings Events “into the monad”. /// /// - note: When a Completed or Failed event is received, the resulting /// signal will send the Event itself and then complete. When an /// Interrupted event is received, the resulting signal will send /// the Event itself and then interrupt. /// /// - returns: A signal that sends events as its values. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func materialize() -> Signal, NoError> { return Signal { observer in return self.observe { event in observer.sendNext(event) switch event { case .Interrupted: observer.sendInterrupted() case .Completed, .Failed: observer.sendCompleted() case .Next: break } } } } } extension SignalType where Value: EventType, Error == NoError { /// Translate a signal of `Event` _values_ into a signal of those events /// themselves. /// /// - returns: A signal that sends values carried by `self` events. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func dematerialize() -> Signal { return Signal { observer in return self.observe { event in switch event { case let .Next(innerEvent): observer.action(innerEvent.event) case .Failed: fatalError("NoError is impossible to construct") case .Completed: observer.sendCompleted() case .Interrupted: observer.sendInterrupted() } } } } } extension SignalType { /// Inject side effects to be performed upon the specified signal events. /// /// - parameters: /// - event: A closure that accepts an event and is invoked on every /// received event. /// - failed: A closure that accepts error object and is invoked for /// `Failed` event. /// - completed: A closure that is invoked for `Completed` event. /// - interrupted: A closure that is invoked for `Interrupted` event. /// - terminated: A closure that is invoked for any terminating event. /// - disposed: A closure added as disposable when signal completes. /// - next: A closure that accepts a value from `Next` event. /// /// - returns: A signal with attached side-effects for given event cases. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func on(event event: (Event -> Void)? = nil, failed: (Error -> Void)? = nil, completed: (() -> Void)? = nil, interrupted: (() -> Void)? = nil, terminated: (() -> Void)? = nil, disposed: (() -> Void)? = nil, next: (Value -> Void)? = nil) -> Signal { return Signal { observer in let disposable = CompositeDisposable() _ = disposed.map(disposable.addDisposable) disposable += signal.observe { receivedEvent in event?(receivedEvent) switch receivedEvent { case let .Next(value): next?(value) case let .Failed(error): failed?(error) case .Completed: completed?() case .Interrupted: interrupted?() } if receivedEvent.isTerminating { terminated?() } observer.action(receivedEvent) } return disposable } } } private struct SampleState { var latestValue: Value? = nil var signalCompleted: Bool = false var samplerCompleted: Bool = false } extension SignalType { /// Forward the latest value from `self` with the value from `sampler` as a /// tuple, only when`sampler` sends a `Next` event. /// /// - note: If `sampler` fires before a value has been observed on `self`, /// nothing happens. /// /// - parameters: /// - sampler: A signal that will trigger the delivery of `Next` event /// from `self`. /// /// - returns: A signal that will send values from `self` and `sampler`, /// sampled (possibly multiple times) by `sampler`, then complete /// once both input signals have completed, or interrupt if /// either input signal is interrupted. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func sampleWith(sampler: Signal) -> Signal<(Value, T), Error> { return Signal { observer in let state = Atomic(SampleState()) let disposable = CompositeDisposable() disposable += self.observe { event in switch event { case let .Next(value): state.modify { st in var st = st st.latestValue = value return st } case let .Failed(error): observer.sendFailed(error) case .Completed: let oldState = state.modify { st in var st = st st.signalCompleted = true return st } if oldState.samplerCompleted { observer.sendCompleted() } case .Interrupted: observer.sendInterrupted() } } disposable += sampler.observe { event in switch event { case .Next(let samplerValue): if let value = state.value.latestValue { observer.sendNext((value, samplerValue)) } case .Completed: let oldState = state.modify { st in var st = st st.samplerCompleted = true return st } if oldState.signalCompleted { observer.sendCompleted() } case .Interrupted: observer.sendInterrupted() case .Failed: break } } return disposable } } /// Forward the latest value from `self` whenever `sampler` sends a `Next` /// event. /// /// - note: If `sampler` fires before a value has been observed on `self`, /// nothing happens. /// /// - parameters: /// - sampler: A signal that will trigger the delivery of `Next` event /// from `self`. /// /// - returns: A signal that will send values from `self`, sampled (possibly /// multiple times) by `sampler`, then complete once both input /// signals have completed, or interrupt if either input signal /// is interrupted. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func sampleOn(sampler: Signal<(), NoError>) -> Signal { return sampleWith(sampler) .map { $0.0 } } /// Forward events from `self` until `trigger` sends a `Next` or /// `Completed` event, at which point the returned signal will complete. /// /// - parameters: /// - trigger: A signal whose `Next` or `Completed` events will stop the /// delivery of `Next` events from `self`. /// /// - returns: A signal that will deliver events until `trigger` sends /// `Next` or `Completed` events. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func takeUntil(trigger: Signal<(), NoError>) -> Signal { return Signal { observer in let disposable = CompositeDisposable() disposable += self.observe(observer) disposable += trigger.observe { event in switch event { case .Next, .Completed: observer.sendCompleted() case .Failed, .Interrupted: break } } return disposable } } /// Do not forward any values from `self` until `trigger` sends a `Next` or /// `Completed` event, at which point the returned signal behaves exactly /// like `signal`. /// /// - parameters: /// - trigger: A signal whose `Next` or `Completed` events will start the /// deliver of events on `self`. /// /// - returns: A signal that will deliver events once the `trigger` sends /// `Next` or `Completed` events. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func skipUntil(trigger: Signal<(), NoError>) -> Signal { return Signal { observer in let disposable = SerialDisposable() disposable.innerDisposable = trigger.observe { event in switch event { case .Next, .Completed: disposable.innerDisposable = self.observe(observer) case .Failed, .Interrupted: break } } return disposable } } /// Forward events from `self` with history: values of the returned signal /// are a tuples whose first member is the previous value and whose second member /// is the current value. `initial` is supplied as the first member when `self` /// sends its first value. /// /// - parameters: /// - initial: A value that will be combined with the first value sent by /// `self`. /// /// - returns: A signal that sends tuples that contain previous and current /// sent values of `self`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combinePrevious(initial: Value) -> Signal<(Value, Value), Error> { return scan((initial, initial)) { previousCombinedValues, newValue in return (previousCombinedValues.1, newValue) } } /// Send only the final value and then immediately completes. /// /// - parameters: /// - initial: Initial value for the accumulator. /// - combine: A closure that accepts accumulator and sent value of /// `self`. /// /// - returns: A signal that sends accumulated value after `self` completes. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func reduce(initial: U, _ combine: (U, Value) -> U) -> Signal { // We need to handle the special case in which `signal` sends no values. // We'll do that by sending `initial` on the output signal (before // taking the last value). let (scannedSignalWithInitialValue, outputSignalObserver) = Signal.pipe() let outputSignal = scannedSignalWithInitialValue.takeLast(1) // Now that we've got takeLast() listening to the piped signal, send // that initial value. outputSignalObserver.sendNext(initial) // Pipe the scanned input signal into the output signal. scan(initial, combine).observe(outputSignalObserver) return outputSignal } /// Aggregate values into a single combined value. When `self` emits its /// first value, `combine` is invoked with `initial` as the first argument /// and that emitted value as the second argument. The result is emitted /// from the signal returned from `scan`. That result is then passed to /// `combine` as the first argument when the next value is emitted, and so /// on. /// /// - parameters: /// - initial: Initial value for the accumulator. /// - combine: A closure that accepts accumulator and sent value of /// `self`. /// /// - returns: A signal that sends accumulated value each time `self` emits /// own value. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func scan(initial: U, _ combine: (U, Value) -> U) -> Signal { return Signal { observer in var accumulator = initial return self.observe { event in observer.action(event.map { value in accumulator = combine(accumulator, value) return accumulator }) } } } } extension SignalType where Value: Equatable { /// Forward only those values from `self` which are not duplicates of the /// immedately preceding value. /// /// - note: The first value is always forwarded. /// /// - returns: A signal that does not send two equal values sequentially. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func skipRepeats() -> Signal { return skipRepeats(==) } } extension SignalType { /// Forward only those values from `self` which do not pass `isRepeat` with /// respect to the previous value. /// /// - note: The first value is always forwarded. /// /// - parameters: /// - isRepeate: A closure that accepts previous and current values of /// `self` and returns `Bool` whether these values are /// repeating. /// /// - returns: A signal that forwards only those values that fail given /// `isRepeat` predicate. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func skipRepeats(isRepeat: (Value, Value) -> Bool) -> Signal { return self .scan((nil, false)) { (accumulated: (Value?, Bool), next: Value) -> (value: Value?, repeated: Bool) in switch accumulated.0 { case nil: return (next, false) case let prev? where isRepeat(prev, next): return (prev, true) case _?: return (Optional(next), false) } } .filter { !$0.repeated } .map { $0.value } .ignoreNil() } /// Do not forward any values from `self` until `predicate` returns false, /// at which point the returned signal behaves exactly like `signal`. /// /// - parameters: /// - predicate: A closure that accepts a value and returns whether `self` /// should still not forward that value to a `signal`. /// /// - returns: A signal that sends only forwarded values from `self`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func skipWhile(predicate: Value -> Bool) -> Signal { return Signal { observer in var shouldSkip = true return self.observe { event in switch event { case let .Next(value): shouldSkip = shouldSkip && predicate(value) if !shouldSkip { fallthrough } case .Failed, .Completed, .Interrupted: observer.action(event) } } } } /// Forward events from `self` until `replacement` begins sending events. /// /// - parameters: /// - replacement: A signal to wait to wait for values from and start /// sending them as a replacement to `self`'s values. /// /// - returns: A signal which passes through `Next`, `Failed`, and /// `Interrupted` events from `self` until `replacement` sends /// an event, at which point the returned signal will send that /// event and switch to passing through events from `replacement` /// instead, regardless of whether `self` has sent events /// already. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func takeUntilReplacement(replacement: Signal) -> Signal { return Signal { observer in let disposable = CompositeDisposable() let signalDisposable = self.observe { event in switch event { case .Completed: break case .Next, .Failed, .Interrupted: observer.action(event) } } disposable += signalDisposable disposable += replacement.observe { event in signalDisposable?.dispose() observer.action(event) } return disposable } } /// Wait until `self` completes and then forward the final `count` values /// on the returned signal. /// /// - parameters: /// - count: Number of last events to send after `self` completes. /// /// - returns: A signal that receives up to `count` values from `self` /// after `self` completes. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func takeLast(count: Int) -> Signal { return Signal { observer in var buffer: [Value] = [] buffer.reserveCapacity(count) return self.observe { event in switch event { case let .Next(value): // To avoid exceeding the reserved capacity of the buffer, // we remove then add. Remove elements until we have room to // add one more. while (buffer.count + 1) > count { buffer.removeAtIndex(0) } buffer.append(value) case let .Failed(error): observer.sendFailed(error) case .Completed: buffer.forEach(observer.sendNext) observer.sendCompleted() case .Interrupted: observer.sendInterrupted() } } } } /// Forward any values from `self` until `predicate` returns false, at which /// point the returned signal will complete. /// /// - parameters: /// - predicate: A closure that accepts value and returns `Bool` value /// whether `self` should forward it to `signal` and continue /// sending other events. /// /// - returns: A signal that sends events until the values sent by `self` /// pass the given `predicate`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func takeWhile(predicate: Value -> Bool) -> Signal { return Signal { observer in return self.observe { event in if let value = event.value where !predicate(value) { observer.sendCompleted() } else { observer.action(event) } } } } } private struct ZipState { var values: (left: [Left], right: [Right]) = ([], []) var isCompleted: (left: Bool, right: Bool) = (false, false) var isFinished: Bool { return (isCompleted.left && values.left.isEmpty) || (isCompleted.right && values.right.isEmpty) } } extension SignalType { /// Zip elements of two signals into pairs. The elements of any Nth pair /// are the Nth elements of the two input signals. /// /// - parameters: /// - otherSignal: A signal to zip values with. /// /// - returns: A signal that sends tuples of `self` and `otherSignal`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zipWith(otherSignal: Signal) -> Signal<(Value, U), Error> { return Signal { observer in let state = Atomic(ZipState()) let disposable = CompositeDisposable() let flush = { var tuple: (Value, U)? var isFinished = false state.modify { state in guard !state.values.left.isEmpty && !state.values.right.isEmpty else { isFinished = state.isFinished return state } var state = state tuple = (state.values.left.removeFirst(), state.values.right.removeFirst()) isFinished = state.isFinished return state } if let tuple = tuple { observer.sendNext(tuple) } if isFinished { observer.sendCompleted() } } let onFailed = observer.sendFailed let onInterrupted = observer.sendInterrupted disposable += self.observe { event in switch event { case let .Next(value): state.modify { state in var state = state state.values.left.append(value) return state } flush() case let .Failed(error): onFailed(error) case .Completed: state.modify { state in var state = state state.isCompleted.left = true return state } flush() case .Interrupted: onInterrupted() } } disposable += otherSignal.observe { event in switch event { case let .Next(value): state.modify { state in var state = state state.values.right.append(value) return state } flush() case let .Failed(error): onFailed(error) case .Completed: state.modify { state in var state = state state.isCompleted.right = true return state } flush() case .Interrupted: onInterrupted() } } return disposable } } /// Apply `operation` to values from `self` with `Success`ful results /// forwarded on the returned signal and `Failure`s sent as `Failed` events. /// /// - parameters: /// - operation: A closure that accepts a value and returns a `Result`. /// /// - returns: A signal that receives `Success`ful `Result` as `Next` event /// and `Failure` as `Failed` event. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func attempt(operation: Value -> Result<(), Error>) -> Signal { return attemptMap { value in return operation(value).map { return value } } } /// Apply `operation` to values from `self` with `Success`ful results mapped /// on the returned signal and `Failure`s sent as `Failed` events. /// /// - parameters: /// - operation: A closure that accepts a value and returns a result of /// a mapped value as `Success`. /// /// - returns: A signal that sends mapped values from `self` if returned /// `Result` is `Success`ful, `Failed` events otherwise. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func attemptMap(operation: Value -> Result) -> Signal { return Signal { observer in self.observe { event in switch event { case let .Next(value): operation(value).analysis( ifSuccess: observer.sendNext, ifFailure: observer.sendFailed ) case let .Failed(error): observer.sendFailed(error) case .Completed: observer.sendCompleted() case .Interrupted: observer.sendInterrupted() } } } } /// Throttle values sent by the receiver, so that at least `interval` /// seconds pass between each, then forwards them on the given scheduler. /// /// - note: If multiple values are received before the interval has elapsed, /// the latest value is the one that will be passed on. /// /// - note: If the input signal terminates while a value is being throttled, /// that value will be discarded and the returned signal will /// terminate immediately. /// /// - parameters: /// - interval: Number of seconds to wait between sent values. /// - scheduler: A scheduler to deliver events on. /// /// - returns: A signal that sends values at least `interval` seconds /// appart on a given scheduler. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func throttle(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal { precondition(interval >= 0) return Signal { observer in let state: Atomic> = Atomic(ThrottleState()) let schedulerDisposable = SerialDisposable() let disposable = CompositeDisposable() disposable.addDisposable(schedulerDisposable) disposable += self.observe { event in guard let value = event.value else { schedulerDisposable.innerDisposable = scheduler.schedule { observer.action(event) } return } var scheduleDate: NSDate! state.modify { state in var state = state state.pendingValue = value let proposedScheduleDate = state.previousDate?.dateByAddingTimeInterval(interval) ?? scheduler.currentDate scheduleDate = proposedScheduleDate.laterDate(scheduler.currentDate) return state } schedulerDisposable.innerDisposable = scheduler.scheduleAfter(scheduleDate) { let previousState = state.modify { state in var state = state if state.pendingValue != nil { state.pendingValue = nil state.previousDate = scheduleDate } return state } if let pendingValue = previousState.pendingValue { observer.sendNext(pendingValue) } } } return disposable } } /// Debounce values sent by the receiver, such that at least `interval` /// seconds pass after the receiver has last sent a value, then forward the /// latest value on the given scheduler. /// /// - note: If multiple values are received before the interval has elapsed, /// the latest value is the one that will be passed on. /// /// - note: If the input signal terminates while a value is being debounced, /// that value will be discarded and the returned signal will /// terminate immediately. /// /// - parameters: /// - interval: A number of seconds to wait before sending a value. /// - scheduler: A scheduler to send values on. /// /// - returns: A signal that sends values that are sent from `self` at least /// `interval` seconds apart. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func debounce(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal { precondition(interval >= 0) return self .materialize() .flatMap(.Latest) { event -> SignalProducer, NoError> in if event.isTerminating { return SignalProducer(value: event).observeOn(scheduler) } else { return SignalProducer(value: event).delay(interval, onScheduler: scheduler) } } .dematerialize() } } extension SignalType { /// Forward only those values from `self` that have unique identities across /// the set of all values that have been seen. /// /// - note: This causes the identities to be retained to check for /// uniqueness. /// /// - parameters: /// - transform: A closure that accepts a value and returns identity /// value. /// /// - returns: A signal that sends unique values during its lifetime. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func uniqueValues(transform: Value -> Identity) -> Signal { return Signal { observer in var seenValues: Set = [] return self .observe { event in switch event { case let .Next(value): let identity = transform(value) if !seenValues.contains(identity) { seenValues.insert(identity) fallthrough } case .Failed, .Completed, .Interrupted: observer.action(event) } } } } } extension SignalType where Value: Hashable { /// Forward only those values from `self` that are unique across the set of /// all values that have been seen. /// /// - note: This causes the values to be retained to check for uniqueness. /// Providing a function that returns a unique value for each sent /// value can help you reduce the memory footprint. /// /// - returns: A signal that sends unique values during its lifetime. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func uniqueValues() -> Signal { return uniqueValues { $0 } } } private struct ThrottleState { var previousDate: NSDate? = nil var pendingValue: Value? = nil } /// Combine the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal) -> Signal<(A, B), Error> { return a.combineLatestWith(b) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal) -> Signal<(A, B, C), Error> { return combineLatest(a, b) .combineLatestWith(c) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal) -> Signal<(A, B, C, D), Error> { return combineLatest(a, b, c) .combineLatestWith(d) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal) -> Signal<(A, B, C, D, E), Error> { return combineLatest(a, b, c, d) .combineLatestWith(e) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal) -> Signal<(A, B, C, D, E, F), Error> { return combineLatest(a, b, c, d, e) .combineLatestWith(f) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal) -> Signal<(A, B, C, D, E, F, G), Error> { return combineLatest(a, b, c, d, e, f) .combineLatestWith(g) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal, _ h: Signal) -> Signal<(A, B, C, D, E, F, G, H), Error> { return combineLatest(a, b, c, d, e, f, g) .combineLatestWith(h) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal, _ h: Signal, _ i: Signal) -> Signal<(A, B, C, D, E, F, G, H, I), Error> { return combineLatest(a, b, c, d, e, f, g, h) .combineLatestWith(i) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal, _ h: Signal, _ i: Signal, _ j: Signal) -> Signal<(A, B, C, D, E, F, G, H, I, J), Error> { return combineLatest(a, b, c, d, e, f, g, h, i) .combineLatestWith(j) .map(repack) } /// Combines the values of all the given signals, in the manner described by /// `combineLatestWith`. No events will be sent if the sequence is empty. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func combineLatest>(signals: S) -> Signal<[Value], Error> { var generator = signals.generate() if let first = generator.next() { let initial = first.map { [$0] } return GeneratorSequence(generator).reduce(initial) { signal, next in signal.combineLatestWith(next).map { $0.0 + [$0.1] } } } return .never } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal) -> Signal<(A, B), Error> { return a.zipWith(b) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal) -> Signal<(A, B, C), Error> { return zip(a, b) .zipWith(c) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal) -> Signal<(A, B, C, D), Error> { return zip(a, b, c) .zipWith(d) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal) -> Signal<(A, B, C, D, E), Error> { return zip(a, b, c, d) .zipWith(e) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal) -> Signal<(A, B, C, D, E, F), Error> { return zip(a, b, c, d, e) .zipWith(f) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal) -> Signal<(A, B, C, D, E, F, G), Error> { return zip(a, b, c, d, e, f) .zipWith(g) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal, _ h: Signal) -> Signal<(A, B, C, D, E, F, G, H), Error> { return zip(a, b, c, d, e, f, g) .zipWith(h) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal, _ h: Signal, _ i: Signal) -> Signal<(A, B, C, D, E, F, G, H, I), Error> { return zip(a, b, c, d, e, f, g, h) .zipWith(i) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip(a: Signal, _ b: Signal, _ c: Signal, _ d: Signal, _ e: Signal, _ f: Signal, _ g: Signal, _ h: Signal, _ i: Signal, _ j: Signal) -> Signal<(A, B, C, D, E, F, G, H, I, J), Error> { return zip(a, b, c, d, e, f, g, h, i) .zipWith(j) .map(repack) } /// Zips the values of all the given signals, in the manner described by /// `zipWith`. No events will be sent if the sequence is empty. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func zip>(signals: S) -> Signal<[Value], Error> { var generator = signals.generate() if let first = generator.next() { let initial = first.map { [$0] } return GeneratorSequence(generator).reduce(initial) { signal, next in signal.zipWith(next).map { $0.0 + [$0.1] } } } return .never } extension SignalType { /// Forward events from `self` until `interval`. Then if signal isn't /// completed yet, fails with `error` on `scheduler`. /// /// - note: If the interval is 0, the timeout will be scheduled immediately. /// The signal must complete synchronously (or on a faster /// scheduler) to avoid the timeout. /// /// - parameters: /// - error: Error to send with `Failed` event if `self` is not completed /// when `interval` passes. /// - interval: Number of seconds to wait for `self` to complete. /// - scheudler: A scheduler to deliver error on. /// /// - returns: A signal that sends events for at most `interval` seconds, /// then, if not `Completed` - sends `error` with `Failed` event /// on `scheduler`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func timeoutWithError(error: Error, afterInterval interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal { precondition(interval >= 0) return Signal { observer in let disposable = CompositeDisposable() let date = scheduler.currentDate.dateByAddingTimeInterval(interval) disposable += scheduler.scheduleAfter(date) { observer.sendFailed(error) } disposable += self.observe(observer) return disposable } } } extension SignalType where Error == NoError { /// Promote a signal that does not generate failures into one that can. /// /// - note: This does not actually cause failures to be generated for the /// given signal, but makes it easier to combine with other signals /// that may fail; for example, with operators like /// `combineLatestWith`, `zipWith`, `flatten`, etc. /// /// - parameters: /// - _ An `ErrorType`. /// /// - returns: A signal that has an instantiatable `ErrorType`. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func promoteErrors(_: F.Type) -> Signal { return Signal { observer in return self.observe { event in switch event { case let .Next(value): observer.sendNext(value) case .Failed: fatalError("NoError is impossible to construct") case .Completed: observer.sendCompleted() case .Interrupted: observer.sendInterrupted() } } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/SignalProducer.swift ================================================ import Foundation import Result /// A SignalProducer creates Signals that can produce values of type `Value` /// and/or fail with errors of type `Error`. If no failure should be possible, /// `NoError` can be specified for `Error`. /// /// SignalProducers can be used to represent operations or tasks, like network /// requests, where each invocation of `start()` will create a new underlying /// operation. This ensures that consumers will receive the results, versus a /// plain Signal, where the results might be sent before any observers are /// attached. /// /// Because of the behavior of `start()`, different Signals created from the /// producer may see a different version of Events. The Events may arrive in a /// different order between Signals, or the stream might be completely /// different! public struct SignalProducer { public typealias ProducedSignal = Signal private let startHandler: (Signal.Observer, CompositeDisposable) -> Void /// Initializes a `SignalProducer` that will emit the same events as the /// given signal. /// /// If the Disposable returned from `start()` is disposed or a terminating /// event is sent to the observer, the given signal will be disposed. /// /// - parameters: /// - signal: A signal to observe after starting the producer. public init(signal: S) { self.init { observer, disposable in disposable += signal.observe(observer) } } /// Initializes a SignalProducer that will invoke the given closure once for /// each invocation of `start()`. /// /// The events that the closure puts into the given observer will become /// the events sent by the started `Signal` to its observers. /// /// - note: If the `Disposable` returned from `start()` is disposed or a /// terminating event is sent to the observer, the given /// `CompositeDisposable` will be disposed, at which point work /// should be interrupted and any temporary resources cleaned up. /// /// - parameters: /// - startHandler: A closure that accepts observer and a disposable. public init(_ startHandler: (Signal.Observer, CompositeDisposable) -> Void) { self.startHandler = startHandler } /// Creates a producer for a `Signal` that will immediately send one value /// then complete. /// /// - parameters: /// - value: A value that should be sent by the `Signal` in a `Next` /// event. public init(value: Value) { self.init { observer, disposable in observer.sendNext(value) observer.sendCompleted() } } /// Creates a producer for a `Signal` that will immediately fail with the /// given error. /// /// - parameters: /// - error: An error that should be sent by the `Signal` in a `Failed` /// event. public init(error: Error) { self.init { observer, disposable in observer.sendFailed(error) } } /// Creates a producer for a Signal that will immediately send one value /// then complete, or immediately fail, depending on the given Result. /// /// - parameters: /// - result: A `Result` instance that will send either `Next` event if /// `result` is `Success`ful or `Failed` event if `result` is a /// `Failure`. public init(result: Result) { switch result { case let .Success(value): self.init(value: value) case let .Failure(error): self.init(error: error) } } /// Creates a producer for a Signal that will immediately send the values /// from the given sequence, then complete. /// /// - parameters: /// - values: A sequence of values that a `Signal` will send as separate /// `Next` events and then complete. public init(values: S) { self.init { observer, disposable in for value in values { observer.sendNext(value) if disposable.disposed { break } } observer.sendCompleted() } } /// Creates a producer for a Signal that will immediately send the values /// from the given sequence, then complete. /// /// - parameters: /// - first: First value for the `Signal` to send. /// - second: Second value for the `Signal` to send. /// - tail: Rest of the values to be sent by the `Signal`. public init(values first: Value, _ second: Value, _ tail: Value...) { self.init(values: [ first, second ] + tail) } /// A producer for a Signal that will immediately complete without sending /// any values. public static var empty: SignalProducer { return self.init { observer, disposable in observer.sendCompleted() } } /// A producer for a Signal that never sends any events to its observers. public static var never: SignalProducer { return self.init { _ in return } } /// Create a queue for events that replays them when new signals are /// created from the returned producer. /// /// When values are put into the returned observer (observer), they will be /// added to an internal buffer. If the buffer is already at capacity, the /// earliest (oldest) value will be dropped to make room for the new value. /// /// Signals created from the returned producer will stay alive until a /// terminating event is added to the queue. If the queue does not contain /// such an event when the Signal is started, all values sent to the /// returned observer will be automatically forwarded to the Signal’s /// observers until a terminating event is received. /// /// - note: After a terminating event has been added to the queue, the /// observer will not add any further events. This _does not_ count /// against the value capacity so no buffered values will be dropped /// on termination. /// /// - precondition: `capacity` must be non-negative integer. /// /// - parameters: /// - capacity: Maximum number of values to buffer. /// /// - returns: A tuple of `SignalProducer` to replay values from and /// an `observer` to put replayable values to. @available(*, deprecated, message="Use properties instead. 'buffer' will be removed in RAC 5.0") public static func buffer(capacity: Int) -> (SignalProducer, Signal.Observer) { precondition(capacity >= 0, "Invalid capacity: \(capacity)") // Used as an atomic variable so we can remove observers without needing // to run on a serial queue. let state: Atomic> = Atomic(BufferState()) let producer = self.init { observer, disposable in // Assigned to when replay() is invoked synchronously below. var token: RemovalToken? let replayBuffer = ReplayBuffer() var replayValues: [Value] = [] var replayToken: RemovalToken? var next = state.modify { state in var state = state replayValues = state.values if replayValues.isEmpty { token = state.observers?.insert(observer) } else { replayToken = state.replayBuffers.insert(replayBuffer) } return state } while !replayValues.isEmpty { replayValues.forEach(observer.sendNext) next = state.modify { state in var state = state replayValues = replayBuffer.values replayBuffer.values = [] if replayValues.isEmpty { if let replayToken = replayToken { state.replayBuffers.removeValueForToken(replayToken) } token = state.observers?.insert(observer) } return state } } if let terminationEvent = next.terminationEvent { observer.action(terminationEvent) } if let token = token { disposable += { state.modify { state in var state = state state.observers?.removeValueForToken(token) return state } } } } let bufferingObserver: Signal.Observer = Observer { event in let originalState = state.modify { state in var state = state if let value = event.value { state.addValue(value, upToCapacity: capacity) } else { // Disconnect all observers and prevent future // attachments. state.terminationEvent = event state.observers = nil } return state } originalState.observers?.forEach { $0.action(event) } } return (producer, bufferingObserver) } /// Create a `SignalProducer` that will attempt the given operation once for /// each invocation of `start()`. /// /// Upon success, the started signal will send the resulting value then /// complete. Upon failure, the started signal will fail with the error that /// occurred. /// /// - parameters: /// - operation: A closure that returns instance of `Result`. /// /// - returns: A `SignalProducer` that will forward `Success`ful `result` as /// `Next` event and then complete or `Failed` event if `result` /// is a `Failure`. public static func attempt(operation: () -> Result) -> SignalProducer { return self.init { observer, disposable in operation().analysis(ifSuccess: { value in observer.sendNext(value) observer.sendCompleted() }, ifFailure: { error in observer.sendFailed(error) }) } } /// Create a Signal from the producer, pass it into the given closure, /// then start sending events on the Signal when the closure has returned. /// /// The closure will also receive a disposable which can be used to /// interrupt the work associated with the signal and immediately send an /// `Interrupted` event. /// /// - parameters: /// - setUp: A closure that accepts a `signal` and `disposable`. public func startWithSignal(@noescape setUp: (Signal, Disposable) -> Void) { let (signal, observer) = Signal.pipe() // Disposes of the work associated with the SignalProducer and any // upstream producers. let producerDisposable = CompositeDisposable() // Directly disposed of when `start()` or `startWithSignal()` is // disposed. let cancelDisposable = ActionDisposable { observer.sendInterrupted() producerDisposable.dispose() } setUp(signal, cancelDisposable) if cancelDisposable.disposed { return } let wrapperObserver: Signal.Observer = Observer { event in observer.action(event) if event.isTerminating { // Dispose only after notifying the Signal, so disposal // logic is consistently the last thing to run. producerDisposable.dispose() } } startHandler(wrapperObserver, producerDisposable) } } /// A uniquely identifying token for Observers that are replaying values in /// BufferState. private final class ReplayBuffer { private var values: [Value] = [] } private struct BufferState { /// All values in the buffer. var values: [Value] = [] /// Any terminating event sent to the buffer. /// /// This will be nil if termination has not occurred. var terminationEvent: Event? /// The observers currently attached to the buffered producer, or nil if the /// producer was terminated. var observers: Bag.Observer>? = Bag() /// The set of unused replay token identifiers. var replayBuffers: Bag> = Bag() /// Appends a new value to the buffer, trimming it down to the given /// capacity if necessary. mutating func addValue(value: Value, upToCapacity capacity: Int) { precondition(capacity >= 0) for buffer in replayBuffers { buffer.values.append(value) } if capacity == 0 { values = [] return } if capacity == 1 { values = [ value ] return } values.append(value) let overflow = values.count - capacity if overflow > 0 { values.removeRange(0.. { get } /// Creates a Signal from the producer, passes it into the given closure, /// then starts sending events on the Signal when the closure has returned. func startWithSignal(@noescape setUp: (Signal, Disposable) -> Void) } extension SignalProducer: SignalProducerType { public var producer: SignalProducer { return self } } extension SignalProducerType { /// Create a Signal from the producer, then attach the given observer to /// the `Signal` as an observer. /// /// - parameters: /// - observer: An observer to attach to produced signal. /// /// - returns: A `Disposable` which can be used to interrupt the work /// associated with the signal and immediately send an /// `Interrupted` event. public func start(observer: Signal.Observer = Signal.Observer()) -> Disposable { var disposable: Disposable! startWithSignal { signal, innerDisposable in signal.observe(observer) disposable = innerDisposable } return disposable } /// Convenience override for start(_:) to allow trailing-closure style /// invocations. /// /// - parameters: /// - observerAction: A closure that accepts `Event` sent by the produced /// signal. /// /// - returns: A `Disposable` which can be used to interrupt the work /// associated with the signal and immediately send an /// `Interrupted` event. public func start(observerAction: Signal.Observer.Action) -> Disposable { return start(Observer(observerAction)) } @available(*, deprecated, message="This SignalProducer may emit errors which must be handled explicitly, or observed using startWithResult:") public func startWithNext(next: Value -> Void) -> Disposable { return start(Observer(next: next)) } /// Create a Signal from the producer, then add an observer to the `Signal`, /// which will invoke the given callback when `Next` or `Failed` events are /// received. /// /// - parameters: /// - result: A closure that accepts a `result` that contains a `Success` /// case for `Next` events or `Failure` case for `Failed` event. /// /// - returns: A Disposable which can be used to interrupt the work /// associated with the Signal, and prevent any future callbacks /// from being invoked. public func startWithResult(result: Result -> Void) -> Disposable { return start( Observer( next: { result(.Success($0)) }, failed: { result(.Failure($0)) } ) ) } /// Create a Signal from the producer, then add exactly one observer to the /// Signal, which will invoke the given callback when a `Completed` event is /// received. /// /// - parameters: /// - completed: A closure that will be envoked when produced signal sends /// `Completed` event. /// /// - returns: A `Disposable` which can be used to interrupt the work /// associated with the signal. public func startWithCompleted(completed: () -> Void) -> Disposable { return start(Observer(completed: completed)) } /// Creates a Signal from the producer, then adds exactly one observer to /// the Signal, which will invoke the given callback when a `failed` event /// is received. /// /// - parameters: /// - failed: A closure that accepts an error object. /// /// - returns: A `Disposable` which can be used to interrupt the work /// associated with the signal. public func startWithFailed(failed: Error -> Void) -> Disposable { return start(Observer(failed: failed)) } /// Creates a Signal from the producer, then adds exactly one observer to /// the Signal, which will invoke the given callback when an `Interrupted` /// event is received. /// /// - parameters: /// - interrupted: A closure that is invoked when `Interrupted` event is /// received. /// /// - returns: A `Disposable` which can be used to interrupt the work /// associated with the signal. public func startWithInterrupted(interrupted: () -> Void) -> Disposable { return start(Observer(interrupted: interrupted)) } } extension SignalProducerType where Error == NoError { /// Create a Signal from the producer, then add exactly one observer to /// the Signal, which will invoke the given callback when `Next` events are /// received. /// /// - parameters: /// - next: A closure that accepts a value carried by `Next` event. /// /// - returns: A `Disposable` which can be used to interrupt the work /// associated with the Signal, and prevent any future callbacks /// from being invoked. public func startWithNext(next: Value -> Void) -> Disposable { return start(Observer(next: next)) } } extension SignalProducerType { /// Lift an unary Signal operator to operate upon SignalProducers instead. /// /// In other words, this will create a new `SignalProducer` which will apply /// the given `Signal` operator to _every_ created `Signal`, just as if the /// operator had been applied to each `Signal` yielded from `start()`. /// /// - parameters: /// - transform: An unary operator to lift. /// /// - returns: A signal producer that applies signal's operator to every /// created signal. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func lift(transform: Signal -> Signal) -> SignalProducer { return SignalProducer { observer, outerDisposable in self.startWithSignal { signal, innerDisposable in outerDisposable.addDisposable(innerDisposable) transform(signal).observe(observer) } } } /// Lift a binary Signal operator to operate upon SignalProducers instead. /// /// In other words, this will create a new `SignalProducer` which will apply /// the given `Signal` operator to _every_ `Signal` created from the two /// producers, just as if the operator had been applied to each `Signal` /// yielded from `start()`. /// /// - note: starting the returned producer will start the receiver of the /// operator, which may not be adviseable for some operators. /// /// - parameters: /// - transform: A binary operator to lift. /// /// - returns: A binary operator that operates on two signal producers. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func lift(transform: Signal -> Signal -> Signal) -> SignalProducer -> SignalProducer { return liftRight(transform) } /// Right-associative lifting of a binary signal operator over producers. /// That is, the argument producer will be started before the receiver. When /// both producers are synchronous this order can be important depending on /// the operator to generate correct results. @warn_unused_result(message="Did you forget to call `start` on the producer?") private func liftRight(transform: Signal -> Signal -> Signal) -> SignalProducer -> SignalProducer { return { otherProducer in return SignalProducer { observer, outerDisposable in self.startWithSignal { signal, disposable in outerDisposable.addDisposable(disposable) otherProducer.startWithSignal { otherSignal, otherDisposable in outerDisposable.addDisposable(otherDisposable) transform(signal)(otherSignal).observe(observer) } } } } } /// Left-associative lifting of a binary signal operator over producers. /// That is, the receiver will be started before the argument producer. When /// both producers are synchronous this order can be important depending on /// the operator to generate correct results. @warn_unused_result(message="Did you forget to call `start` on the producer?") private func liftLeft(transform: Signal -> Signal -> Signal) -> SignalProducer -> SignalProducer { return { otherProducer in return SignalProducer { observer, outerDisposable in otherProducer.startWithSignal { otherSignal, otherDisposable in outerDisposable.addDisposable(otherDisposable) self.startWithSignal { signal, disposable in outerDisposable.addDisposable(disposable) transform(signal)(otherSignal).observe(observer) } } } } } /// Lift a binary Signal operator to operate upon a Signal and a /// SignalProducer instead. /// /// In other words, this will create a new `SignalProducer` which will apply /// the given `Signal` operator to _every_ `Signal` created from the two /// producers, just as if the operator had been applied to each `Signal` /// yielded from `start()`. /// /// - parameters: /// - transform: A binary operator to lift. /// /// - returns: A binary operator that works on `Signal` and returns /// `SignalProducer`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func lift(transform: Signal -> Signal -> Signal) -> Signal -> SignalProducer { return { otherSignal in return SignalProducer { observer, outerDisposable in let (wrapperSignal, otherSignalObserver) = Signal.pipe() // Avoid memory leak caused by the direct use of the given // signal. // // See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2758 // for the details. outerDisposable += ActionDisposable { otherSignalObserver.sendInterrupted() } outerDisposable += otherSignal.observe(otherSignalObserver) self.startWithSignal { signal, disposable in outerDisposable += disposable outerDisposable += transform(signal)(wrapperSignal).observe(observer) } } } } /// Map each value in the producer to a new value. /// /// - parameters: /// - transform: A closure that accepts a value and returns a different /// value. /// /// - returns: A signal producer that, when started, will send a mapped /// value of `self.` @warn_unused_result(message="Did you forget to call `start` on the producer?") public func map(transform: Value -> U) -> SignalProducer { return lift { $0.map(transform) } } /// Map errors in the producer to a new error. /// /// - parameters: /// - transform: A closure that accepts an error object and returns a /// different error. /// /// - returns: A producer that emits errors of new type. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func mapError(transform: Error -> F) -> SignalProducer { return lift { $0.mapError(transform) } } /// Preserve only the values of the producer that pass the given predicate. /// /// - parameters: /// - predicate: A closure that accepts value and returns `Bool` denoting /// whether value has passed the test. /// /// - returns: A producer that, when started, will send only the values /// passing the given predicate. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func filter(predicate: Value -> Bool) -> SignalProducer { return lift { $0.filter(predicate) } } /// Yield the first `count` values from the input producer. /// /// - precondition: `count` must be non-negative number. /// /// - parameters: /// - count: A number of values to take from the signal. /// /// - returns: A producer that, when started, will yield the first `count` /// values from `self`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func take(count: Int) -> SignalProducer { return lift { $0.take(count) } } /// Yield an array of values when `self` completes. /// /// - note: When `self` completes without collecting any value, it will send /// an empty array of values. /// /// - returns: A producer that, when started, will yield an array of values /// when `self` completes. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func collect() -> SignalProducer<[Value], Error> { return lift { $0.collect() } } /// Yield an array of values until it reaches a certain count. /// /// - precondition: `count` should be greater than zero. /// /// - note: When the count is reached the array is sent and the signal /// starts over yielding a new array of values. /// /// - note: When `self` completes any remaining values will be sent, the /// last array may not have `count` values. Alternatively, if were /// not collected any values will sent an empty array of values. /// /// - returns: A producer that, when started, collects at most `count` /// values from `self`, forwards them as a single array and /// completes. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func collect(count count: Int) -> SignalProducer<[Value], Error> { precondition(count > 0) return lift { $0.collect(count: count) } } /// Yield an array of values based on a predicate which matches the values /// collected. /// /// - note: When `self` completes any remaining values will be sent, the /// last array may not match `predicate`. Alternatively, if were not /// collected any values will sent an empty array of values. /// /// ```` /// let (producer, observer) = SignalProducer.buffer(1) /// /// producer /// .collect { values in values.reduce(0, combine: +) == 8 } /// .startWithNext { print($0) } /// /// observer.sendNext(1) /// observer.sendNext(3) /// observer.sendNext(4) /// observer.sendNext(7) /// observer.sendNext(1) /// observer.sendNext(5) /// observer.sendNext(6) /// observer.sendCompleted() /// /// // Output: /// // [1, 3, 4] /// // [7, 1] /// // [5, 6] /// ```` /// /// - parameters: /// - predicate: Predicate to match when values should be sent (returning /// `true`) or alternatively when they should be collected /// (where it should return `false`). The most recent value /// (`next`) is included in `values` and will be the end of /// the current array of values if the predicate returns /// `true`. /// /// - returns: A producer that, when started, collects values passing the /// predicate and, when `self` completes, forwards them as a /// single array and complets. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func collect(predicate: (values: [Value]) -> Bool) -> SignalProducer<[Value], Error> { return lift { $0.collect(predicate) } } /// Yield an array of values based on a predicate which matches the values /// collected and the next value. /// /// - note: When `self` completes any remaining values will be sent, the /// last array may not match `predicate`. Alternatively, if no /// values were collected an empty array will be sent. /// /// ```` /// let (producer, observer) = SignalProducer.buffer(1) /// /// producer /// .collect { values, next in next == 7 } /// .startWithNext { print($0) } /// /// observer.sendNext(1) /// observer.sendNext(1) /// observer.sendNext(7) /// observer.sendNext(7) /// observer.sendNext(5) /// observer.sendNext(6) /// observer.sendCompleted() /// /// // Output: /// // [1, 1] /// // [7] /// // [7, 5, 6] /// ```` /// /// - parameters: /// - predicate: Predicate to match when values should be sent (returning /// `true`) or alternatively when they should be collected /// (where it should return `false`). The most recent value /// (`next`) is not included in `values` and will be the /// start of the next array of values if the predicate /// returns `true`. /// /// - returns: A signal that will yield an array of values based on a /// predicate which matches the values collected and the next /// value. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func collect(predicate: (values: [Value], next: Value) -> Bool) -> SignalProducer<[Value], Error> { return lift { $0.collect(predicate) } } /// Forward all events onto the given scheduler, instead of whichever /// scheduler they originally arrived upon. /// /// - parameters: /// - scheduler: A scheduler to deliver events on. /// /// - returns: A producer that, when started, will yield `self` values on /// provided scheduler. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func observeOn(scheduler: SchedulerType) -> SignalProducer { return lift { $0.observeOn(scheduler) } } /// Combine the latest value of the receiver with the latest value from the /// given producer. /// /// - note: The returned producer will not send a value until both inputs /// have sent at least one value each. /// /// - note: If either producer is interrupted, the returned producer will /// also be interrupted. /// /// - parameters: /// - otherProducer: A producer to combine `self`'s value with. /// /// - returns: A producer that, when started, will yield a tuple containing /// values of `self` and given producer. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatestWith(otherProducer: SignalProducer) -> SignalProducer<(Value, U), Error> { // This should be the implementation of this method: // return liftRight(Signal.combineLatestWith)(otherProducer) // // However, due to a Swift miscompilation (with `-O`) we need to inline `liftRight` here. // See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2751 for more details. // // This can be reverted once tests with -O don't crash. return SignalProducer { observer, outerDisposable in self.startWithSignal { signal, disposable in outerDisposable.addDisposable(disposable) otherProducer.startWithSignal { otherSignal, otherDisposable in outerDisposable.addDisposable(otherDisposable) signal.combineLatestWith(otherSignal).observe(observer) } } } } /// Combine the latest value of the receiver with the latest value from /// the given signal. /// /// - note: The returned producer will not send a value until both inputs /// have sent at least one value each. /// /// - note: If either input is interrupted, the returned producer will also /// be interrupted. /// /// - parameters: /// - otherSignal: A signal to combine `self`'s value with. /// /// - returns: A producer that, when started, will yield a tuple containing /// values of `self` and given signal. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatestWith(otherSignal: Signal) -> SignalProducer<(Value, U), Error> { return lift(Signal.combineLatestWith)(otherSignal) } /// Delay `Next` and `Completed` events by the given interval, forwarding /// them on the given scheduler. /// /// - note: `Failed` and `Interrupted` events are always scheduled /// immediately. /// /// - parameters: /// - interval: Interval to delay `Next` and `Completed` events by. /// - scheduler: A scheduler to deliver delayed events on. /// /// - returns: A producer that, when started, will delay `Next` and /// `Completed` events and will yield them on given scheduler. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func delay(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer { return lift { $0.delay(interval, onScheduler: scheduler) } } /// Skip the first `count` values, then forward everything afterward. /// /// - parameters: /// - count: A number of values to skip. /// /// - returns: A producer that, when started, will skip the first `count` /// values, then forward everything afterward. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func skip(count: Int) -> SignalProducer { return lift { $0.skip(count) } } /// Treats all Events from the input producer as plain values, allowing them /// to be manipulated just like any other value. /// /// In other words, this brings Events “into the monad.” /// /// - note: When a Completed or Failed event is received, the resulting /// producer will send the Event itself and then complete. When an /// `Interrupted` event is received, the resulting producer will /// send the `Event` itself and then interrupt. /// /// - returns: A producer that sends events as its values. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func materialize() -> SignalProducer, NoError> { return lift { $0.materialize() } } /// Forward the latest value from `self` with the value from `sampler` as a /// tuple, only when `sampler` sends a `Next` event. /// /// - note: If `sampler` fires before a value has been observed on `self`, /// nothing happens. /// /// - parameters: /// - sampler: A producer that will trigger the delivery of `Next` event /// from `self`. /// /// - returns: A producer that will send values from `self` and `sampler`, /// sampled (possibly multiple times) by `sampler`, then complete /// once both input producers have completed, or interrupt if /// either input producer is interrupted. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func sampleWith(sampler: SignalProducer) -> SignalProducer<(Value, T), Error> { return liftLeft(Signal.sampleWith)(sampler) } /// Forward the latest value from `self` with the value from `sampler` as a /// tuple, only when `sampler` sends a `Next` event. /// /// - note: If `sampler` fires before a value has been observed on `self`, /// nothing happens. /// /// - parameters: /// - sampler: A signal that will trigger the delivery of `Next` event /// from `self`. /// /// - returns: A producer that, when started, will send values from `self` /// and `sampler`, sampled (possibly multiple times) by /// `sampler`, then complete once both input producers have /// completed, or interrupt if either input producer is /// interrupted. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func sampleWith(sampler: Signal) -> SignalProducer<(Value, T), Error> { return lift(Signal.sampleWith)(sampler) } /// Forward the latest value from `self` whenever `sampler` sends a `Next` /// event. /// /// - note: If `sampler` fires before a value has been observed on `self`, /// nothing happens. /// /// - parameters: /// - sampler: A producer that will trigger the delivery of `Next` event /// from `self`. /// /// - returns: A producer that, when started, will send values from `self`, /// sampled (possibly multiple times) by `sampler`, then complete /// once both input producers have completed, or interrupt if /// either input producer is interrupted. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func sampleOn(sampler: SignalProducer<(), NoError>) -> SignalProducer { return liftLeft(Signal.sampleOn)(sampler) } /// Forward the latest value from `self` whenever `sampler` sends a `Next` /// event. /// /// - note: If `sampler` fires before a value has been observed on `self`, /// nothing happens. /// /// - parameters: /// - trigger: A signal whose `Next` or `Completed` events will start the /// deliver of events on `self`. /// /// - returns: A producer that will send values from `self`, sampled /// (possibly multiple times) by `sampler`, then complete once /// both inputs have completed, or interrupt if either input is /// interrupted. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func sampleOn(sampler: Signal<(), NoError>) -> SignalProducer { return lift(Signal.sampleOn)(sampler) } /// Forward events from `self` until `trigger` sends a `Next` or `Completed` /// event, at which point the returned producer will complete. /// /// - parameters: /// - trigger: A producer whose `Next` or `Completed` events will stop the /// delivery of `Next` events from `self`. /// /// - returns: A producer that will deliver events until `trigger` sends /// `Next` or `Completed` events. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func takeUntil(trigger: SignalProducer<(), NoError>) -> SignalProducer { // This should be the implementation of this method: // return liftRight(Signal.takeUntil)(trigger) // // However, due to a Swift miscompilation (with `-O`) we need to inline // `liftRight` here. // // See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2751 for // more details. // // This can be reverted once tests with -O work correctly. return SignalProducer { observer, outerDisposable in self.startWithSignal { signal, disposable in outerDisposable.addDisposable(disposable) trigger.startWithSignal { triggerSignal, triggerDisposable in outerDisposable.addDisposable(triggerDisposable) signal.takeUntil(triggerSignal).observe(observer) } } } } /// Forward events from `self` until `trigger` sends a Next or Completed /// event, at which point the returned producer will complete. /// /// - parameters: /// - trigger: A signal whose `Next` or `Completed` events will stop the /// delivery of `Next` events from `self`. /// /// - returns: A producer that will deliver events until `trigger` sends /// `Next` or `Completed` events. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func takeUntil(trigger: Signal<(), NoError>) -> SignalProducer { return lift(Signal.takeUntil)(trigger) } /// Do not forward any values from `self` until `trigger` sends a `Next` /// or `Completed`, at which point the returned producer behaves exactly /// like `producer`. /// /// - parameters: /// - trigger: A producer whose `Next` or `Completed` events will start /// the deliver of events on `self`. /// /// - returns: A producer that will deliver events once the `trigger` sends /// `Next` or `Completed` events. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func skipUntil(trigger: SignalProducer<(), NoError>) -> SignalProducer { return liftRight(Signal.skipUntil)(trigger) } /// Do not forward any values from `self` until `trigger` sends a `Next` /// or `Completed`, at which point the returned signal behaves exactly like /// `signal`. /// /// - parameters: /// - trigger: A signal whose `Next` or `Completed` events will start the /// deliver of events on `self`. /// /// - returns: A producer that will deliver events once the `trigger` sends /// `Next` or `Completed` events. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func skipUntil(trigger: Signal<(), NoError>) -> SignalProducer { return lift(Signal.skipUntil)(trigger) } /// Forward events from `self` with history: values of the returned producer /// are a tuple whose first member is the previous value and whose second /// member is the current value. `initial` is supplied as the first member /// when `self` sends its first value. /// /// - parameters: /// - initial: A value that will be combined with the first value sent by /// `self`. /// /// - returns: A producer that sends tuples that contain previous and /// current sent values of `self`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combinePrevious(initial: Value) -> SignalProducer<(Value, Value), Error> { return lift { $0.combinePrevious(initial) } } /// Send only the final value and then immediately completes. /// /// - parameters: /// - initial: Initial value for the accumulator. /// - combine: A closure that accepts accumulator and sent value of /// `self`. /// /// - returns: A producer that sends accumulated value after `self` /// completes. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func reduce(initial: U, _ combine: (U, Value) -> U) -> SignalProducer { return lift { $0.reduce(initial, combine) } } /// Aggregate `self`'s values into a single combined value. When `self` /// emits its first value, `combine` is invoked with `initial` as the first /// argument and that emitted value as the second argument. The result is /// emitted from the producer returned from `scan`. That result is then /// passed to `combine` as the first argument when the next value is /// emitted, and so on. /// /// - parameters: /// - initial: Initial value for the accumulator. /// - combine: A closure that accepts accumulator and sent value of /// `self`. /// /// - returns: A producer that sends accumulated value each time `self` /// emits own value. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func scan(initial: U, _ combine: (U, Value) -> U) -> SignalProducer { return lift { $0.scan(initial, combine) } } /// Forward only those values from `self` which do not pass `isRepeat` with /// respect to the previous value. /// /// - note: The first value is always forwarded. /// /// - returns: A producer that does not send two equal values sequentially. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func skipRepeats(isRepeat: (Value, Value) -> Bool) -> SignalProducer { return lift { $0.skipRepeats(isRepeat) } } /// Do not forward any values from `self` until `predicate` returns false, /// at which point the returned producer behaves exactly like `self`. /// /// - parameters: /// - predicate: A closure that accepts a value and returns whether `self` /// should still not forward that value to a `producer`. /// /// - returns: A producer that sends only forwarded values from `self`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func skipWhile(predicate: Value -> Bool) -> SignalProducer { return lift { $0.skipWhile(predicate) } } /// Forward events from `self` until `replacement` begins sending events. /// /// - parameters: /// - replacement: A producer to wait to wait for values from and start /// sending them as a replacement to `self`'s values. /// /// - returns: A producer which passes through `Next`, `Failed`, and /// `Interrupted` events from `self` until `replacement` sends an /// event, at which point the returned producer will send that /// event and switch to passing through events from `replacement` /// instead, regardless of whether `self` has sent events /// already. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func takeUntilReplacement(replacement: SignalProducer) -> SignalProducer { return liftRight(Signal.takeUntilReplacement)(replacement) } /// Forwards events from `self` until `replacement` begins sending events. /// /// - parameters: /// - replacement: A signal to wait to wait for values from and start /// sending them as a replacement to `self`'s values. /// /// - returns: A producer which passes through `Next`, `Failed`, and /// `Interrupted` events from `self` until `replacement` sends an /// event, at which point the returned producer will send that /// event and switch to passing through events from `replacement` /// instead, regardless of whether `self` has sent events /// already. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func takeUntilReplacement(replacement: Signal) -> SignalProducer { return lift(Signal.takeUntilReplacement)(replacement) } /// Wait until `self` completes and then forward the final `count` values /// on the returned producer. /// /// - parameters: /// - count: Number of last events to send after `self` completes. /// /// - returns: A producer that receives up to `count` values from `self` /// after `self` completes. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func takeLast(count: Int) -> SignalProducer { return lift { $0.takeLast(count) } } /// Forward any values from `self` until `predicate` returns false, at which /// point the returned producer will complete. /// /// - parameters: /// - predicate: A closure that accepts value and returns `Bool` value /// whether `self` should forward it to `signal` and continue /// sending other events. /// /// - returns: A producer that sends events until the values sent by `self` /// pass the given `predicate`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func takeWhile(predicate: Value -> Bool) -> SignalProducer { return lift { $0.takeWhile(predicate) } } /// Zip elements of two producers into pairs. The elements of any Nth pair /// are the Nth elements of the two input producers. /// /// - parameters: /// - otherProducer: A producer to zip values with. /// /// - returns: A producer that sends tuples of `self` and `otherProducer`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zipWith(otherProducer: SignalProducer) -> SignalProducer<(Value, U), Error> { return liftRight(Signal.zipWith)(otherProducer) } /// Zip elements of this producer and a signal into pairs. The elements of /// any Nth pair are the Nth elements of the two. /// /// - parameters: /// - otherSignal: A signal to zip values with. /// /// - returns: A producer that sends tuples of `self` and `otherSignal`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zipWith(otherSignal: Signal) -> SignalProducer<(Value, U), Error> { return lift(Signal.zipWith)(otherSignal) } /// Apply `operation` to values from `self` with `Success`ful results /// forwarded on the returned producer and `Failure`s sent as `Failed` /// events. /// /// - parameters: /// - operation: A closure that accepts a value and returns a `Result`. /// /// - returns: A producer that receives `Success`ful `Result` as `Next` /// event and `Failure` as `Failed` event. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func attempt(operation: Value -> Result<(), Error>) -> SignalProducer { return lift { $0.attempt(operation) } } /// Apply `operation` to values from `self` with `Success`ful results /// mapped on the returned producer and `Failure`s sent as `Failed` events. /// /// - parameters: /// - operation: A closure that accepts a value and returns a result of /// a mapped value as `Success`. /// /// - returns: A producer that sends mapped values from `self` if returned /// `Result` is `Success`ful, `Failed` events otherwise. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func attemptMap(operation: Value -> Result) -> SignalProducer { return lift { $0.attemptMap(operation) } } /// Throttle values sent by the receiver, so that at least `interval` /// seconds pass between each, then forwards them on the given scheduler. /// /// - note: If multiple values are received before the interval has elapsed, /// the latest value is the one that will be passed on. /// /// - norw: If `self` terminates while a value is being throttled, that /// value will be discarded and the returned producer will terminate /// immediately. /// /// - parameters: /// - interval: Number of seconds to wait between sent values. /// - scheduler: A scheduler to deliver events on. /// /// - returns: A producer that sends values at least `interval` seconds /// appart on a given scheduler. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func throttle(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer { return lift { $0.throttle(interval, onScheduler: scheduler) } } /// Debounce values sent by the receiver, such that at least `interval` /// seconds pass after the receiver has last sent a value, then /// forward the latest value on the given scheduler. /// /// - note: If multiple values are received before the interval has elapsed, /// the latest value is the one that will be passed on. /// /// - note: If `self` terminates while a value is being debounced, /// that value will be discarded and the returned producer will /// terminate immediately. /// /// - parameters: /// - interval: A number of seconds to wait before sending a value. /// - scheduler: A scheduler to send values on. /// /// - returns: A producer that sends values that are sent from `self` at /// least `interval` seconds apart. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func debounce(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer { return lift { $0.debounce(interval, onScheduler: scheduler) } } /// Forward events from `self` until `interval`. Then if producer isn't /// completed yet, fails with `error` on `scheduler`. /// /// - note: If the interval is 0, the timeout will be scheduled immediately. /// The producer must complete synchronously (or on a faster /// scheduler) to avoid the timeout. /// /// - parameters: /// - error: Error to send with `Failed` event if `self` is not completed /// when `interval` passes. /// - interval: Number of seconds to wait for `self` to complete. /// - scheudler: A scheduler to deliver error on. /// /// - returns: A producer that sends events for at most `interval` seconds, /// then, if not `Completed` - sends `error` with `Failed` event /// on `scheduler`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func timeoutWithError(error: Error, afterInterval interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer { return lift { $0.timeoutWithError(error, afterInterval: interval, onScheduler: scheduler) } } } extension SignalProducerType where Value: OptionalType { /// Unwraps non-`nil` values and forwards them on the returned signal, `nil` /// values are dropped. /// /// - returns: A producer that sends only non-nil values. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func ignoreNil() -> SignalProducer { return lift { $0.ignoreNil() } } } extension SignalProducerType where Value: EventType, Error == NoError { /// The inverse of materialize(), this will translate a producer of `Event` /// _values_ into a producer of those events themselves. /// /// - returns: A producer that sends values carried by `self` events. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func dematerialize() -> SignalProducer { return lift { $0.dematerialize() } } } extension SignalProducerType where Error == NoError { /// Promote a producer that does not generate failures into one that can. /// /// - note: This does not actually cause failers to be generated for the /// given producer, but makes it easier to combine with other /// producers that may fail; for example, with operators like /// `combineLatestWith`, `zipWith`, `flatten`, etc. /// /// - parameters: /// - _ An `ErrorType`. /// /// - returns: A producer that has an instantiatable `ErrorType`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func promoteErrors(_: F.Type) -> SignalProducer { return lift { $0.promoteErrors(F) } } } extension SignalProducerType where Value: Equatable { /// Forward only those values from `self` which are not duplicates of the /// immedately preceding value. /// /// - note: The first value is always forwarded. /// /// - returns: A producer that does not send two equal values sequentially. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func skipRepeats() -> SignalProducer { return lift { $0.skipRepeats() } } } extension SignalProducerType { /// Forward only those values from `self` that have unique identities across /// the set of all values that have been seen. /// /// - note: This causes the identities to be retained to check for /// uniqueness. /// /// - parameters: /// - transform: A closure that accepts a value and returns identity /// value. /// /// - returns: A producer that sends unique values during its lifetime. @warn_unused_result(message="Did you forget to call `observe` on the signal?") public func uniqueValues(transform: Value -> Identity) -> SignalProducer { return lift { $0.uniqueValues(transform) } } } extension SignalProducerType where Value: Hashable { /// Forward only those values from `self` that are unique across the set of /// all values that have been seen. /// /// - note: This causes the values to be retained to check for uniqueness. /// Providing a function that returns a unique value for each sent /// value can help you reduce the memory footprint. /// /// - returns: A producer that sends unique values during its lifetime. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func uniqueValues() -> SignalProducer { return lift { $0.uniqueValues() } } } /// Create a repeating timer of the given interval, with a reasonable default /// leeway, sending updates on the given scheduler. /// /// - note: This timer will never complete naturally, so all invocations of /// `start()` must be disposed to avoid leaks. /// /// - precondition: Interval must be non-negative number. /// /// - parameters: /// - interval: An interval between invocations. /// - scheduler: A scheduler to deliver events on. /// /// - returns: A producer that sends `NSDate` values every `interval` seconds. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func timer(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer { // Apple's "Power Efficiency Guide for Mac Apps" recommends a leeway of // at least 10% of the timer interval. return timer(interval, onScheduler: scheduler, withLeeway: interval * 0.1) } /// Creates a repeating timer of the given interval, sending updates on the /// given scheduler. /// /// - note: This timer will never complete naturally, so all invocations of /// `start()` must be disposed to avoid leaks. /// /// - precondition: Interval must be non-negative number. /// /// - precondition: Leeway must be non-negative number. /// /// - parameters: /// - interval: An interval between invocations. /// - scheduler: A scheduler to deliver events on. /// - leeway: Interval leeway. Apple's "Power Efficiency Guide for Mac Apps" /// recommends a leeway of at least 10% of the timer interval. /// /// - returns: A producer that sends `NSDate` values every `interval` seconds. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func timer(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType, withLeeway leeway: NSTimeInterval) -> SignalProducer { precondition(interval >= 0) precondition(leeway >= 0) return SignalProducer { observer, compositeDisposable in compositeDisposable += scheduler.scheduleAfter(scheduler.currentDate.dateByAddingTimeInterval(interval), repeatingEvery: interval, withLeeway: leeway) { observer.sendNext(scheduler.currentDate) } } } extension SignalProducerType { /// Injects side effects to be performed upon the specified producer events. /// /// - parameters: /// - started: A closrure that is invoked when producer is started. /// - event: A closure that accepts an event and is invoked on every /// received event. /// - failed: A closure that accepts error object and is invoked for /// `Failed` event. /// - completed: A closure that is invoked for `Completed` event. /// - interrupted: A closure that is invoked for `Interrupted` event. /// - terminated: A closure that is invoked for any terminating event. /// - disposed: A closure added as disposable when signal completes. /// - next: A closure that accepts a value from `Next` event. /// /// - returns: A producer with attached side-effects for given event cases. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func on(started started: (() -> Void)? = nil, event: (Event -> Void)? = nil, failed: (Error -> Void)? = nil, completed: (() -> Void)? = nil, interrupted: (() -> Void)? = nil, terminated: (() -> Void)? = nil, disposed: (() -> Void)? = nil, next: (Value -> Void)? = nil) -> SignalProducer { return SignalProducer { observer, compositeDisposable in started?() self.startWithSignal { signal, disposable in compositeDisposable += disposable compositeDisposable += signal .on( event: event, failed: failed, completed: completed, interrupted: interrupted, terminated: terminated, disposed: disposed, next: next ) .observe(observer) } } } /// Start the returned producer on the given `Scheduler`. /// /// - note: This implies that any side effects embedded in the producer will /// be performed on the given scheduler as well. /// /// - note: Events may still be sent upon other schedulers — this merely /// affects where the `start()` method is run. /// /// - parameters: /// - scheduler: A scheduler to deliver events on. /// /// - returns: A producer that will deliver events on given `scheduler` when /// started. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func startOn(scheduler: SchedulerType) -> SignalProducer { return SignalProducer { observer, compositeDisposable in compositeDisposable += scheduler.schedule { self.startWithSignal { signal, signalDisposable in compositeDisposable.addDisposable(signalDisposable) signal.observe(observer) } } } } } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer) -> SignalProducer<(A, B), Error> { return a.combineLatestWith(b) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer) -> SignalProducer<(A, B, C), Error> { return combineLatest(a, b) .combineLatestWith(c) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer) -> SignalProducer<(A, B, C, D), Error> { return combineLatest(a, b, c) .combineLatestWith(d) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer) -> SignalProducer<(A, B, C, D, E), Error> { return combineLatest(a, b, c, d) .combineLatestWith(e) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer) -> SignalProducer<(A, B, C, D, E, F), Error> { return combineLatest(a, b, c, d, e) .combineLatestWith(f) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G), Error> { return combineLatest(a, b, c, d, e, f) .combineLatestWith(g) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer, _ h: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G, H), Error> { return combineLatest(a, b, c, d, e, f, g) .combineLatestWith(h) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer, _ h: SignalProducer, _ i: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G, H, I), Error> { return combineLatest(a, b, c, d, e, f, g, h) .combineLatestWith(i) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer, _ h: SignalProducer, _ i: SignalProducer, _ j: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G, H, I, J), Error> { return combineLatest(a, b, c, d, e, f, g, h, i) .combineLatestWith(j) .map(repack) } /// Combines the values of all the given producers, in the manner described by /// `combineLatestWith`. Will return an empty `SignalProducer` if the sequence /// is empty. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func combineLatest>(producers: S) -> SignalProducer<[Value], Error> { var generator = producers.generate() if let first = generator.next() { let initial = first.map { [$0] } return GeneratorSequence(generator).reduce(initial) { producer, next in producer.combineLatestWith(next).map { $0.0 + [$0.1] } } } return .empty } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer) -> SignalProducer<(A, B), Error> { return a.zipWith(b) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer) -> SignalProducer<(A, B, C), Error> { return zip(a, b) .zipWith(c) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer) -> SignalProducer<(A, B, C, D), Error> { return zip(a, b, c) .zipWith(d) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer) -> SignalProducer<(A, B, C, D, E), Error> { return zip(a, b, c, d) .zipWith(e) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer) -> SignalProducer<(A, B, C, D, E, F), Error> { return zip(a, b, c, d, e) .zipWith(f) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G), Error> { return zip(a, b, c, d, e, f) .zipWith(g) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer, _ h: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G, H), Error> { return zip(a, b, c, d, e, f, g) .zipWith(h) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer, _ h: SignalProducer, _ i: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G, H, I), Error> { return zip(a, b, c, d, e, f, g, h) .zipWith(i) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip(a: SignalProducer, _ b: SignalProducer, _ c: SignalProducer, _ d: SignalProducer, _ e: SignalProducer, _ f: SignalProducer, _ g: SignalProducer, _ h: SignalProducer, _ i: SignalProducer, _ j: SignalProducer) -> SignalProducer<(A, B, C, D, E, F, G, H, I, J), Error> { return zip(a, b, c, d, e, f, g, h, i) .zipWith(j) .map(repack) } /// Zips the values of all the given producers, in the manner described by /// `zipWith`. Will return an empty `SignalProducer` if the sequence is empty. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func zip>(producers: S) -> SignalProducer<[Value], Error> { var generator = producers.generate() if let first = generator.next() { let initial = first.map { [$0] } return GeneratorSequence(generator).reduce(initial) { producer, next in producer.zipWith(next).map { $0.0 + [$0.1] } } } return .empty } extension SignalProducerType { /// Repeat `self` a total of `count` times. In other words, start producer /// `count` number of times, each one after previously started producer /// completes. /// /// - note: Repeating `1` time results in an equivalent signal producer. /// /// - note: Repeating `0` times results in a producer that instantly /// completes. /// /// - parameters: /// - count: Number of repetitions. /// /// - returns: A signal producer start sequentially starts `self` after /// previously started producer completes. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func times(count: Int) -> SignalProducer { precondition(count >= 0) if count == 0 { return .empty } else if count == 1 { return producer } return SignalProducer { observer, disposable in let serialDisposable = SerialDisposable() disposable.addDisposable(serialDisposable) func iterate(current: Int) { self.startWithSignal { signal, signalDisposable in serialDisposable.innerDisposable = signalDisposable signal.observe { event in if case .Completed = event { let remainingTimes = current - 1 if remainingTimes > 0 { iterate(remainingTimes) } else { observer.sendCompleted() } } else { observer.action(event) } } } } iterate(count) } } /// Ignore failures up to `count` times. /// /// - precondition: `count` must be non-negative integer. /// /// - parameters: /// - count: Number of retries. /// /// - returns: A signal producer that restarts up to `count` times. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func retry(count: Int) -> SignalProducer { precondition(count >= 0) if count == 0 { return producer } else { return flatMapError { _ in self.retry(count - 1) } } } /// Wait for completion of `self`, *then* forward all events from /// `replacement`. Any failure or interruption sent from `self` is /// forwarded immediately, in which case `replacement` will not be started, /// and none of its events will be be forwarded. /// /// - note: All values sent from `self` are ignored. /// /// - parameters: /// - replacement: A producer to start when `self` completes. /// /// - returns: A producer that sends events from `self` and then from /// `replacement` when `self` completes. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func then(replacement: SignalProducer) -> SignalProducer { return SignalProducer { observer, observerDisposable in self.startWithSignal { signal, signalDisposable in observerDisposable.addDisposable(signalDisposable) signal.observe { event in switch event { case let .Failed(error): observer.sendFailed(error) case .Completed: observerDisposable += replacement.start(observer) case .Interrupted: observer.sendInterrupted() case .Next: break } } } } } /// Start the producer, then block, waiting for the first value. /// /// When a single value or error is sent, the returned `Result` will /// represent those cases. However, when no values are sent, `nil` will be /// returned. /// /// - returns: Result when single `Next` or `Failed` event is received. /// `nil` when no events are received. @warn_unused_result(message="Did you forget to check the result?") public func first() -> Result? { return take(1).single() } /// Start the producer, then block, waiting for events: Next and /// Completed. /// /// When a single value or error is sent, the returned `Result` will /// represent those cases. However, when no values are sent, or when more /// than one value is sent, `nil` will be returned. /// /// - returns: Result when single `Next` or `Failed` event is received. /// `nil` when 0 or more than 1 events are received. @warn_unused_result(message="Did you forget to check the result?") public func single() -> Result? { let semaphore = dispatch_semaphore_create(0) var result: Result? take(2).start { event in switch event { case let .Next(value): if result != nil { // Move into failure state after recieving another value. result = nil return } result = .Success(value) case let .Failed(error): result = .Failure(error) dispatch_semaphore_signal(semaphore) case .Completed, .Interrupted: dispatch_semaphore_signal(semaphore) } } dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER) return result } /// Start the producer, then block, waiting for the last value. /// /// When a single value or error is sent, the returned `Result` will /// represent those cases. However, when no values are sent, `nil` will be /// returned. /// /// - returns: Result when single `Next` or `Failed` event is received. /// `nil` when no events are received. @warn_unused_result(message="Did you forget to check the result?") public func last() -> Result? { return takeLast(1).single() } /// Starts the producer, then blocks, waiting for completion. /// /// When a completion or error is sent, the returned `Result` will represent /// those cases. /// /// - returns: Result when single `Completion` or `Failed` event is /// received. @warn_unused_result(message="Did you forget to check the result?") public func wait() -> Result<(), Error> { return then(SignalProducer<(), Error>(value: ())).last() ?? .Success(()) } /// Creates a new `SignalProducer` that will multicast values emitted by /// the underlying producer, up to `capacity`. /// This means that all clients of this `SignalProducer` will see the same /// version of the emitted values/errors. /// /// The underlying `SignalProducer` will not be started until `self` is /// started for the first time. When subscribing to this producer, all /// previous values (up to `capacity`) will be emitted, followed by any new /// values. /// /// If you find yourself needing *the current value* (the last buffered /// value) you should consider using `PropertyType` instead, which, unlike /// this operator, will guarantee at compile time that there's always a /// buffered value. This operator is not recommended in most cases, as it /// will introduce an implicit relationship between the original client and /// the rest, so consider alternatives like `PropertyType`, or representing /// your stream using a `Signal` instead. /// /// This operator is only recommended when you absolutely need to introduce /// a layer of caching in front of another `SignalProducer`. /// /// - note: This operator has the same semantics as `SignalProducer.buffer`. /// /// - precondtion: `capacity` must be non-negative integer. /// /// - parameters: /// - capcity: Number of values to hold. /// /// - returns: A caching producer that will hold up to last `capacity` /// values. @warn_unused_result(message="Did you forget to call `start` on the producer?") public func replayLazily(capacity: Int) -> SignalProducer { precondition(capacity >= 0, "Invalid capacity: \(capacity)") var producer: SignalProducer? var producerObserver: SignalProducer.ProducedSignal.Observer? let lock = NSLock() lock.name = "org.reactivecocoa.ReactiveCocoa.SignalProducer.replayLazily" // This will go "out of scope" when the returned `SignalProducer` goes // out of scope. This lets us know when we're supposed to dispose the // underlying producer. This is necessary because `struct`s don't have // `deinit`. let token = DeallocationToken() return SignalProducer { observer, disposable in var token: DeallocationToken? = token let initializedProducer: SignalProducer let initializedObserver: SignalProducer.ProducedSignal.Observer let shouldStartUnderlyingProducer: Bool lock.lock() if let producer = producer, producerObserver = producerObserver { (initializedProducer, initializedObserver) = (producer, producerObserver) shouldStartUnderlyingProducer = false } else { let (producerTemp, observerTemp) = SignalProducer.buffer(capacity) (producer, producerObserver) = (producerTemp, observerTemp) (initializedProducer, initializedObserver) = (producerTemp, observerTemp) shouldStartUnderlyingProducer = true } lock.unlock() // subscribe `observer` before starting the underlying producer. disposable += initializedProducer.start(observer) disposable += { // Don't dispose of the original producer until all observers // have terminated. token = nil } if shouldStartUnderlyingProducer { self.takeUntil(token!.deallocSignal) .start(initializedObserver) } } } } private final class DeallocationToken { let (deallocSignal, observer) = Signal<(), NoError>.pipe() deinit { observer.sendCompleted() } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/TupleExtensions.swift ================================================ // // TupleExtensions.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-12-20. // Copyright (c) 2014 GitHub. All rights reserved. // /// Adds a value into an N-tuple, returning an (N+1)-tuple. /// /// Supports creating tuples up to 10 elements long. internal func repack(t: (A, B), value: C) -> (A, B, C) { return (t.0, t.1, value) } internal func repack(t: (A, B, C), value: D) -> (A, B, C, D) { return (t.0, t.1, t.2, value) } internal func repack(t: (A, B, C, D), value: E) -> (A, B, C, D, E) { return (t.0, t.1, t.2, t.3, value) } internal func repack(t: (A, B, C, D, E), value: F) -> (A, B, C, D, E, F) { return (t.0, t.1, t.2, t.3, t.4, value) } internal func repack(t: (A, B, C, D, E, F), value: G) -> (A, B, C, D, E, F, G) { return (t.0, t.1, t.2, t.3, t.4, t.5, value) } internal func repack(t: (A, B, C, D, E, F, G), value: H) -> (A, B, C, D, E, F, G, H) { return (t.0, t.1, t.2, t.3, t.4, t.5, t.6, value) } internal func repack(t: (A, B, C, D, E, F, G, H), value: I) -> (A, B, C, D, E, F, G, H, I) { return (t.0, t.1, t.2, t.3, t.4, t.5, t.6, t.7, value) } internal func repack(t: (A, B, C, D, E, F, G, H, I), value: J) -> (A, B, C, D, E, F, G, H, I, J) { return (t.0, t.1, t.2, t.3, t.4, t.5, t.6, t.7, t.8, value) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift ================================================ /*: > # IMPORTANT: To use `ReactiveCocoa.playground`, please: 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` 1. Open `ReactiveCocoa.xcworkspace` 1. Build `Result-Mac` scheme 1. Build `ReactiveCocoa-Mac` scheme 1. Finally open the `ReactiveCocoa.playground` 1. Choose `View > Show Debug Area` */ import Result import ReactiveCocoa import Foundation /*: ## Sandbox A place where you can build your sand castles 🏖. */ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.playground/Pages/Signal.xcplaygroundpage/Contents.swift ================================================ /*: > # IMPORTANT: To use `ReactiveCocoa.playground`, please: 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` 1. Open `ReactiveCocoa.xcworkspace` 1. Build `Result-Mac` scheme 1. Build `ReactiveCocoa-Mac` scheme 1. Finally open the `ReactiveCocoa.playground` 1. Choose `View > Show Debug Area` */ import Result import ReactiveCocoa import Foundation /*: ## Signal A **signal**, represented by the [`Signal`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/Signal.swift) type, is any series of [`Event`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/Event.swift) values over time that can be observed. Signals are generally used to represent event streams that are already “in progress”, like notifications, user input, etc. As work is performed or data is received, events are _sent_ on the signal, which pushes them out to any observers. All observers see the events at the same time. Users must observe a signal in order to access its events. Observing a signal does not trigger any side effects. In other words, signals are entirely producer-driven and push-based, and consumers (observers) cannot have any effect on their lifetime. While observing a signal, the user can only evaluate the events in the same order as they are sent on the signal. There is no random access to values of a signal. Signals can be manipulated by applying [primitives](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/BasicOperators.md) to them. Typical primitives to manipulate a single signal like `filter`, `map` and `reduce` are available, as well as primitives to manipulate multiple signals at once (`zip`). Primitives operate only on the `Next` events of a signal. The lifetime of a signal consists of any number of `Next` events, followed by one terminating event, which may be any one of `Failed`, `Completed`, or `Interrupted` (but not a combination). Terminating events are not included in the signal’s values—they must be handled specially. */ /*: ### `Subscription` A Signal represents and event stream that is already "in progress", sometimes also called "hot". This means, that a subscriber may miss events that have been sent before the subscription. Furthermore, the subscription to a signal does not trigger any side effects */ scopedExample("Subscription") { // Signal.pipe is a way to manually control a signal. the returned observer can be used to send values to the signal let (signal, observer) = Signal.pipe() let subscriber1 = Observer(next: { print("Subscriber 1 received \($0)") } ) let subscriber2 = Observer(next: { print("Subscriber 2 received \($0)") } ) print("Subscriber 1 subscribes to the signal") signal.observe(subscriber1) print("Send value `10` on the signal") // subscriber1 will receive the value observer.sendNext(10) print("Subscriber 2 subscribes to the signal") // Notice how nothing happens at this moment, i.e. subscriber2 does not receive the previously sent value signal.observe(subscriber2) print("Send value `20` on the signal") // Notice that now, subscriber1 and subscriber2 will receive the value observer.sendNext(20) } /*: ### `empty` A Signal that completes immediately without emitting any value. */ scopedExample("`empty`") { let emptySignal = Signal.empty let observer = Observer( failed: { _ in print("error not called") }, completed: { print("completed not called") }, interrupted: { print("interrupted called") }, next: { _ in print("next not called") } ) emptySignal.observe(observer) } /*: ### `never` A Signal that never sends any events to its observers. */ scopedExample("`never`") { let neverSignal = Signal.never let observer = Observer( failed: { _ in print("error not called") }, completed: { print("completed not called") }, interrupted: { print("interrupted not called") }, next: { _ in print("next not called") } ) neverSignal.observe(observer) } /*: ## `Operators` ### `uniqueValues` Forwards only those values from `self` that are unique across the set of all values that have been seen. Note: This causes the values to be retained to check for uniqueness. Providing a function that returns a unique value for each sent value can help you reduce the memory footprint. */ scopedExample("`uniqueValues`") { let (signal, observer) = Signal.pipe() let subscriber = Observer(next: { print("Subscriber received \($0)") } ) let uniqueSignal = signal.uniqueValues() uniqueSignal.observe(subscriber) observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) observer.sendNext(3) observer.sendNext(3) observer.sendNext(5) } /*: ### `map` Maps each value in the signal to a new value. */ scopedExample("`map`") { let (signal, observer) = Signal.pipe() let subscriber = Observer(next: { print("Subscriber received \($0)") } ) let mappedSignal = signal.map { $0 * 2 } mappedSignal.observe(subscriber) print("Send value `10` on the signal") observer.sendNext(10) } /*: ### `mapError` Maps errors in the signal to a new error. */ scopedExample("`mapError`") { let (signal, observer) = Signal.pipe() let subscriber = Observer(failed: { print("Subscriber received error: \($0)") } ) let mappedErrorSignal = signal.mapError { (error:NSError) -> NSError in let userInfo = [NSLocalizedDescriptionKey: "🔥"] let code = error.code + 10000 let mappedError = NSError(domain: "com.reactivecocoa.errordomain", code: code, userInfo: userInfo) return mappedError } mappedErrorSignal.observe(subscriber) print("Send error `NSError(domain: \"com.reactivecocoa.errordomain\", code: 4815, userInfo: nil)` on the signal") observer.sendFailed(NSError(domain: "com.reactivecocoa.errordomain", code: 4815, userInfo: nil)) } /*: ### `filter` Preserves only the values of the signal that pass the given predicate. */ scopedExample("`filter`") { let (signal, observer) = Signal.pipe() let subscriber = Observer(next: { print("Subscriber received \($0)") } ) // subscriber will only receive events with values greater than 12 let filteredSignal = signal.filter { $0 > 12 ? true : false } filteredSignal.observe(subscriber) observer.sendNext(10) observer.sendNext(11) observer.sendNext(12) observer.sendNext(13) observer.sendNext(14) } /*: ### `ignoreNil` Unwraps non-`nil` values and forwards them on the returned signal, `nil` values are dropped. */ scopedExample("`ignoreNil`") { let (signal, observer) = Signal.pipe() // note that the signal is of type `Int?` and observer is of type `Int`, given we're unwrapping // non-`nil` values let subscriber = Observer(next: { print("Subscriber received \($0)") } ) let ignoreNilSignal = signal.ignoreNil() ignoreNilSignal.observe(subscriber) observer.sendNext(1) observer.sendNext(nil) observer.sendNext(3) } /*: ### `take` Returns a signal that will yield the first `count` values from `self` */ scopedExample("`take`") { let (signal, observer) = Signal.pipe() let subscriber = Observer(next: { print("Subscriber received \($0)") } ) let takeSignal = signal.take(2) takeSignal.observe(subscriber) observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) } /*: ### `collect` Returns a signal that will yield an array of values when `self` completes. - Note: When `self` completes without collecting any value, it will send an empty array of values. */ scopedExample("`collect`") { let (signal, observer) = Signal.pipe() // note that the signal is of type `Int` and observer is of type `[Int]` given we're "collecting" // `Int` values for the lifetime of the signal let subscriber = Observer<[Int], NoError>(next: { print("Subscriber received \($0)") } ) let collectSignal = signal.collect() collectSignal.observe(subscriber) observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) observer.sendCompleted() } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift ================================================ /*: > # IMPORTANT: To use `ReactiveCocoa.playground`, please: 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` 1. Open `ReactiveCocoa.xcworkspace` 1. Build `Result-Mac` scheme 1. Build `ReactiveCocoa-Mac` scheme 1. Finally open the `ReactiveCocoa.playground` 1. Choose `View > Show Debug Area` */ import Result import ReactiveCocoa import Foundation /*: ## SignalProducer A **signal producer**, represented by the [`SignalProducer`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/SignalProducer.swift) type, creates [signals](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/Signal.swift) and performs side effects. They can be used to represent operations or tasks, like network requests, where each invocation of `start()` will create a new underlying operation, and allow the caller to observe the result(s). The `startWithSignal()` variant gives access to the produced signal, allowing it to be observed multiple times if desired. Because of the behavior of `start()`, each signal created from the same producer may see a different ordering or version of events, or the stream might even be completely different! Unlike a plain signal, no work is started (and thus no events are generated) until an observer is attached, and the work is restarted anew for each additional observer. Starting a signal producer returns a [disposable](#disposables) that can be used to interrupt/cancel the work associated with the produced signal. Just like signals, signal producers can also be manipulated via primitives like `map`, `filter`, etc. Every signal primitive can be “lifted” to operate upon signal producers instead, using the `lift` method. Furthermore, there are additional primitives that control _when_ and _how_ work is started—for example, `times`. */ /*: ### `Subscription` A SignalProducer represents an operation that can be started on demand. Starting the operation returns a Signal on which the result(s) of the operation can be observed. This behavior is sometimes also called "cold". This means that a subscriber will never miss any values sent by the SignalProducer. */ scopedExample("Subscription") { let producer = SignalProducer { observer, _ in print("New subscription, starting operation") observer.sendNext(1) observer.sendNext(2) } let subscriber1 = Observer(next: { print("Subscriber 1 received \($0)") }) let subscriber2 = Observer(next: { print("Subscriber 2 received \($0)") }) print("Subscriber 1 subscribes to producer") producer.start(subscriber1) print("Subscriber 2 subscribes to producer") // Notice, how the producer will start the work again producer.start(subscriber2) } /*: ### `empty` A producer for a Signal that will immediately complete without sending any values. */ scopedExample("`empty`") { let emptyProducer = SignalProducer.empty let observer = Observer( failed: { _ in print("error not called") }, completed: { print("completed called") }, next: { _ in print("next not called") } ) emptyProducer.start(observer) } /*: ### `never` A producer for a Signal that never sends any events to its observers. */ scopedExample("`never`") { let neverProducer = SignalProducer.never let observer = Observer( failed: { _ in print("error not called") }, completed: { print("completed not called") }, next: { _ in print("next not called") } ) neverProducer.start(observer) } /*: ### `buffer` Creates a queue for events that replays them when new signals are created from the returned producer. When values are put into the returned observer (observer), they will be added to an internal buffer. If the buffer is already at capacity, the earliest (oldest) value will be dropped to make room for the new value. Signals created from the returned producer will stay alive until a terminating event is added to the queue. If the queue does not contain such an event when the Signal is started, all values sent to the returned observer will be automatically forwarded to the Signal’s observers until a terminating event is received. After a terminating event has been added to the queue, the observer will not add any further events. This _does not_ count against the value capacity so no buffered values will be dropped on termination. */ scopedExample("`buffer`") { let (producer, observer) = SignalProducer.buffer(1) observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) var values: [Int] = [] producer.start { event in switch event { case let .Next(value): values.append(value) default: break } } print(values) observer.sendNext(4) print(values) } /*: ### `startWithSignal` Creates a Signal from the producer, passes it into the given closure, then starts sending events on the Signal when the closure has returned. The closure will also receive a disposable which can be used to interrupt the work associated with the signal and immediately send an `Interrupted` event. */ scopedExample("`startWithSignal`") { var started = false var value: Int? SignalProducer(value: 42) .on(next: { value = $0 }) .startWithSignal { signal, disposable in print(value) } print(value) } /*: ### `startWithNext` Creates a Signal from the producer, then adds exactly one observer to the Signal, which will invoke the given callback when `next` events are received. Returns a Disposable which can be used to interrupt the work associated with the Signal, and prevent any future callbacks from being invoked. */ scopedExample("`startWithNext`") { SignalProducer(value: 42) .startWithNext { value in print(value) } } /*: ### `startWithCompleted` Creates a Signal from the producer, then adds exactly one observer to the Signal, which will invoke the given callback when a `completed` event is received. Returns a Disposable which can be used to interrupt the work associated with the Signal. */ scopedExample("`startWithCompleted`") { SignalProducer(value: 42) .startWithCompleted { print("completed called") } } /*: ### `startWithFailed` Creates a Signal from the producer, then adds exactly one observer to the Signal, which will invoke the given callback when a `failed` event is received. Returns a Disposable which can be used to interrupt the work associated with the Signal. */ scopedExample("`startWithFailed`") { SignalProducer(error: NSError(domain: "example", code: 42, userInfo: nil)) .startWithFailed { error in print(error) } } /*: ### `startWithInterrupted` Creates a Signal from the producer, then adds exactly one observer to the Signal, which will invoke the given callback when an `interrupted` event is received. Returns a Disposable which can be used to interrupt the work associated with the Signal. */ scopedExample("`startWithInterrupted`") { let disposable = SignalProducer.never .startWithInterrupted { print("interrupted called") } disposable.dispose() } /*: ### `lift` Lifts an unary Signal operator to operate upon SignalProducers instead. In other words, this will create a new SignalProducer which will apply the given Signal operator to _every_ created Signal, just as if the operator had been applied to each Signal yielded from start(). */ scopedExample("`lift`") { var counter = 0 let transform: Signal -> Signal = { signal in counter = 42 return signal } SignalProducer(value: 0) .lift(transform) .startWithNext { _ in print(counter) } } /*: ### `map` Maps each value in the producer to a new value. */ scopedExample("`map`") { SignalProducer(value: 1) .map { $0 + 41 } .startWithNext { value in print(value) } } /*: ### `mapError` Maps errors in the producer to a new error. */ scopedExample("`mapError`") { SignalProducer(error: NSError(domain: "mapError", code: 42, userInfo: nil)) .mapError { Error.Example($0.description) } .startWithFailed { error in print(error) } } /*: ### `filter` Preserves only the values of the producer that pass the given predicate. */ scopedExample("`filter`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .filter { $0 > 3} .startWithNext { value in print(value) } } /*: ### `take` Returns a producer that will yield the first `count` values from the input producer. */ scopedExample("`take`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .take(2) .startWithNext { value in print(value) } } /*: ### `observeOn` Forwards all events onto the given scheduler, instead of whichever scheduler they originally arrived upon. */ scopedExample("`observeOn`") { let baseProducer = SignalProducer(values: [ 1, 2, 3, 4 ]) let completion = { print("is main thread? \(NSThread.currentThread().isMainThread)") } if #available(OSX 10.10, *) { baseProducer .observeOn(QueueScheduler(qos: QOS_CLASS_DEFAULT, name: "test")) .startWithCompleted(completion) } baseProducer .startWithCompleted(completion) } /*: ### `collect()` Returns a producer that will yield an array of values until it completes. */ scopedExample("`collect()`") { SignalProducer { observer, disposable in observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) observer.sendCompleted() } .collect() .startWithNext { value in print(value) } } /*: ### `collect(count:)` Returns a producer that will yield an array of values until it reaches a certain count. */ scopedExample("`collect(count:)`") { SignalProducer { observer, disposable in observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) observer.sendCompleted() } .collect(count: 2) .startWithNext { value in print(value) } } /*: ### `collect(predicate:)` matching values inclusively Returns a producer that will yield an array of values based on a predicate which matches the values collected. When producer completes any remaining values will be sent, the last values array may not match `predicate`. Alternatively, if were not collected any values will sent an empty array of values. */ scopedExample("`collect(predicate:)` matching values inclusively") { SignalProducer { observer, disposable in observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) observer.sendCompleted() } .collect { values in values.reduce(0, combine: +) == 3 } .startWithNext { value in print(value) } } /*: ### `collect(predicate:)` matching values exclusively Returns a producer that will yield an array of values based on a predicate which matches the values collected and the next value. When producer completes any remaining values will be sent, the last values array may not match `predicate`. Alternatively, if were not collected any values will sent an empty array of values. */ scopedExample("`collect(predicate:)` matching values exclusively") { SignalProducer { observer, disposable in observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) observer.sendCompleted() } .collect { values, next in next == 3 } .startWithNext { value in print(value) } } /*: ### `combineLatestWith` Combines the latest value of the receiver with the latest value from the given producer. The returned producer will not send a value until both inputs have sent at least one value each. If either producer is interrupted, the returned producer will also be interrupted. */ scopedExample("`combineLatestWith`") { let producer1 = SignalProducer(values: [ 1, 2, 3, 4 ]) let producer2 = SignalProducer(values: [ 1, 2 ]) producer1 .combineLatestWith(producer2) .startWithNext { value in print("\(value)") } } /*: ### `skip` Returns a producer that will skip the first `count` values, then forward everything afterward. */ scopedExample("`skip`") { let producer1 = SignalProducer(values: [ 1, 2, 3, 4 ]) producer1 .skip(2) .startWithNext { value in print(value) } } /*: ### `materialize` Treats all Events from the input producer as plain values, allowing them to be manipulated just like any other value. In other words, this brings Events “into the monad.” When a Completed or Failed event is received, the resulting producer will send the Event itself and then complete. When an Interrupted event is received, the resulting producer will send the Event itself and then interrupt. */ scopedExample("`materialize`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .materialize() .startWithNext { value in print(value) } } /*: ### `sampleOn` Forwards the latest value from `self` whenever `sampler` sends a Next event. If `sampler` fires before a value has been observed on `self`, nothing happens. Returns a producer that will send values from `self`, sampled (possibly multiple times) by `sampler`, then complete once both input producers have completed, or interrupt if either input producer is interrupted. */ scopedExample("`sampleOn`") { let baseProducer = SignalProducer(values: [ 1, 2, 3, 4 ]) let sampledOnProducer = SignalProducer(values: [ 1, 2 ]) .map { _ in () } baseProducer .sampleOn(sampledOnProducer) .startWithNext { value in print(value) } } /*: ### `combinePrevious` Forwards events from `self` with history: values of the returned producer are a tuple whose first member is the previous value and whose second member is the current value. `initial` is supplied as the first member when `self` sends its first value. */ scopedExample("`combinePrevious`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .combinePrevious(42) .startWithNext { value in print("\(value)") } } /*: ### `scan` Aggregates `self`'s values into a single combined value. When `self` emits its first value, `combine` is invoked with `initial` as the first argument and that emitted value as the second argument. The result is emitted from the producer returned from `scan`. That result is then passed to `combine` as the first argument when the next value is emitted, and so on. */ scopedExample("`scan`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .scan(0, +) .startWithNext { value in print(value) } } /*: ### `reduce` Like `scan`, but sends only the final value and then immediately completes. */ scopedExample("`reduce`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .reduce(0, +) .startWithNext { value in print(value) } } /*: ### `skipRepeats` Forwards only those values from `self` which do not pass `isRepeat` with respect to the previous value. The first value is always forwarded. */ scopedExample("`skipRepeats`") { SignalProducer(values: [ 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4 ]) .skipRepeats(==) .startWithNext { value in print(value) } } /*: ### `skipWhile` Does not forward any values from `self` until `predicate` returns false, at which point the returned signal behaves exactly like `self`. */ scopedExample("`skipWhile`") { SignalProducer(values: [ 3, 3, 3, 3, 1, 2, 3, 4 ]) .skipWhile { $0 > 2 } .startWithNext { value in print(value) } } /*: ### `takeUntilReplacement` Forwards events from `self` until `replacement` begins sending events. Returns a producer which passes through `Next`, `Failed`, and `Interrupted` events from `self` until `replacement` sends an event, at which point the returned producer will send that event and switch to passing through events from `replacement` instead, regardless of whether `self` has sent events already. */ scopedExample("`takeUntilReplacement`") { let (replacementSignal, incomingReplacementObserver) = Signal.pipe() let baseProducer = SignalProducer { incomingObserver, _ in incomingObserver.sendNext(1) incomingObserver.sendNext(2) incomingObserver.sendNext(3) incomingReplacementObserver.sendNext(42) incomingObserver.sendNext(4) incomingReplacementObserver.sendNext(42) } let producer = baseProducer.takeUntilReplacement(replacementSignal) producer.startWithNext { value in print(value) } } /*: ### `takeLast` Waits until `self` completes and then forwards the final `count` values on the returned producer. */ scopedExample("`takeLast`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .takeLast(2) .startWithNext { value in print(value) } } /*: ### `ignoreNil` Unwraps non-`nil` values and forwards them on the returned signal, `nil` values are dropped. */ scopedExample("`ignoreNil`") { SignalProducer(values: [ nil, 1, 2, nil, 3, 4, nil ]) .ignoreNil() .startWithNext { value in print(value) } } /*: ### `zipWith` Zips elements of two producers into pairs. The elements of any Nth pair are the Nth elements of the two input producers. */ scopedExample("`zipWith`") { let baseProducer = SignalProducer(values: [ 1, 2, 3, 4 ]) let zippedProducer = SignalProducer(values: [ 42, 43 ]) baseProducer .zipWith(zippedProducer) .startWithNext { value in print("\(value)") } } /*: ### `times` Repeats `self` a total of `count` times. Repeating `1` times results in an equivalent signal producer. */ scopedExample("`times`") { var counter = 0 SignalProducer<(), NoError> { observer, disposable in counter += 1 observer.sendCompleted() } .times(42) .start() print(counter) } /*: ### `retry` Ignores failures up to `count` times. */ scopedExample("`retry`") { var tries = 0 SignalProducer { observer, disposable in if tries == 0 { tries += 1 observer.sendFailed(NSError(domain: "retry", code: 0, userInfo: nil)) } else { observer.sendNext(42) observer.sendCompleted() } } .retry(1) .startWithResult { result in print(result) } } /*: ### `then` Waits for completion of `producer`, *then* forwards all events from `replacement`. Any failure sent from `producer` is forwarded immediately, in which case `replacement` will not be started, and none of its events will be be forwarded. All values sent from `producer` are ignored. */ scopedExample("`then`") { let baseProducer = SignalProducer(values: [ 1, 2, 3, 4 ]) let thenProducer = SignalProducer(value: 42) baseProducer .then(thenProducer) .startWithNext { value in print(value) } } /*: ### `replayLazily` Creates a new `SignalProducer` that will multicast values emitted by the underlying producer, up to `capacity`. This means that all clients of this `SignalProducer` will see the same version of the emitted values/errors. The underlying `SignalProducer` will not be started until `self` is started for the first time. When subscribing to this producer, all previous values (up to `capacity`) will be emitted, followed by any new values. If you find yourself needing *the current value* (the last buffered value) you should consider using `PropertyType` instead, which, unlike this operator, will guarantee at compile time that there's always a buffered value. This operator is not recommended in most cases, as it will introduce an implicit relationship between the original client and the rest, so consider alternatives like `PropertyType`, `SignalProducer.buffer`, or representing your stream using a `Signal` instead. This operator is only recommended when you absolutely need to introduce a layer of caching in front of another `SignalProducer`. This operator has the same semantics as `SignalProducer.buffer`. */ scopedExample("`replayLazily`") { let baseProducer = SignalProducer(values: [ 1, 2, 3, 4, 42 ]) .replayLazily(2) baseProducer.startWithNext { value in print(value) } baseProducer.startWithNext { value in print(value) } baseProducer.startWithNext { value in print(value) } } /*: ### `flatMap(.Latest)` Maps each event from `self` to a new producer, then flattens the resulting producers (into a producer of values), according to the semantics of the given strategy. If `self` or any of the created producers fail, the returned producer will forward that failure immediately. */ scopedExample("`flatMap(.Latest)`") { SignalProducer(values: [ 1, 2, 3, 4 ]) .flatMap(.Latest) { SignalProducer(value: $0 + 3) } .startWithNext { value in print(value) } } /*: ### `flatMapError` Catches any failure that may occur on the input producer, mapping to a new producer that starts in its place. */ scopedExample("`flatMapError`") { SignalProducer(error: NSError(domain: "flatMapError", code: 42, userInfo: nil)) .flatMapError { SignalProducer(value: $0.code) } .startWithNext { value in print(value) } } /*: ### `sampleWith` Forwards the latest value from `self` with the value from `sampler` as a tuple, only when `sampler` sends a Next event. If `sampler` fires before a value has been observed on `self`, nothing happens. Returns a producer that will send values from `self` and `sampler`, sampled (possibly multiple times) by `sampler`, then complete once both input producers have completed, or interrupt if either input producer is interrupted. */ scopedExample("`sampleWith`") { let producer = SignalProducer(values: [ 1, 2, 3, 4 ]) let sampler = SignalProducer(values: [ "a", "b" ]) let result = producer.sampleWith(sampler) result.startWithNext { left, right in print("\(left) \(right)") } } /*: ### `logEvents` Logs all events that the receiver sends. By default, it will print to the standard output. */ scopedExample("`log events`") { let baseProducer = SignalProducer(values: [ 1, 2, 3, 4, 42 ]) baseProducer .logEvents(identifier: "Playground is fun!") .start() } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.playground/Sources/PlaygroundUtility.swift ================================================ import Foundation public func scopedExample(exampleDescription: String, _ action: () -> Void) { print("\n--- \(exampleDescription) ---\n") action() } public enum Error: ErrorType { case Example(String) } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.playground/contents.xcplayground ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; 02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; 314304171ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 314304181ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */; }; 579504331BB8A34200A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; 579504341BB8A34300A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; 57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; 57A4D1B21BA13D7A00F7D4B1 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; }; 57A4D1B31BA13D7A00F7D4B1 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; }; 57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; 57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; 57A4D1B71BA13D7A00F7D4B1 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; 57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; 57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; 57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; 57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; 57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; 57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; 57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; 57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; 57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; 57A4D1C11BA13D7A00F7D4B1 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; }; 57A4D1C21BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; }; 57A4D1C31BA13D7A00F7D4B1 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; }; 57A4D1C41BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; }; 57A4D1C51BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; }; 57A4D1C61BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; }; 57A4D1C71BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; }; 57A4D1C81BA13D7A00F7D4B1 /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; }; 57A4D1C91BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; }; 57A4D1CA1BA13D7A00F7D4B1 /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; }; 57A4D1CB1BA13D7A00F7D4B1 /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; }; 57A4D1CC1BA13D7A00F7D4B1 /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; }; 57A4D1CD1BA13D7A00F7D4B1 /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; }; 57A4D1CE1BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; }; 57A4D1CF1BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; }; 57A4D1D01BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; }; 57A4D1D11BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; }; 57A4D1D21BA13D7A00F7D4B1 /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; }; 57A4D1D31BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; }; 57A4D1D41BA13D7A00F7D4B1 /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; }; 57A4D1D61BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; }; 57A4D1D71BA13D7A00F7D4B1 /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; }; 57A4D1D81BA13D7A00F7D4B1 /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; }; 57A4D1D91BA13D7A00F7D4B1 /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; }; 57A4D1DA1BA13D7A00F7D4B1 /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; }; 57A4D1DB1BA13D7A00F7D4B1 /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; }; 57A4D1DC1BA13D7A00F7D4B1 /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; }; 57A4D1DD1BA13D7A00F7D4B1 /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; }; 57A4D1DE1BA13D7A00F7D4B1 /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; }; 57A4D1DF1BA13D7A00F7D4B1 /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; }; 57A4D1E01BA13D7A00F7D4B1 /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; }; 57A4D1E11BA13D7A00F7D4B1 /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; }; 57A4D1E21BA13D7A00F7D4B1 /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; }; 57A4D1E31BA13D7A00F7D4B1 /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; }; 57A4D1E41BA13D7A00F7D4B1 /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; }; 57A4D1E51BA13D7A00F7D4B1 /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; }; 57A4D1E61BA13D7A00F7D4B1 /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; }; 57A4D1E71BA13D7A00F7D4B1 /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; }; 57A4D1E81BA13D7A00F7D4B1 /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; }; 57A4D1E91BA13D7A00F7D4B1 /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; }; 57A4D1EA1BA13D7A00F7D4B1 /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; }; 57A4D1EB1BA13D7A00F7D4B1 /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; }; 57A4D1EC1BA13D7A00F7D4B1 /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; }; 57A4D1EE1BA13D7A00F7D4B1 /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; }; 57A4D1EF1BA13D7A00F7D4B1 /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; }; 57A4D1F01BA13D7A00F7D4B1 /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; }; 57A4D1F11BA13D7A00F7D4B1 /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; }; 57A4D1F21BA13D7A00F7D4B1 /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; }; 57A4D1F31BA13D7A00F7D4B1 /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; }; 57A4D1F41BA13D7A00F7D4B1 /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; }; 57A4D1F51BA13D7A00F7D4B1 /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; }; 57A4D1F61BA13D7A00F7D4B1 /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; }; 57A4D1F71BA13D7A00F7D4B1 /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; }; 57A4D1F81BA13D7A00F7D4B1 /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; }; 57A4D1F91BA13D7A00F7D4B1 /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; }; 57A4D1FA1BA13D7A00F7D4B1 /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; }; 57A4D1FB1BA13D7A00F7D4B1 /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; }; 57A4D1FC1BA13D7A00F7D4B1 /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; }; 57A4D1FD1BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; }; 57A4D1FE1BA13D7A00F7D4B1 /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; }; 57A4D1FF1BA13D7A00F7D4B1 /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; }; 57A4D2001BA13D7A00F7D4B1 /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; }; 57A4D2011BA13D7A00F7D4B1 /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; }; 57A4D2021BA13D7A00F7D4B1 /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; }; 57A4D2031BA13D7A00F7D4B1 /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; }; 57A4D2041BA13D7A00F7D4B1 /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; }; 57A4D2051BA13D7A00F7D4B1 /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; }; 57A4D2061BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; }; 57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; 57A4D20A1BA13D7A00F7D4B1 /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D20B1BA13D7A00F7D4B1 /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D20C1BA13D7A00F7D4B1 /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D20D1BA13D7A00F7D4B1 /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D20E1BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D20F1BA13D7A00F7D4B1 /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2101BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2111BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2121BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2131BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2141BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2151BA13D7A00F7D4B1 /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2161BA13D7A00F7D4B1 /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2171BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2181BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2191BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D21A1BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D21B1BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D21C1BA13D7A00F7D4B1 /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D21E1BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D21F1BA13D7A00F7D4B1 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2201BA13D7A00F7D4B1 /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2211BA13D7A00F7D4B1 /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2221BA13D7A00F7D4B1 /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2231BA13D7A00F7D4B1 /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2241BA13D7A00F7D4B1 /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2251BA13D7A00F7D4B1 /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2261BA13D7A00F7D4B1 /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2271BA13D7A00F7D4B1 /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2281BA13D7A00F7D4B1 /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2291BA13D7A00F7D4B1 /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D22A1BA13D7A00F7D4B1 /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D22B1BA13D7A00F7D4B1 /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D22C1BA13D7A00F7D4B1 /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D22D1BA13D7A00F7D4B1 /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D22E1BA13D7A00F7D4B1 /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D22F1BA13D7A00F7D4B1 /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2301BA13D7A00F7D4B1 /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2311BA13D7A00F7D4B1 /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2321BA13D7A00F7D4B1 /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2331BA13D7A00F7D4B1 /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2341BA13D7A00F7D4B1 /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2351BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2361BA13D7A00F7D4B1 /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2371BA13D7A00F7D4B1 /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2381BA13D7A00F7D4B1 /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D2391BA13D7A00F7D4B1 /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57A4D23A1BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57D4768D1C42063C00EFE697 /* UIControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */; }; 57D476901C4206D400EFE697 /* UIControl+RACSignalSupportPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */; }; 57D476911C4206DA00EFE697 /* UIGestureRecognizer+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */; }; 57D476921C4206DF00EFE697 /* UISegmentedControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */; }; 57D476951C4206EC00EFE697 /* UITableViewCell+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */; }; 57D476961C4206EC00EFE697 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */; }; 57D476971C4206EC00EFE697 /* UITextField+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */; }; 57D476981C4206EC00EFE697 /* UITextView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */; }; 57D4769A1C4206F200EFE697 /* UIButton+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */; }; 57D4769B1C4206F200EFE697 /* UICollectionReusableView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */; }; 57DC89A01C5066D400E367B7 /* UIGestureRecognizer+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A11C50672B00E367B7 /* UIControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A21C50673C00E367B7 /* UISegmentedControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A31C50674300E367B7 /* UITableViewCell+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A41C50674D00E367B7 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A51C50675700E367B7 /* UITextField+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A61C50675F00E367B7 /* UITextView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A71C50679700E367B7 /* UIButton+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57DC89A81C50679E00E367B7 /* UICollectionReusableView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7A7065811A3F88B8001E8354 /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; }; 7A7065821A3F88B8001E8354 /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; }; 7A7065841A3F8967001E8354 /* RACKVOProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */; }; 7A7065851A3F8967001E8354 /* RACKVOProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */; }; 7DFBED081CDB8C9500EE435B /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */; }; 7DFBED141CDB8CE600EE435B /* test-data.json in Resources */ = {isa = PBXBuildFile; fileRef = D03766B119EDA60000A782A9 /* test-data.json */; }; 7DFBED1E1CDB8D7000EE435B /* ReactiveCocoa.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7DFBED1F1CDB8D7800EE435B /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7DFBED201CDB8D7D00EE435B /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7DFBED211CDB8D8300EE435B /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7DFBED221CDB8DE300EE435B /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; 7DFBED231CDB8DE300EE435B /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; 7DFBED241CDB8DE300EE435B /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; 7DFBED251CDB8DE300EE435B /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; 7DFBED261CDB8DE300EE435B /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; 7DFBED271CDB8DE300EE435B /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; }; 7DFBED281CDB8DE300EE435B /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; 7DFBED291CDB8DE300EE435B /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; 7DFBED2A1CDB8DE300EE435B /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; 7DFBED2B1CDB8DE300EE435B /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; 7DFBED2C1CDB8DE300EE435B /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; 7DFBED2D1CDB8DE300EE435B /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; 7DFBED2E1CDB8DE300EE435B /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; 7DFBED2F1CDB8DE300EE435B /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; 7DFBED301CDB8DE300EE435B /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; 7DFBED321CDB8DE300EE435B /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */; }; 7DFBED331CDB8DE300EE435B /* NSNotificationCenterRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */; }; 7DFBED351CDB8DE300EE435B /* NSObjectRACDeallocatingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */; }; 7DFBED361CDB8DE300EE435B /* NSObjectRACLiftingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */; }; 7DFBED381CDB8DE300EE435B /* NSObjectRACPropertySubscribingExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */; }; 7DFBED391CDB8DE300EE435B /* NSObjectRACPropertySubscribingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */; }; 7DFBED3A1CDB8DE300EE435B /* NSObjectRACSelectorSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */; }; 7DFBED3B1CDB8DE300EE435B /* NSStringRACKeyPathUtilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */; }; 7DFBED3D1CDB8DE300EE435B /* NSUserDefaultsRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */; }; 7DFBED3E1CDB8DE300EE435B /* RACBlockTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */; }; 7DFBED401CDB8DE300EE435B /* RACChannelExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668819EDA60000A782A9 /* RACChannelExamples.m */; }; 7DFBED411CDB8DE300EE435B /* RACChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668919EDA60000A782A9 /* RACChannelSpec.m */; }; 7DFBED421CDB8DE300EE435B /* RACCommandSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668A19EDA60000A782A9 /* RACCommandSpec.m */; }; 7DFBED431CDB8DE300EE435B /* RACCompoundDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */; }; 7DFBED451CDB8DE300EE435B /* RACControlCommandExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */; }; 7DFBED461CDB8DE300EE435B /* RACDelegateProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */; }; 7DFBED471CDB8DE300EE435B /* RACDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668F19EDA60000A782A9 /* RACDisposableSpec.m */; }; 7DFBED481CDB8DE300EE435B /* RACEventSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669019EDA60000A782A9 /* RACEventSpec.m */; }; 7DFBED491CDB8DE300EE435B /* RACKVOChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */; }; 7DFBED4A1CDB8DE300EE435B /* RACKVOProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */; }; 7DFBED4B1CDB8DE300EE435B /* RACKVOWrapperSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */; }; 7DFBED4C1CDB8DE300EE435B /* RACMulticastConnectionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */; }; 7DFBED4E1CDB8DE300EE435B /* RACPropertySignalExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */; }; 7DFBED4F1CDB8DE300EE435B /* RACSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669619EDA60000A782A9 /* RACSchedulerSpec.m */; }; 7DFBED501CDB8DE300EE435B /* RACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */; }; 7DFBED521CDB8DE300EE435B /* RACSequenceExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669919EDA60000A782A9 /* RACSequenceExamples.m */; }; 7DFBED531CDB8DE300EE435B /* RACSequenceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669A19EDA60000A782A9 /* RACSequenceSpec.m */; }; 7DFBED541CDB8DE300EE435B /* RACSerialDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */; }; 7DFBED551CDB8DE300EE435B /* RACSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669C19EDA60000A782A9 /* RACSignalSpec.m */; }; 7DFBED571CDB8DE300EE435B /* RACStreamExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A019EDA60000A782A9 /* RACStreamExamples.m */; }; 7DFBED591CDB8DE300EE435B /* RACSubclassObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A219EDA60000A782A9 /* RACSubclassObject.m */; }; 7DFBED5A1CDB8DE300EE435B /* RACSubjectSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A319EDA60000A782A9 /* RACSubjectSpec.m */; }; 7DFBED5C1CDB8DE300EE435B /* RACSubscriberExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */; }; 7DFBED5D1CDB8DE300EE435B /* RACSubscriberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */; }; 7DFBED5E1CDB8DE300EE435B /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */; }; 7DFBED5F1CDB8DE300EE435B /* RACTargetQueueSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */; }; 7DFBED601CDB8DE300EE435B /* RACTupleSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B019EDA60000A782A9 /* RACTupleSpec.m */; }; 7DFBED631CDB8DE300EE435B /* UIBarButtonItemRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */; }; 7DFBED641CDB8DE300EE435B /* UIButtonRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */; }; 7DFBED671CDB8DE300EE435B /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; }; 7DFBED691CDB8DE300EE435B /* RACTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131A19EF2D9700984962 /* RACTestObject.m */; }; 7DFBED6A1CDB8DE300EE435B /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; }; 7DFBED6C1CDB8DE300EE435B /* RACTestUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131D19EF2D9700984962 /* RACTestUIButton.m */; }; 7DFBED6D1CDB8F7D00EE435B /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; 7DFBED6E1CDB918900EE435B /* UIBarButtonItem+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */; }; 7DFBED6F1CDB926400EE435B /* UIBarButtonItem+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A1046B7A1BFF5661004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; A1046B7B1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; A1046B7C1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; A1046B7D1BFF5664004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; A9B3155E1B3940750001CB9C /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; }; A9B315601B3940750001CB9C /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; }; A9B315631B3940750001CB9C /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; }; A9B315641B3940750001CB9C /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; }; A9B315651B3940750001CB9C /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; }; A9B315661B3940750001CB9C /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; }; A9B315671B3940750001CB9C /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; }; A9B315681B3940750001CB9C /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; }; A9B315691B3940750001CB9C /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; }; A9B3156B1B3940750001CB9C /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; }; A9B3156C1B3940750001CB9C /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; }; A9B3156D1B3940750001CB9C /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; }; A9B3156E1B3940750001CB9C /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; }; A9B3156F1B3940750001CB9C /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; }; A9B315701B3940750001CB9C /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; }; A9B315711B3940750001CB9C /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; }; A9B315721B3940750001CB9C /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; }; A9B315731B3940750001CB9C /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; }; A9B315741B3940750001CB9C /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; }; A9B315751B3940750001CB9C /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; }; A9B315781B3940750001CB9C /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; }; A9B315791B3940750001CB9C /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; }; A9B3157A1B3940750001CB9C /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; }; A9B3157B1B3940750001CB9C /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; }; A9B3157C1B3940750001CB9C /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; }; A9B3157D1B3940750001CB9C /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; }; A9B3157E1B3940750001CB9C /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; }; A9B3157F1B3940750001CB9C /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; }; A9B315801B3940750001CB9C /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; }; A9B315811B3940750001CB9C /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; }; A9B315821B3940750001CB9C /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; }; A9B315831B3940750001CB9C /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; }; A9B315841B3940750001CB9C /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; }; A9B315851B3940750001CB9C /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; }; A9B315861B3940750001CB9C /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; }; A9B315871B3940750001CB9C /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; }; A9B315881B3940750001CB9C /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; }; A9B315891B3940750001CB9C /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; }; A9B3158A1B3940750001CB9C /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; }; A9B3158B1B3940750001CB9C /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; }; A9B3158C1B3940750001CB9C /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; }; A9B3158D1B3940750001CB9C /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; }; A9B3158E1B3940750001CB9C /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; }; A9B315901B3940750001CB9C /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; }; A9B315911B3940750001CB9C /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; }; A9B315921B3940750001CB9C /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; }; A9B315931B3940750001CB9C /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; }; A9B315941B3940750001CB9C /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; }; A9B315951B3940750001CB9C /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; }; A9B315961B3940750001CB9C /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; }; A9B315971B3940750001CB9C /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; }; A9B315981B3940750001CB9C /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; }; A9B315991B3940750001CB9C /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; }; A9B3159A1B3940750001CB9C /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; }; A9B3159B1B3940750001CB9C /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; }; A9B3159C1B3940750001CB9C /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; }; A9B3159D1B3940750001CB9C /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; }; A9B3159E1B3940750001CB9C /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; }; A9B3159F1B3940750001CB9C /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; }; A9B315A01B3940750001CB9C /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; }; A9B315A11B3940750001CB9C /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; }; A9B315A21B3940750001CB9C /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; }; A9B315A31B3940750001CB9C /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; }; A9B315A41B3940750001CB9C /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; }; A9B315A51B3940750001CB9C /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; }; A9B315A61B3940750001CB9C /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; }; A9B315A71B3940750001CB9C /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; }; A9B315BB1B3940750001CB9C /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; }; A9B315BC1B3940810001CB9C /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; A9B315BE1B3940810001CB9C /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; A9B315BF1B3940810001CB9C /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; A9B315C11B3940810001CB9C /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; A9B315C21B3940810001CB9C /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; A9B315C31B3940810001CB9C /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; A9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; A9B315C51B3940810001CB9C /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; A9B315C61B3940810001CB9C /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; A9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; A9B315C91B3940980001CB9C /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; A9B315CA1B3940AB0001CB9C /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315CB1B3940AB0001CB9C /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315CD1B3940AB0001CB9C /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315CE1B3940AB0001CB9C /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D01B3940AB0001CB9C /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D31B3940AB0001CB9C /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D41B3940AB0001CB9C /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D51B3940AB0001CB9C /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D61B3940AB0001CB9C /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D71B3940AB0001CB9C /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315D91B3940AB0001CB9C /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315DB1B3940AB0001CB9C /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315DE1B3940AB0001CB9C /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315DF1B3940AB0001CB9C /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315E01B3940AB0001CB9C /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315E11B3940AB0001CB9C /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315E21B3940AB0001CB9C /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315E41B3940AB0001CB9C /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315E51B3940AB0001CB9C /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315E81B3940AB0001CB9C /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315EA1B3940AB0001CB9C /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315EC1B3940AB0001CB9C /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315ED1B3940AC0001CB9C /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315EE1B3940AC0001CB9C /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315F01B3940AC0001CB9C /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315F71B3940AC0001CB9C /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315F81B3940AC0001CB9C /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315FB1B3940AC0001CB9C /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315FE1B3940AC0001CB9C /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316021B3940AD0001CB9C /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316031B3940AD0001CB9C /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316041B3940AD0001CB9C /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316061B3940AD0001CB9C /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316081B3940AD0001CB9C /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316091B3940AD0001CB9C /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B3160A1B3940AD0001CB9C /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B3160B1B3940AD0001CB9C /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B3160C1B3940AE0001CB9C /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B3160D1B3940AE0001CB9C /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B3160F1B3940AE0001CB9C /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316121B3940AE0001CB9C /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316131B3940AE0001CB9C /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316151B3940AE0001CB9C /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316171B3940AF0001CB9C /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316181B3940AF0001CB9C /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316191B3940AF0001CB9C /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B3161C1B3940AF0001CB9C /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316311B3940B20001CB9C /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316341B394C7F0001CB9C /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; }; A9B316351B394C7F0001CB9C /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; }; A9F793341B60D0140026BCBA /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; B696FB811A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; B696FB821A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; BEBDD6E51CDC292D009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BEBDD6E61CDC292D009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BEBDD6E71CDC292E009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BEBDD6E81CDC292F009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; BFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; C7142DBC1CDEA167009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C7142DBD1CDEA194009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C7142DBE1CDEA194009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C7142DBF1CDEA195009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C79B64741CD38B2B003F2376 /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; C79B64751CD38B2B003F2376 /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; CA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; CA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; CD0C45DE1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; CD0C45DF1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; CD0C45E01CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; CD0C45E11CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; CD8401831CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */; }; CD8401841CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */; }; CD8401851CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */; }; CDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; CDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; CDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; CDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; CDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; CDF066CA1CDC1CA200199626 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; CDF066CB1CDC1CA200199626 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; D00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; D000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; D01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D01B7B6419EDD94B00D26E01 /* ReactiveCocoa.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D021671D1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; D021671E1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; D03764E819EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764E919EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764EA19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; }; D03764EB19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; }; D03764EC19EDA41200A782A9 /* NSControl+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764EE19EDA41200A782A9 /* NSControl+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642D19EDA41200A782A9 /* NSControl+RACCommandSupport.m */; }; D03764F019EDA41200A782A9 /* NSControl+RACTextSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642E19EDA41200A782A9 /* NSControl+RACTextSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764F219EDA41200A782A9 /* NSControl+RACTextSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642F19EDA41200A782A9 /* NSControl+RACTextSignalSupport.m */; }; D03764F419EDA41200A782A9 /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764F519EDA41200A782A9 /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764F619EDA41200A782A9 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; }; D03764F719EDA41200A782A9 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; }; D03764F819EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764F919EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764FA19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; }; D03764FB19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; }; D03764FC19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764FD19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764FE19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; }; D03764FF19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; }; D037650019EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037650119EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037650219EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; }; D037650319EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; }; D037650419EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037650519EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037650619EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; }; D037650719EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; }; D037650A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; }; D037650B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; }; D037650C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037650D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037650E19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; }; D037650F19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; }; D037651019EDA41200A782A9 /* NSObject+RACAppKitBindings.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643E19EDA41200A782A9 /* NSObject+RACAppKitBindings.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037651219EDA41200A782A9 /* NSObject+RACAppKitBindings.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643F19EDA41200A782A9 /* NSObject+RACAppKitBindings.m */; }; D037651419EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037651519EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037651619EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; }; D037651719EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; }; D037651A19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; }; D037651B19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; }; D037651E19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; }; D037651F19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; }; D037652019EDA41200A782A9 /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652119EDA41200A782A9 /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652219EDA41200A782A9 /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; }; D037652319EDA41200A782A9 /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; }; D037652419EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652519EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652619EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; }; D037652719EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; }; D037652819EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652919EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652A19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; }; D037652B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; }; D037652C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037652E19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; }; D037652F19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; }; D037653019EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037653119EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037653219EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; }; D037653319EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; }; D037653619EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; }; D037653719EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; }; D037653819EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037653919EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037653A19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; }; D037653B19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; }; D037653C19EDA41200A782A9 /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037653D19EDA41200A782A9 /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037653E19EDA41200A782A9 /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; }; D037653F19EDA41200A782A9 /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; }; D037654019EDA41200A782A9 /* NSText+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645619EDA41200A782A9 /* NSText+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037654219EDA41200A782A9 /* NSText+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645719EDA41200A782A9 /* NSText+RACSignalSupport.m */; }; D037654419EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037654519EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037654619EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */; }; D037654719EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */; }; D037654819EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037654919EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037654A19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; }; D037654B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; }; D037654E19EDA41200A782A9 /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; }; D037654F19EDA41200A782A9 /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; }; D037655619EDA41200A782A9 /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; }; D037655719EDA41200A782A9 /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; }; D037655A19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; }; D037655B19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; }; D037655C19EDA41200A782A9 /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037655D19EDA41200A782A9 /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037655E19EDA41200A782A9 /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; }; D037655F19EDA41200A782A9 /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; }; D037656019EDA41200A782A9 /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037656119EDA41200A782A9 /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037656219EDA41200A782A9 /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; }; D037656319EDA41200A782A9 /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; }; D037656419EDA41200A782A9 /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037656519EDA41200A782A9 /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037656619EDA41200A782A9 /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; }; D037656719EDA41200A782A9 /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; }; D037656819EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; }; D037656919EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; }; D037656C19EDA41200A782A9 /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; }; D037656D19EDA41200A782A9 /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; }; D037656E19EDA41200A782A9 /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037656F19EDA41200A782A9 /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037657019EDA41200A782A9 /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; }; D037657119EDA41200A782A9 /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; }; D037657419EDA41200A782A9 /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; }; D037657519EDA41200A782A9 /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; }; D037657819EDA41200A782A9 /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; }; D037657919EDA41200A782A9 /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; }; D037657C19EDA41200A782A9 /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; }; D037657D19EDA41200A782A9 /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; }; D037658019EDA41200A782A9 /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; }; D037658119EDA41200A782A9 /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; }; D037658419EDA41200A782A9 /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; }; D037658519EDA41200A782A9 /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; }; D037658819EDA41200A782A9 /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; }; D037658919EDA41200A782A9 /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; }; D037658A19EDA41200A782A9 /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037658B19EDA41200A782A9 /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037658C19EDA41200A782A9 /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; }; D037658D19EDA41200A782A9 /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; }; D037658E19EDA41200A782A9 /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037658F19EDA41200A782A9 /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037659019EDA41200A782A9 /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; }; D037659119EDA41200A782A9 /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; }; D037659419EDA41200A782A9 /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; }; D037659519EDA41200A782A9 /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; }; D037659819EDA41200A782A9 /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; }; D037659919EDA41200A782A9 /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; }; D037659A19EDA41200A782A9 /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037659B19EDA41200A782A9 /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037659C19EDA41200A782A9 /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; }; D037659D19EDA41200A782A9 /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; }; D03765A019EDA41200A782A9 /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; }; D03765A119EDA41200A782A9 /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; }; D03765A219EDA41200A782A9 /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765A319EDA41200A782A9 /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765A419EDA41200A782A9 /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; }; D03765A519EDA41200A782A9 /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; }; D03765AE19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; }; D03765AF19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; }; D03765B019EDA41200A782A9 /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765B119EDA41200A782A9 /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765B219EDA41200A782A9 /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; }; D03765B319EDA41200A782A9 /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; }; D03765B419EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765B519EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765B619EDA41200A782A9 /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765B719EDA41200A782A9 /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765B819EDA41200A782A9 /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; }; D03765B919EDA41200A782A9 /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; }; D03765BC19EDA41200A782A9 /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; }; D03765BD19EDA41200A782A9 /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; }; D03765BE19EDA41200A782A9 /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765BF19EDA41200A782A9 /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765C019EDA41200A782A9 /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; }; D03765C119EDA41200A782A9 /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; }; D03765C419EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765C519EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765C619EDA41200A782A9 /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765C719EDA41200A782A9 /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765C819EDA41200A782A9 /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; }; D03765C919EDA41200A782A9 /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; }; D03765CA19EDA41200A782A9 /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765CB19EDA41200A782A9 /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765CC19EDA41200A782A9 /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; }; D03765CD19EDA41200A782A9 /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; }; D03765CE19EDA41200A782A9 /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765CF19EDA41200A782A9 /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765D019EDA41200A782A9 /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; }; D03765D119EDA41200A782A9 /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; }; D03765D219EDA41200A782A9 /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765D319EDA41200A782A9 /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765D419EDA41200A782A9 /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; }; D03765D519EDA41200A782A9 /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; }; D03765D619EDA41200A782A9 /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765D719EDA41200A782A9 /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765D819EDA41200A782A9 /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; }; D03765D919EDA41200A782A9 /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; }; D03765DA19EDA41200A782A9 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; }; D03765DB19EDA41200A782A9 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; }; D03765DE19EDA41200A782A9 /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; }; D03765DF19EDA41200A782A9 /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; }; D03765E019EDA41200A782A9 /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765E119EDA41200A782A9 /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765E219EDA41200A782A9 /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; }; D03765E319EDA41200A782A9 /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; }; D03765E819EDA41200A782A9 /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; }; D03765E919EDA41200A782A9 /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; }; D03765EA19EDA41200A782A9 /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765EB19EDA41200A782A9 /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765EC19EDA41200A782A9 /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; }; D03765ED19EDA41200A782A9 /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; }; D03765EE19EDA41200A782A9 /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765EF19EDA41200A782A9 /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765F019EDA41200A782A9 /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; }; D03765F119EDA41200A782A9 /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; }; D03765F419EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765F519EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765F619EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; }; D03765F719EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; }; D03765FA19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; }; D03765FB19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; }; D03765FC19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765FD19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03765FE19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; }; D03765FF19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; }; D037660019EDA41200A782A9 /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037660119EDA41200A782A9 /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037660219EDA41200A782A9 /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; }; D037660319EDA41200A782A9 /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; }; D037660419EDA41200A782A9 /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037660519EDA41200A782A9 /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037660619EDA41200A782A9 /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; }; D037660719EDA41200A782A9 /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; }; D037660A19EDA41200A782A9 /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; }; D037660B19EDA41200A782A9 /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; }; D037660E19EDA41200A782A9 /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; }; D037660F19EDA41200A782A9 /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; }; D037661019EDA41200A782A9 /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037661119EDA41200A782A9 /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037661219EDA41200A782A9 /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; }; D037661319EDA41200A782A9 /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; }; D037661619EDA41200A782A9 /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; }; D037661719EDA41200A782A9 /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; }; D037661919EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C219EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037661B19EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C319EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m */; }; D037661D19EDA41200A782A9 /* UIAlertView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C419EDA41200A782A9 /* UIAlertView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037661F19EDA41200A782A9 /* UIAlertView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C519EDA41200A782A9 /* UIAlertView+RACSignalSupport.m */; }; D037662119EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037662319EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */; }; D037662519EDA41200A782A9 /* UIButton+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037662719EDA41200A782A9 /* UIButton+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */; }; D037662919EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037662B19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */; }; D037662D19EDA41200A782A9 /* UIControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037662F19EDA41200A782A9 /* UIControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */; }; D037663319EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */; }; D037663519EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D019EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037663719EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D119EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m */; }; D037663919EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037663B19EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */; }; D037663D19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D419EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037663F19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D519EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m */; }; D037664119EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D619EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037664319EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D719EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m */; }; D037664519EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037664719EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */; }; D037664919EDA41200A782A9 /* UISlider+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764DA19EDA41200A782A9 /* UISlider+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037664B19EDA41200A782A9 /* UISlider+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764DB19EDA41200A782A9 /* UISlider+RACSignalSupport.m */; }; D037664D19EDA41200A782A9 /* UIStepper+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764DC19EDA41200A782A9 /* UIStepper+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037664F19EDA41200A782A9 /* UIStepper+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764DD19EDA41200A782A9 /* UIStepper+RACSignalSupport.m */; }; D037665119EDA41200A782A9 /* UISwitch+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764DE19EDA41200A782A9 /* UISwitch+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037665319EDA41200A782A9 /* UISwitch+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764DF19EDA41200A782A9 /* UISwitch+RACSignalSupport.m */; }; D037665519EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037665719EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */; }; D037665919EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037665B19EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */; }; D037665D19EDA41200A782A9 /* UITextField+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037665F19EDA41200A782A9 /* UITextField+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */; }; D037666119EDA41200A782A9 /* UITextView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037666319EDA41200A782A9 /* UITextView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */; }; D037666419EDA43C00A782A9 /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037666B19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037666C19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037666F19EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; }; D037667019EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; }; D037667119EDA57100A782A9 /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037667219EDA57100A782A9 /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037667319EDA57100A782A9 /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037667419EDA57100A782A9 /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03766B919EDA60000A782A9 /* NSControllerRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667619EDA60000A782A9 /* NSControllerRACSupportSpec.m */; }; D03766BD19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */; }; D03766BE19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */; }; D03766BF19EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */; }; D03766C019EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */; }; D03766C119EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667A19EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m */; }; D03766C319EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */; }; D03766C419EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */; }; D03766C519EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */; }; D03766C619EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */; }; D03766C719EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */; }; D03766C819EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */; }; D03766C919EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */; }; D03766CA19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */; }; D03766CB19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */; }; D03766CC19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */; }; D03766CD19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */; }; D03766CE19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */; }; D03766D119EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */; }; D03766D219EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */; }; D03766D319EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */; }; D03766D419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */; }; D03766D719EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */; }; D03766D819EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */; }; D03766D919EDA60000A782A9 /* RACChannelExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668819EDA60000A782A9 /* RACChannelExamples.m */; }; D03766DA19EDA60000A782A9 /* RACChannelExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668819EDA60000A782A9 /* RACChannelExamples.m */; }; D03766DB19EDA60000A782A9 /* RACChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668919EDA60000A782A9 /* RACChannelSpec.m */; }; D03766DC19EDA60000A782A9 /* RACChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668919EDA60000A782A9 /* RACChannelSpec.m */; }; D03766DD19EDA60000A782A9 /* RACCommandSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668A19EDA60000A782A9 /* RACCommandSpec.m */; }; D03766DE19EDA60000A782A9 /* RACCommandSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668A19EDA60000A782A9 /* RACCommandSpec.m */; }; D03766DF19EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */; }; D03766E019EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */; }; D03766E119EDA60000A782A9 /* RACControlCommandExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */; }; D03766E219EDA60000A782A9 /* RACControlCommandExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */; }; D03766E319EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */; }; D03766E419EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */; }; D03766E519EDA60000A782A9 /* RACDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668F19EDA60000A782A9 /* RACDisposableSpec.m */; }; D03766E619EDA60000A782A9 /* RACDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668F19EDA60000A782A9 /* RACDisposableSpec.m */; }; D03766E719EDA60000A782A9 /* RACEventSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669019EDA60000A782A9 /* RACEventSpec.m */; }; D03766E819EDA60000A782A9 /* RACEventSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669019EDA60000A782A9 /* RACEventSpec.m */; }; D03766E919EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */; }; D03766EA19EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */; }; D03766EB19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */; }; D03766EC19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */; }; D03766ED19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */; }; D03766EE19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */; }; D03766EF19EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */; }; D03766F019EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */; }; D03766F119EDA60000A782A9 /* RACSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669619EDA60000A782A9 /* RACSchedulerSpec.m */; }; D03766F219EDA60000A782A9 /* RACSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669619EDA60000A782A9 /* RACSchedulerSpec.m */; }; D03766F319EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */; }; D03766F419EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */; }; D03766F519EDA60000A782A9 /* RACSequenceExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669919EDA60000A782A9 /* RACSequenceExamples.m */; }; D03766F619EDA60000A782A9 /* RACSequenceExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669919EDA60000A782A9 /* RACSequenceExamples.m */; }; D03766F719EDA60000A782A9 /* RACSequenceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669A19EDA60000A782A9 /* RACSequenceSpec.m */; }; D03766F819EDA60000A782A9 /* RACSequenceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669A19EDA60000A782A9 /* RACSequenceSpec.m */; }; D03766F919EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */; }; D03766FA19EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */; }; D03766FB19EDA60000A782A9 /* RACSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669C19EDA60000A782A9 /* RACSignalSpec.m */; }; D03766FC19EDA60000A782A9 /* RACSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669C19EDA60000A782A9 /* RACSignalSpec.m */; }; D03766FF19EDA60000A782A9 /* RACStreamExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A019EDA60000A782A9 /* RACStreamExamples.m */; }; D037670019EDA60000A782A9 /* RACStreamExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A019EDA60000A782A9 /* RACStreamExamples.m */; }; D037670119EDA60000A782A9 /* RACSubclassObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A219EDA60000A782A9 /* RACSubclassObject.m */; }; D037670219EDA60000A782A9 /* RACSubclassObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A219EDA60000A782A9 /* RACSubclassObject.m */; }; D037670319EDA60000A782A9 /* RACSubjectSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A319EDA60000A782A9 /* RACSubjectSpec.m */; }; D037670419EDA60000A782A9 /* RACSubjectSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A319EDA60000A782A9 /* RACSubjectSpec.m */; }; D037670519EDA60000A782A9 /* RACSubscriberExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */; }; D037670619EDA60000A782A9 /* RACSubscriberExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */; }; D037670719EDA60000A782A9 /* RACSubscriberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */; }; D037670819EDA60000A782A9 /* RACSubscriberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */; }; D037670919EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */; }; D037670A19EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */; }; D037670B19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */; }; D037670C19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */; }; D037671519EDA60000A782A9 /* RACTupleSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B019EDA60000A782A9 /* RACTupleSpec.m */; }; D037671619EDA60000A782A9 /* RACTupleSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B019EDA60000A782A9 /* RACTupleSpec.m */; }; D037671719EDA60000A782A9 /* test-data.json in Resources */ = {isa = PBXBuildFile; fileRef = D03766B119EDA60000A782A9 /* test-data.json */; }; D037671819EDA60000A782A9 /* test-data.json in Resources */ = {isa = PBXBuildFile; fileRef = D03766B119EDA60000A782A9 /* test-data.json */; }; D037671A19EDA60000A782A9 /* UIActionSheetRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B219EDA60000A782A9 /* UIActionSheetRACSupportSpec.m */; }; D037671C19EDA60000A782A9 /* UIAlertViewRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B319EDA60000A782A9 /* UIAlertViewRACSupportSpec.m */; }; D037671E19EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */; }; D037672019EDA60000A782A9 /* UIButtonRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */; }; D037672419EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */; }; D037672719EDA63400A782A9 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037672819EDA63500A782A9 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; D037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; D03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; D04725F019E49ED7006002AA /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; D04725F619E49ED7006002AA /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */; }; D047261719E49F82006002AA /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; }; D05E662519EDD82000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; D05E662619EDD83000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; D08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; D08C54B61A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; D08C54BA1A69C54300AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; D08C54BB1A69C54400AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; D0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; D0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; D0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; D0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; D0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; D0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; D0A226111A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; }; D0A226121A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; }; D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; D0C312CF19EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; D0C312D019EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; D0C312D319EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; D0C312D419EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; D0C312DF19EF2A5800984962 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; D0C312E019EF2A5800984962 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; D0C312E719EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; D0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; D0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; D0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; D0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; D0C3131E19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; }; D0C3131F19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; }; D0C3132019EF2D9700984962 /* RACTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131A19EF2D9700984962 /* RACTestObject.m */; }; D0C3132119EF2D9700984962 /* RACTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131A19EF2D9700984962 /* RACTestObject.m */; }; D0C3132219EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; }; D0C3132319EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; }; D0C3132519EF2D9700984962 /* RACTestUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131D19EF2D9700984962 /* RACTestUIButton.m */; }; D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; D43F27A01A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; D43F27A11A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; D43F27A21A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; }; D43F27A31A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; }; D8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; D8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; D8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; D8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; D85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; D85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; D871D69F1B3B29A40070F16C /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; D8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 7DFBED091CDB8C9500EE435B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D04725E119E49ED7006002AA /* Project object */; proxyType = 1; remoteGlobalIDString = 57A4D1AF1BA13D7A00F7D4B1; remoteInfo = "ReactiveCocoa-tvOS"; }; D04725F719E49ED7006002AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D04725E119E49ED7006002AA /* Project object */; proxyType = 1; remoteGlobalIDString = D04725E919E49ED7006002AA; remoteInfo = ReactiveCocoa; }; D047261819E49F82006002AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D04725E119E49ED7006002AA /* Project object */; proxyType = 1; remoteGlobalIDString = D047260B19E49F82006002AA; remoteInfo = ReactiveCocoa; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 7DFBED151CDB8CEC00EE435B /* Copy Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( 7DFBED211CDB8D8300EE435B /* Result.framework in Copy Frameworks */, 7DFBED201CDB8D7D00EE435B /* Nimble.framework in Copy Frameworks */, 7DFBED1F1CDB8D7800EE435B /* Quick.framework in Copy Frameworks */, 7DFBED1E1CDB8D7000EE435B /* ReactiveCocoa.framework in Copy Frameworks */, ); name = "Copy Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; D01B7B6119EDD8F600D26E01 /* Copy Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( CDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */, D01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */, D01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */, D01B7B6419EDD94B00D26E01 /* ReactiveCocoa.framework in Copy Frameworks */, ); name = "Copy Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalLifetimeSpec.swift; sourceTree = ""; }; 314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MKAnnotationView+RACSignalSupport.h"; sourceTree = ""; }; 314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MKAnnotationView+RACSignalSupport.m"; sourceTree = ""; }; 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Application.xcconfig"; sourceTree = ""; }; 57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Base.xcconfig"; sourceTree = ""; }; 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Framework.xcconfig"; sourceTree = ""; }; 57A4D2471BA13F9700F7D4B1 /* tvOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-StaticLibrary.xcconfig"; sourceTree = ""; }; 7A70657D1A3F88B8001E8354 /* RACKVOProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACKVOProxy.h; sourceTree = ""; }; 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOProxy.m; sourceTree = ""; }; 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOProxySpec.m; sourceTree = ""; }; 7DFBED031CDB8C9500EE435B /* ReactiveCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; A97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Application.xcconfig"; sourceTree = ""; }; A97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Base.xcconfig"; sourceTree = ""; }; A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Framework.xcconfig"; sourceTree = ""; }; A97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-StaticLibrary.xcconfig"; sourceTree = ""; }; A9B315541B3940610001CB9C /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B696FB801A7640C00075236D /* TestError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SignalProducerNimbleMatchers.swift; path = Swift/SignalProducerNimbleMatchers.swift; sourceTree = ""; }; C7142DBB1CDEA167009F402D /* CocoaAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaAction.swift; sourceTree = ""; }; C79B64731CD38B2B003F2376 /* TestLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestLogger.swift; sourceTree = ""; }; C79B647B1CD52E23003F2376 /* EventLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventLogger.swift; sourceTree = ""; }; CA6F284F1C52626B001879D2 /* FlattenSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlattenSpec.swift; sourceTree = ""; }; CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicProperty.swift; sourceTree = ""; }; CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaActionSpec.swift; sourceTree = ""; }; CDC42E2E1AE7AB8B00965373 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D00004081A46864E000E7D41 /* TupleExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TupleExtensions.swift; sourceTree = ""; }; D021671C1A6CD50500987861 /* ActionSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ActionSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+RACSequenceAdditions.h"; sourceTree = ""; }; D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+RACSequenceAdditions.m"; sourceTree = ""; }; D037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSControl+RACCommandSupport.h"; sourceTree = ""; }; D037642D19EDA41200A782A9 /* NSControl+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSControl+RACCommandSupport.m"; sourceTree = ""; }; D037642E19EDA41200A782A9 /* NSControl+RACTextSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSControl+RACTextSignalSupport.h"; sourceTree = ""; }; D037642F19EDA41200A782A9 /* NSControl+RACTextSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSControl+RACTextSignalSupport.m"; sourceTree = ""; }; D037643019EDA41200A782A9 /* NSData+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+RACSupport.h"; sourceTree = ""; }; D037643119EDA41200A782A9 /* NSData+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+RACSupport.m"; sourceTree = ""; }; D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+RACSequenceAdditions.h"; sourceTree = ""; }; D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+RACSequenceAdditions.m"; sourceTree = ""; }; D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSEnumerator+RACSequenceAdditions.h"; sourceTree = ""; }; D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSEnumerator+RACSequenceAdditions.m"; sourceTree = ""; }; D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFileHandle+RACSupport.h"; sourceTree = ""; }; D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileHandle+RACSupport.m"; sourceTree = ""; }; D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexSet+RACSequenceAdditions.h"; sourceTree = ""; }; D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexSet+RACSequenceAdditions.m"; sourceTree = ""; }; D037643A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSInvocation+RACTypeParsing.h"; sourceTree = ""; }; D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSInvocation+RACTypeParsing.m"; sourceTree = ""; }; D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+RACSupport.h"; sourceTree = ""; }; D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSNotificationCenter+RACSupport.m"; sourceTree = ""; }; D037643E19EDA41200A782A9 /* NSObject+RACAppKitBindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACAppKitBindings.h"; sourceTree = ""; }; D037643F19EDA41200A782A9 /* NSObject+RACAppKitBindings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACAppKitBindings.m"; sourceTree = ""; }; D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACDeallocating.h"; sourceTree = ""; }; D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACDeallocating.m"; sourceTree = ""; }; D037644219EDA41200A782A9 /* NSObject+RACDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACDescription.h"; sourceTree = ""; }; D037644319EDA41200A782A9 /* NSObject+RACDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACDescription.m"; sourceTree = ""; }; D037644419EDA41200A782A9 /* NSObject+RACKVOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACKVOWrapper.h"; sourceTree = ""; }; D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACKVOWrapper.m"; sourceTree = ""; }; D037644619EDA41200A782A9 /* NSObject+RACLifting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACLifting.h"; sourceTree = ""; }; D037644719EDA41200A782A9 /* NSObject+RACLifting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACLifting.m"; sourceTree = ""; }; D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACPropertySubscribing.h"; sourceTree = ""; }; D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACPropertySubscribing.m"; sourceTree = ""; }; D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+RACSelectorSignal.h"; sourceTree = ""; }; D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+RACSelectorSignal.m"; sourceTree = ""; }; D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSOrderedSet+RACSequenceAdditions.h"; sourceTree = ""; }; D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSOrderedSet+RACSequenceAdditions.m"; sourceTree = ""; }; D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSSet+RACSequenceAdditions.h"; sourceTree = ""; }; D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSSet+RACSequenceAdditions.m"; sourceTree = ""; }; D037645019EDA41200A782A9 /* NSString+RACKeyPathUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+RACKeyPathUtilities.h"; sourceTree = ""; }; D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+RACKeyPathUtilities.m"; sourceTree = ""; }; D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+RACSequenceAdditions.h"; sourceTree = ""; }; D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+RACSequenceAdditions.m"; sourceTree = ""; }; D037645419EDA41200A782A9 /* NSString+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+RACSupport.h"; sourceTree = ""; }; D037645519EDA41200A782A9 /* NSString+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+RACSupport.m"; sourceTree = ""; }; D037645619EDA41200A782A9 /* NSText+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSText+RACSignalSupport.h"; sourceTree = ""; }; D037645719EDA41200A782A9 /* NSText+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSText+RACSignalSupport.m"; sourceTree = ""; }; D037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+RACSupport.h"; sourceTree = ""; }; D037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+RACSupport.m"; sourceTree = ""; }; D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSUserDefaults+RACSupport.h"; sourceTree = ""; }; D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSUserDefaults+RACSupport.m"; sourceTree = ""; }; D037645C19EDA41200A782A9 /* RACArraySequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACArraySequence.h; sourceTree = ""; }; D037645D19EDA41200A782A9 /* RACArraySequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACArraySequence.m; sourceTree = ""; }; D037646019EDA41200A782A9 /* RACBehaviorSubject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACBehaviorSubject.h; sourceTree = ""; }; D037646119EDA41200A782A9 /* RACBehaviorSubject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACBehaviorSubject.m; sourceTree = ""; }; D037646219EDA41200A782A9 /* RACBlockTrampoline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACBlockTrampoline.h; sourceTree = ""; }; D037646319EDA41200A782A9 /* RACBlockTrampoline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACBlockTrampoline.m; sourceTree = ""; }; D037646419EDA41200A782A9 /* RACChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACChannel.h; sourceTree = ""; }; D037646519EDA41200A782A9 /* RACChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACChannel.m; sourceTree = ""; }; D037646619EDA41200A782A9 /* RACCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACCommand.h; sourceTree = ""; }; D037646719EDA41200A782A9 /* RACCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCommand.m; sourceTree = ""; }; D037646819EDA41200A782A9 /* RACCompoundDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACCompoundDisposable.h; sourceTree = ""; }; D037646919EDA41200A782A9 /* RACCompoundDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCompoundDisposable.m; sourceTree = ""; }; D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = RACCompoundDisposableProvider.d; sourceTree = ""; }; D037646B19EDA41200A782A9 /* RACDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDelegateProxy.h; sourceTree = ""; }; D037646C19EDA41200A782A9 /* RACDelegateProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDelegateProxy.m; sourceTree = ""; }; D037646D19EDA41200A782A9 /* RACDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDisposable.h; sourceTree = ""; }; D037646E19EDA41200A782A9 /* RACDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDisposable.m; sourceTree = ""; }; D037646F19EDA41200A782A9 /* RACDynamicSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDynamicSequence.h; sourceTree = ""; }; D037647019EDA41200A782A9 /* RACDynamicSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDynamicSequence.m; sourceTree = ""; }; D037647119EDA41200A782A9 /* RACDynamicSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDynamicSignal.h; sourceTree = ""; }; D037647219EDA41200A782A9 /* RACDynamicSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDynamicSignal.m; sourceTree = ""; }; D037647319EDA41200A782A9 /* RACEagerSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEagerSequence.h; sourceTree = ""; }; D037647419EDA41200A782A9 /* RACEagerSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEagerSequence.m; sourceTree = ""; }; D037647519EDA41200A782A9 /* RACEmptySequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEmptySequence.h; sourceTree = ""; }; D037647619EDA41200A782A9 /* RACEmptySequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEmptySequence.m; sourceTree = ""; }; D037647719EDA41200A782A9 /* RACEmptySignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEmptySignal.h; sourceTree = ""; }; D037647819EDA41200A782A9 /* RACEmptySignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEmptySignal.m; sourceTree = ""; }; D037647919EDA41200A782A9 /* RACErrorSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACErrorSignal.h; sourceTree = ""; }; D037647A19EDA41200A782A9 /* RACErrorSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACErrorSignal.m; sourceTree = ""; }; D037647B19EDA41200A782A9 /* RACEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEvent.h; sourceTree = ""; }; D037647C19EDA41200A782A9 /* RACEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEvent.m; sourceTree = ""; }; D037647D19EDA41200A782A9 /* RACGroupedSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACGroupedSignal.h; sourceTree = ""; }; D037647E19EDA41200A782A9 /* RACGroupedSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACGroupedSignal.m; sourceTree = ""; }; D037647F19EDA41200A782A9 /* RACImmediateScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACImmediateScheduler.h; sourceTree = ""; }; D037648019EDA41200A782A9 /* RACImmediateScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACImmediateScheduler.m; sourceTree = ""; }; D037648119EDA41200A782A9 /* RACIndexSetSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACIndexSetSequence.h; sourceTree = ""; }; D037648219EDA41200A782A9 /* RACIndexSetSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACIndexSetSequence.m; sourceTree = ""; }; D037648319EDA41200A782A9 /* RACKVOChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACKVOChannel.h; sourceTree = ""; }; D037648419EDA41200A782A9 /* RACKVOChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOChannel.m; sourceTree = ""; }; D037648519EDA41200A782A9 /* RACKVOTrampoline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACKVOTrampoline.h; sourceTree = ""; }; D037648619EDA41200A782A9 /* RACKVOTrampoline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOTrampoline.m; sourceTree = ""; }; D037648719EDA41200A782A9 /* RACMulticastConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACMulticastConnection.h; sourceTree = ""; }; D037648819EDA41200A782A9 /* RACMulticastConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACMulticastConnection.m; sourceTree = ""; }; D037648919EDA41200A782A9 /* RACMulticastConnection+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACMulticastConnection+Private.h"; sourceTree = ""; }; D037648C19EDA41200A782A9 /* RACPassthroughSubscriber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACPassthroughSubscriber.h; sourceTree = ""; }; D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACPassthroughSubscriber.m; sourceTree = ""; }; D037648E19EDA41200A782A9 /* RACQueueScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACQueueScheduler.h; sourceTree = ""; }; D037648F19EDA41200A782A9 /* RACQueueScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACQueueScheduler.m; sourceTree = ""; }; D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACQueueScheduler+Subclass.h"; sourceTree = ""; }; D037649119EDA41200A782A9 /* RACReplaySubject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACReplaySubject.h; sourceTree = ""; }; D037649219EDA41200A782A9 /* RACReplaySubject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACReplaySubject.m; sourceTree = ""; }; D037649319EDA41200A782A9 /* RACReturnSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACReturnSignal.h; sourceTree = ""; }; D037649419EDA41200A782A9 /* RACReturnSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACReturnSignal.m; sourceTree = ""; }; D037649519EDA41200A782A9 /* RACScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACScheduler.h; sourceTree = ""; }; D037649619EDA41200A782A9 /* RACScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACScheduler.m; sourceTree = ""; }; D037649719EDA41200A782A9 /* RACScheduler+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACScheduler+Private.h"; sourceTree = ""; }; D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACScheduler+Subclass.h"; sourceTree = ""; }; D037649919EDA41200A782A9 /* RACScopedDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACScopedDisposable.h; sourceTree = ""; }; D037649A19EDA41200A782A9 /* RACScopedDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACScopedDisposable.m; sourceTree = ""; }; D037649B19EDA41200A782A9 /* RACSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSequence.h; sourceTree = ""; }; D037649C19EDA41200A782A9 /* RACSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequence.m; sourceTree = ""; }; D037649D19EDA41200A782A9 /* RACSerialDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSerialDisposable.h; sourceTree = ""; }; D037649E19EDA41200A782A9 /* RACSerialDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSerialDisposable.m; sourceTree = ""; }; D037649F19EDA41200A782A9 /* RACSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSignal.h; sourceTree = ""; }; D03764A019EDA41200A782A9 /* RACSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSignal.m; sourceTree = ""; }; D03764A119EDA41200A782A9 /* RACSignal+Operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACSignal+Operations.h"; sourceTree = ""; }; D03764A219EDA41200A782A9 /* RACSignal+Operations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RACSignal+Operations.m"; sourceTree = ""; }; D03764A319EDA41200A782A9 /* RACSignalProvider.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = RACSignalProvider.d; sourceTree = ""; }; D03764A419EDA41200A782A9 /* RACSignalSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSignalSequence.h; sourceTree = ""; }; D03764A519EDA41200A782A9 /* RACSignalSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSignalSequence.m; sourceTree = ""; }; D03764A619EDA41200A782A9 /* RACStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACStream.h; sourceTree = ""; }; D03764A719EDA41200A782A9 /* RACStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACStream.m; sourceTree = ""; }; D03764A819EDA41200A782A9 /* RACStream+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACStream+Private.h"; sourceTree = ""; }; D03764A919EDA41200A782A9 /* RACStringSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACStringSequence.h; sourceTree = ""; }; D03764AA19EDA41200A782A9 /* RACStringSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACStringSequence.m; sourceTree = ""; }; D03764AB19EDA41200A782A9 /* RACSubject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubject.h; sourceTree = ""; }; D03764AC19EDA41200A782A9 /* RACSubject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubject.m; sourceTree = ""; }; D03764AD19EDA41200A782A9 /* RACSubscriber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriber.h; sourceTree = ""; }; D03764AE19EDA41200A782A9 /* RACSubscriber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriber.m; sourceTree = ""; }; D03764AF19EDA41200A782A9 /* RACSubscriber+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RACSubscriber+Private.h"; sourceTree = ""; }; D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriptingAssignmentTrampoline.h; sourceTree = ""; }; D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriptingAssignmentTrampoline.m; sourceTree = ""; }; D03764B219EDA41200A782A9 /* RACSubscriptionScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriptionScheduler.h; sourceTree = ""; }; D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriptionScheduler.m; sourceTree = ""; }; D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTargetQueueScheduler.h; sourceTree = ""; }; D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTargetQueueScheduler.m; sourceTree = ""; }; D03764B619EDA41200A782A9 /* RACTestScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestScheduler.h; sourceTree = ""; }; D03764B719EDA41200A782A9 /* RACTestScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestScheduler.m; sourceTree = ""; }; D03764B819EDA41200A782A9 /* RACTuple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTuple.h; sourceTree = ""; }; D03764B919EDA41200A782A9 /* RACTuple.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTuple.m; sourceTree = ""; }; D03764BA19EDA41200A782A9 /* RACTupleSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTupleSequence.h; sourceTree = ""; }; D03764BB19EDA41200A782A9 /* RACTupleSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTupleSequence.m; sourceTree = ""; }; D03764BC19EDA41200A782A9 /* RACUnarySequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACUnarySequence.h; sourceTree = ""; }; D03764BD19EDA41200A782A9 /* RACUnarySequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACUnarySequence.m; sourceTree = ""; }; D03764BE19EDA41200A782A9 /* RACUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACUnit.h; sourceTree = ""; }; D03764BF19EDA41200A782A9 /* RACUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACUnit.m; sourceTree = ""; }; D03764C019EDA41200A782A9 /* RACValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACValueTransformer.h; sourceTree = ""; }; D03764C119EDA41200A782A9 /* RACValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACValueTransformer.m; sourceTree = ""; }; D03764C219EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIActionSheet+RACSignalSupport.h"; sourceTree = ""; }; D03764C319EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIActionSheet+RACSignalSupport.m"; sourceTree = ""; }; D03764C419EDA41200A782A9 /* UIAlertView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAlertView+RACSignalSupport.h"; sourceTree = ""; }; D03764C519EDA41200A782A9 /* UIAlertView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAlertView+RACSignalSupport.m"; sourceTree = ""; }; D03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIBarButtonItem+RACCommandSupport.h"; sourceTree = ""; }; D03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIBarButtonItem+RACCommandSupport.m"; sourceTree = ""; }; D03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+RACCommandSupport.h"; sourceTree = ""; }; D03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+RACCommandSupport.m"; sourceTree = ""; }; D03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UICollectionReusableView+RACSignalSupport.h"; sourceTree = ""; }; D03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UICollectionReusableView+RACSignalSupport.m"; sourceTree = ""; }; D03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIControl+RACSignalSupport.h"; sourceTree = ""; }; D03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+RACSignalSupport.m"; sourceTree = ""; }; D03764CE19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIControl+RACSignalSupportPrivate.h"; sourceTree = ""; }; D03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+RACSignalSupportPrivate.m"; sourceTree = ""; }; D03764D019EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDatePicker+RACSignalSupport.h"; sourceTree = ""; }; D03764D119EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDatePicker+RACSignalSupport.m"; sourceTree = ""; }; D03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIGestureRecognizer+RACSignalSupport.h"; sourceTree = ""; }; D03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIGestureRecognizer+RACSignalSupport.m"; sourceTree = ""; }; D03764D419EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImagePickerController+RACSignalSupport.h"; sourceTree = ""; }; D03764D519EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImagePickerController+RACSignalSupport.m"; sourceTree = ""; }; D03764D619EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIRefreshControl+RACCommandSupport.h"; sourceTree = ""; }; D03764D719EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIRefreshControl+RACCommandSupport.m"; sourceTree = ""; }; D03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UISegmentedControl+RACSignalSupport.h"; sourceTree = ""; }; D03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UISegmentedControl+RACSignalSupport.m"; sourceTree = ""; }; D03764DA19EDA41200A782A9 /* UISlider+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UISlider+RACSignalSupport.h"; sourceTree = ""; }; D03764DB19EDA41200A782A9 /* UISlider+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UISlider+RACSignalSupport.m"; sourceTree = ""; }; D03764DC19EDA41200A782A9 /* UIStepper+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIStepper+RACSignalSupport.h"; sourceTree = ""; }; D03764DD19EDA41200A782A9 /* UIStepper+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIStepper+RACSignalSupport.m"; sourceTree = ""; }; D03764DE19EDA41200A782A9 /* UISwitch+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UISwitch+RACSignalSupport.h"; sourceTree = ""; }; D03764DF19EDA41200A782A9 /* UISwitch+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UISwitch+RACSignalSupport.m"; sourceTree = ""; }; D03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableViewCell+RACSignalSupport.h"; sourceTree = ""; }; D03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableViewCell+RACSignalSupport.m"; sourceTree = ""; }; D03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableViewHeaderFooterView+RACSignalSupport.h"; sourceTree = ""; }; D03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableViewHeaderFooterView+RACSignalSupport.m"; sourceTree = ""; }; D03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextField+RACSignalSupport.h"; sourceTree = ""; }; D03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextField+RACSignalSupport.m"; sourceTree = ""; }; D03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextView+RACSignalSupport.h"; sourceTree = ""; }; D03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextView+RACSignalSupport.m"; sourceTree = ""; }; D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTKeyPathCoding.h; sourceTree = ""; }; D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTRuntimeExtensions.h; sourceTree = ""; }; D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EXTRuntimeExtensions.m; sourceTree = ""; }; D037666919EDA57100A782A9 /* EXTScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTScope.h; sourceTree = ""; }; D037666A19EDA57100A782A9 /* metamacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = metamacros.h; sourceTree = ""; }; D037667619EDA60000A782A9 /* NSControllerRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSControllerRACSupportSpec.m; sourceTree = ""; }; D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSEnumeratorRACSequenceAdditionsSpec.m; sourceTree = ""; }; D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSNotificationCenterRACSupportSpec.m; sourceTree = ""; }; D037667A19EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACAppKitBindingsSpec.m; sourceTree = ""; }; D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACDeallocatingSpec.m; sourceTree = ""; }; D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACLiftingSpec.m; sourceTree = ""; }; D037667D19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSObjectRACPropertySubscribingExamples.h; sourceTree = ""; }; D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACPropertySubscribingExamples.m; sourceTree = ""; }; D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACPropertySubscribingSpec.m; sourceTree = ""; }; D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACSelectorSignalSpec.m; sourceTree = ""; }; D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSStringRACKeyPathUtilitiesSpec.m; sourceTree = ""; }; D037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSURLConnectionRACSupportSpec.m; sourceTree = ""; }; D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSUserDefaultsRACSupportSpec.m; sourceTree = ""; }; D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACBlockTrampolineSpec.m; sourceTree = ""; }; D037668719EDA60000A782A9 /* RACChannelExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACChannelExamples.h; sourceTree = ""; }; D037668819EDA60000A782A9 /* RACChannelExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACChannelExamples.m; sourceTree = ""; }; D037668919EDA60000A782A9 /* RACChannelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACChannelSpec.m; sourceTree = ""; }; D037668A19EDA60000A782A9 /* RACCommandSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCommandSpec.m; sourceTree = ""; }; D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCompoundDisposableSpec.m; sourceTree = ""; }; D037668C19EDA60000A782A9 /* RACControlCommandExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACControlCommandExamples.h; sourceTree = ""; }; D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACControlCommandExamples.m; sourceTree = ""; }; D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDelegateProxySpec.m; sourceTree = ""; }; D037668F19EDA60000A782A9 /* RACDisposableSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDisposableSpec.m; sourceTree = ""; }; D037669019EDA60000A782A9 /* RACEventSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEventSpec.m; sourceTree = ""; }; D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOChannelSpec.m; sourceTree = ""; }; D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOWrapperSpec.m; sourceTree = ""; }; D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACMulticastConnectionSpec.m; sourceTree = ""; }; D037669419EDA60000A782A9 /* RACPropertySignalExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACPropertySignalExamples.h; sourceTree = ""; }; D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACPropertySignalExamples.m; sourceTree = ""; }; D037669619EDA60000A782A9 /* RACSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSchedulerSpec.m; sourceTree = ""; }; D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequenceAdditionsSpec.m; sourceTree = ""; }; D037669819EDA60000A782A9 /* RACSequenceExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSequenceExamples.h; sourceTree = ""; }; D037669919EDA60000A782A9 /* RACSequenceExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequenceExamples.m; sourceTree = ""; }; D037669A19EDA60000A782A9 /* RACSequenceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequenceSpec.m; sourceTree = ""; }; D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSerialDisposableSpec.m; sourceTree = ""; }; D037669C19EDA60000A782A9 /* RACSignalSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSignalSpec.m; sourceTree = ""; }; D037669F19EDA60000A782A9 /* RACStreamExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACStreamExamples.h; sourceTree = ""; }; D03766A019EDA60000A782A9 /* RACStreamExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACStreamExamples.m; sourceTree = ""; }; D03766A119EDA60000A782A9 /* RACSubclassObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubclassObject.h; sourceTree = ""; }; D03766A219EDA60000A782A9 /* RACSubclassObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubclassObject.m; sourceTree = ""; }; D03766A319EDA60000A782A9 /* RACSubjectSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubjectSpec.m; sourceTree = ""; }; D03766A419EDA60000A782A9 /* RACSubscriberExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriberExamples.h; sourceTree = ""; }; D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriberExamples.m; sourceTree = ""; }; D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriberSpec.m; sourceTree = ""; }; D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriptingAssignmentTrampolineSpec.m; sourceTree = ""; }; D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTargetQueueSchedulerSpec.m; sourceTree = ""; }; D03766B019EDA60000A782A9 /* RACTupleSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTupleSpec.m; sourceTree = ""; }; D03766B119EDA60000A782A9 /* test-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "test-data.json"; sourceTree = ""; }; D03766B219EDA60000A782A9 /* UIActionSheetRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIActionSheetRACSupportSpec.m; sourceTree = ""; }; D03766B319EDA60000A782A9 /* UIAlertViewRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIAlertViewRACSupportSpec.m; sourceTree = ""; }; D03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBarButtonItemRACSupportSpec.m; sourceTree = ""; }; D03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIButtonRACSupportSpec.m; sourceTree = ""; }; D03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImagePickerControllerRACSupportSpec.m; sourceTree = ""; }; D037672B19EDA75D00A782A9 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensions.swift; sourceTree = ""; }; D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D04725EE19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D04725EF19E49ED7006002AA /* ReactiveCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactiveCocoa.h; sourceTree = ""; }; D04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D04725FB19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D047260C19E49F82006002AA /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D047261619E49F82006002AA /* ReactiveCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D047262719E49FE8006002AA /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; D047262919E49FE8006002AA /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; D047262A19E49FE8006002AA /* Profile.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Profile.xcconfig; sourceTree = ""; }; D047262B19E49FE8006002AA /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; D047262C19E49FE8006002AA /* Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Test.xcconfig; sourceTree = ""; }; D047262E19E49FE8006002AA /* Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Application.xcconfig; sourceTree = ""; }; D047262F19E49FE8006002AA /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; D047263019E49FE8006002AA /* StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = StaticLibrary.xcconfig; sourceTree = ""; }; D047263219E49FE8006002AA /* iOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Application.xcconfig"; sourceTree = ""; }; D047263319E49FE8006002AA /* iOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Base.xcconfig"; sourceTree = ""; }; D047263419E49FE8006002AA /* iOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Framework.xcconfig"; sourceTree = ""; }; D047263519E49FE8006002AA /* iOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-StaticLibrary.xcconfig"; sourceTree = ""; }; D047263719E49FE8006002AA /* Mac-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Application.xcconfig"; sourceTree = ""; }; D047263819E49FE8006002AA /* Mac-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Base.xcconfig"; sourceTree = ""; }; D047263919E49FE8006002AA /* Mac-DynamicLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-DynamicLibrary.xcconfig"; sourceTree = ""; }; D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Framework.xcconfig"; sourceTree = ""; }; D047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-StaticLibrary.xcconfig"; sourceTree = ""; }; D047263C19E49FE8006002AA /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; D05E662419EDD82000904ACA /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D08C54AF1A69A2AC00AD8286 /* Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Action.swift; sourceTree = ""; }; D08C54B01A69A2AC00AD8286 /* Property.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Property.swift; sourceTree = ""; }; D08C54B11A69A2AC00AD8286 /* Signal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = ""; }; D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalProducer.swift; sourceTree = ""; }; D08C54B51A69A3DB00AD8286 /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; D0A226071A72E0E900D33B74 /* SignalSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PropertySpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObjectiveCBridgingSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D0C312BB19EF2A5800984962 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = ""; }; D0C312BC19EF2A5800984962 /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = ""; }; D0C312BE19EF2A5800984962 /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = ""; }; D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectiveCBridging.swift; sourceTree = ""; }; D0C312C819EF2A5800984962 /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = ""; }; D0C312EE19EF2A7700984962 /* AtomicSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AtomicSpec.swift; sourceTree = ""; }; D0C312EF19EF2A7700984962 /* BagSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BagSpec.swift; sourceTree = ""; }; D0C312F019EF2A7700984962 /* DisposableSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposableSpec.swift; sourceTree = ""; }; D0C312F219EF2A7700984962 /* SchedulerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchedulerSpec.swift; sourceTree = ""; }; D0C3131719EF2D9700984962 /* RACTestExampleScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestExampleScheduler.h; sourceTree = ""; }; D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestExampleScheduler.m; sourceTree = ""; }; D0C3131919EF2D9700984962 /* RACTestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestObject.h; sourceTree = ""; }; D0C3131A19EF2D9700984962 /* RACTestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestObject.m; sourceTree = ""; }; D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestSchedulerSpec.m; sourceTree = ""; }; D0C3131C19EF2D9700984962 /* RACTestUIButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestUIButton.h; sourceTree = ""; }; D0C3131D19EF2D9700984962 /* RACTestUIButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestUIButton.m; sourceTree = ""; }; D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDynamicPropertySuperclass.h; sourceTree = ""; }; D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDynamicPropertySuperclass.m; sourceTree = ""; }; D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerLiftingSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensionsSpec.swift; sourceTree = ""; }; D85C65291C0D84C7005A77AD /* Flatten.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Flatten.swift; sourceTree = ""; }; D871D69E1B3B29A40070F16C /* Optional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Optional.swift; sourceTree = ""; }; EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Observer.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 57A4D2071BA13D7A00F7D4B1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 7DFBED001CDB8C9500EE435B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDF066CA1CDC1CA200199626 /* Nimble.framework in Frameworks */, CDF066CB1CDC1CA200199626 /* Quick.framework in Frameworks */, 7DFBED081CDB8C9500EE435B /* ReactiveCocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; A9B315501B3940610001CB9C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( A9B315C91B3940980001CB9C /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D04725E619E49ED7006002AA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D04725F219E49ED7006002AA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */, D05E662519EDD82000904ACA /* Nimble.framework in Frameworks */, D037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */, D04725F619E49ED7006002AA /* ReactiveCocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D047260819E49F82006002AA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D047261319E49F82006002AA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D05E662619EDD83000904ACA /* Nimble.framework in Frameworks */, D037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */, D047261719E49F82006002AA /* ReactiveCocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 57A4D2431BA13F9700F7D4B1 /* tvOS */ = { isa = PBXGroup; children = ( 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */, 57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */, 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */, 57A4D2471BA13F9700F7D4B1 /* tvOS-StaticLibrary.xcconfig */, ); path = tvOS; sourceTree = ""; }; A97451321B3A935E00F48E55 /* watchOS */ = { isa = PBXGroup; children = ( A97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */, A97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */, A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */, A97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */, ); path = watchOS; sourceTree = ""; }; D037642919EDA3B600A782A9 /* Objective-C */ = { isa = PBXGroup; children = ( D037666519EDA57100A782A9 /* extobjc */, 314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */, 314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */, D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */, D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */, D037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */, D037642D19EDA41200A782A9 /* NSControl+RACCommandSupport.m */, D037642E19EDA41200A782A9 /* NSControl+RACTextSignalSupport.h */, D037642F19EDA41200A782A9 /* NSControl+RACTextSignalSupport.m */, D037643019EDA41200A782A9 /* NSData+RACSupport.h */, D037643119EDA41200A782A9 /* NSData+RACSupport.m */, D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */, D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */, D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */, D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */, D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */, D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */, D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */, D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */, D037643A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.h */, D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */, D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */, D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */, D037643E19EDA41200A782A9 /* NSObject+RACAppKitBindings.h */, D037643F19EDA41200A782A9 /* NSObject+RACAppKitBindings.m */, D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */, D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */, D037644219EDA41200A782A9 /* NSObject+RACDescription.h */, D037644319EDA41200A782A9 /* NSObject+RACDescription.m */, D037644419EDA41200A782A9 /* NSObject+RACKVOWrapper.h */, D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */, D037644619EDA41200A782A9 /* NSObject+RACLifting.h */, D037644719EDA41200A782A9 /* NSObject+RACLifting.m */, D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */, D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */, D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */, D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */, D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */, D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */, D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */, D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */, D037645019EDA41200A782A9 /* NSString+RACKeyPathUtilities.h */, D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */, D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */, D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */, D037645419EDA41200A782A9 /* NSString+RACSupport.h */, D037645519EDA41200A782A9 /* NSString+RACSupport.m */, D037645619EDA41200A782A9 /* NSText+RACSignalSupport.h */, D037645719EDA41200A782A9 /* NSText+RACSignalSupport.m */, D037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */, D037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */, D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */, D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */, D037645C19EDA41200A782A9 /* RACArraySequence.h */, D037645D19EDA41200A782A9 /* RACArraySequence.m */, D037646019EDA41200A782A9 /* RACBehaviorSubject.h */, D037646119EDA41200A782A9 /* RACBehaviorSubject.m */, D037646219EDA41200A782A9 /* RACBlockTrampoline.h */, D037646319EDA41200A782A9 /* RACBlockTrampoline.m */, D037646419EDA41200A782A9 /* RACChannel.h */, D037646519EDA41200A782A9 /* RACChannel.m */, D037646619EDA41200A782A9 /* RACCommand.h */, D037646719EDA41200A782A9 /* RACCommand.m */, D037646819EDA41200A782A9 /* RACCompoundDisposable.h */, D037646919EDA41200A782A9 /* RACCompoundDisposable.m */, D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */, D037646B19EDA41200A782A9 /* RACDelegateProxy.h */, D037646C19EDA41200A782A9 /* RACDelegateProxy.m */, D037646D19EDA41200A782A9 /* RACDisposable.h */, D037646E19EDA41200A782A9 /* RACDisposable.m */, D037646F19EDA41200A782A9 /* RACDynamicSequence.h */, D037647019EDA41200A782A9 /* RACDynamicSequence.m */, D037647119EDA41200A782A9 /* RACDynamicSignal.h */, D037647219EDA41200A782A9 /* RACDynamicSignal.m */, D037647319EDA41200A782A9 /* RACEagerSequence.h */, D037647419EDA41200A782A9 /* RACEagerSequence.m */, D037647519EDA41200A782A9 /* RACEmptySequence.h */, D037647619EDA41200A782A9 /* RACEmptySequence.m */, D037647719EDA41200A782A9 /* RACEmptySignal.h */, D037647819EDA41200A782A9 /* RACEmptySignal.m */, D037647919EDA41200A782A9 /* RACErrorSignal.h */, D037647A19EDA41200A782A9 /* RACErrorSignal.m */, D037647B19EDA41200A782A9 /* RACEvent.h */, D037647C19EDA41200A782A9 /* RACEvent.m */, D037647D19EDA41200A782A9 /* RACGroupedSignal.h */, D037647E19EDA41200A782A9 /* RACGroupedSignal.m */, D037647F19EDA41200A782A9 /* RACImmediateScheduler.h */, D037648019EDA41200A782A9 /* RACImmediateScheduler.m */, D037648119EDA41200A782A9 /* RACIndexSetSequence.h */, D037648219EDA41200A782A9 /* RACIndexSetSequence.m */, D037648319EDA41200A782A9 /* RACKVOChannel.h */, D037648419EDA41200A782A9 /* RACKVOChannel.m */, 7A70657D1A3F88B8001E8354 /* RACKVOProxy.h */, 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */, D037648519EDA41200A782A9 /* RACKVOTrampoline.h */, D037648619EDA41200A782A9 /* RACKVOTrampoline.m */, D037648719EDA41200A782A9 /* RACMulticastConnection.h */, D037648819EDA41200A782A9 /* RACMulticastConnection.m */, D037648919EDA41200A782A9 /* RACMulticastConnection+Private.h */, D037648C19EDA41200A782A9 /* RACPassthroughSubscriber.h */, D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */, D037648E19EDA41200A782A9 /* RACQueueScheduler.h */, D037648F19EDA41200A782A9 /* RACQueueScheduler.m */, D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */, D037649119EDA41200A782A9 /* RACReplaySubject.h */, D037649219EDA41200A782A9 /* RACReplaySubject.m */, D037649319EDA41200A782A9 /* RACReturnSignal.h */, D037649419EDA41200A782A9 /* RACReturnSignal.m */, D037649519EDA41200A782A9 /* RACScheduler.h */, D037649619EDA41200A782A9 /* RACScheduler.m */, D037649719EDA41200A782A9 /* RACScheduler+Private.h */, D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */, D037649919EDA41200A782A9 /* RACScopedDisposable.h */, D037649A19EDA41200A782A9 /* RACScopedDisposable.m */, D037649B19EDA41200A782A9 /* RACSequence.h */, D037649C19EDA41200A782A9 /* RACSequence.m */, D037649D19EDA41200A782A9 /* RACSerialDisposable.h */, D037649E19EDA41200A782A9 /* RACSerialDisposable.m */, D037649F19EDA41200A782A9 /* RACSignal.h */, D03764A019EDA41200A782A9 /* RACSignal.m */, D03764A119EDA41200A782A9 /* RACSignal+Operations.h */, D03764A219EDA41200A782A9 /* RACSignal+Operations.m */, D03764A319EDA41200A782A9 /* RACSignalProvider.d */, D03764A419EDA41200A782A9 /* RACSignalSequence.h */, D03764A519EDA41200A782A9 /* RACSignalSequence.m */, D03764A619EDA41200A782A9 /* RACStream.h */, D03764A719EDA41200A782A9 /* RACStream.m */, D03764A819EDA41200A782A9 /* RACStream+Private.h */, D03764A919EDA41200A782A9 /* RACStringSequence.h */, D03764AA19EDA41200A782A9 /* RACStringSequence.m */, D03764AB19EDA41200A782A9 /* RACSubject.h */, D03764AC19EDA41200A782A9 /* RACSubject.m */, D03764AD19EDA41200A782A9 /* RACSubscriber.h */, D03764AE19EDA41200A782A9 /* RACSubscriber.m */, D03764AF19EDA41200A782A9 /* RACSubscriber+Private.h */, D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */, D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */, D03764B219EDA41200A782A9 /* RACSubscriptionScheduler.h */, D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */, D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */, D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */, D03764B619EDA41200A782A9 /* RACTestScheduler.h */, D03764B719EDA41200A782A9 /* RACTestScheduler.m */, D03764B819EDA41200A782A9 /* RACTuple.h */, D03764B919EDA41200A782A9 /* RACTuple.m */, D03764BA19EDA41200A782A9 /* RACTupleSequence.h */, D03764BB19EDA41200A782A9 /* RACTupleSequence.m */, D03764BC19EDA41200A782A9 /* RACUnarySequence.h */, D03764BD19EDA41200A782A9 /* RACUnarySequence.m */, D03764BE19EDA41200A782A9 /* RACUnit.h */, D03764BF19EDA41200A782A9 /* RACUnit.m */, D03764C019EDA41200A782A9 /* RACValueTransformer.h */, D03764C119EDA41200A782A9 /* RACValueTransformer.m */, D03764C219EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h */, D03764C319EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m */, D03764C419EDA41200A782A9 /* UIAlertView+RACSignalSupport.h */, D03764C519EDA41200A782A9 /* UIAlertView+RACSignalSupport.m */, D03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */, D03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */, D03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */, D03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */, D03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */, D03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */, D03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */, D03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */, D03764CE19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.h */, D03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */, D03764D019EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h */, D03764D119EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m */, D03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */, D03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */, D03764D419EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h */, D03764D519EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m */, D03764D619EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h */, D03764D719EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m */, D03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */, D03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */, D03764DA19EDA41200A782A9 /* UISlider+RACSignalSupport.h */, D03764DB19EDA41200A782A9 /* UISlider+RACSignalSupport.m */, D03764DC19EDA41200A782A9 /* UIStepper+RACSignalSupport.h */, D03764DD19EDA41200A782A9 /* UIStepper+RACSignalSupport.m */, D03764DE19EDA41200A782A9 /* UISwitch+RACSignalSupport.h */, D03764DF19EDA41200A782A9 /* UISwitch+RACSignalSupport.m */, D03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */, D03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */, D03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */, D03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */, D03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */, D03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */, D03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */, D03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */, D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */, D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */, ); path = "Objective-C"; sourceTree = ""; }; D037666519EDA57100A782A9 /* extobjc */ = { isa = PBXGroup; children = ( D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */, D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */, D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */, D037666919EDA57100A782A9 /* EXTScope.h */, D037666A19EDA57100A782A9 /* metamacros.h */, ); path = extobjc; sourceTree = ""; }; D037667519EDA5D900A782A9 /* Objective-C */ = { isa = PBXGroup; children = ( D037667619EDA60000A782A9 /* NSControllerRACSupportSpec.m */, D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */, D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */, D037667A19EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m */, D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */, D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */, D037667D19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.h */, D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */, D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */, D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */, D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */, D037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */, D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */, D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */, D037668719EDA60000A782A9 /* RACChannelExamples.h */, D037668819EDA60000A782A9 /* RACChannelExamples.m */, D037668919EDA60000A782A9 /* RACChannelSpec.m */, D037668A19EDA60000A782A9 /* RACCommandSpec.m */, D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */, D037668C19EDA60000A782A9 /* RACControlCommandExamples.h */, D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */, D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */, D037668F19EDA60000A782A9 /* RACDisposableSpec.m */, D037669019EDA60000A782A9 /* RACEventSpec.m */, D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */, 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */, D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */, D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */, D037669419EDA60000A782A9 /* RACPropertySignalExamples.h */, D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */, D037669619EDA60000A782A9 /* RACSchedulerSpec.m */, D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */, D037669819EDA60000A782A9 /* RACSequenceExamples.h */, D037669919EDA60000A782A9 /* RACSequenceExamples.m */, D037669A19EDA60000A782A9 /* RACSequenceSpec.m */, D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */, D037669C19EDA60000A782A9 /* RACSignalSpec.m */, D037669F19EDA60000A782A9 /* RACStreamExamples.h */, D03766A019EDA60000A782A9 /* RACStreamExamples.m */, D03766A119EDA60000A782A9 /* RACSubclassObject.h */, D03766A219EDA60000A782A9 /* RACSubclassObject.m */, D03766A319EDA60000A782A9 /* RACSubjectSpec.m */, D03766A419EDA60000A782A9 /* RACSubscriberExamples.h */, D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */, D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */, D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */, D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */, D03766B019EDA60000A782A9 /* RACTupleSpec.m */, D03766B219EDA60000A782A9 /* UIActionSheetRACSupportSpec.m */, D03766B319EDA60000A782A9 /* UIAlertViewRACSupportSpec.m */, D03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */, D03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */, D03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */, D0C3131719EF2D9700984962 /* RACTestExampleScheduler.h */, D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */, D0C3131919EF2D9700984962 /* RACTestObject.h */, D0C3131A19EF2D9700984962 /* RACTestObject.m */, D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */, D0C3131C19EF2D9700984962 /* RACTestUIButton.h */, D0C3131D19EF2D9700984962 /* RACTestUIButton.m */, ); path = "Objective-C"; sourceTree = ""; }; D03B4A3919F4C25F009E02AC /* Signals */ = { isa = PBXGroup; children = ( D08C54AF1A69A2AC00AD8286 /* Action.swift */, C7142DBB1CDEA167009F402D /* CocoaAction.swift */, CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */, D85C65291C0D84C7005A77AD /* Flatten.swift */, D08C54B01A69A2AC00AD8286 /* Property.swift */, D08C54B11A69A2AC00AD8286 /* Signal.swift */, D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */, ); name = Signals; sourceTree = ""; }; D03B4A3A19F4C26D009E02AC /* Internal Utilities */ = { isa = PBXGroup; children = ( D00004081A46864E000E7D41 /* TupleExtensions.swift */, ); name = "Internal Utilities"; sourceTree = ""; }; D03B4A3B19F4C281009E02AC /* Extensions */ = { isa = PBXGroup; children = ( D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */, ); name = Extensions; sourceTree = ""; }; D04725E019E49ED7006002AA = { isa = PBXGroup; children = ( D04725EC19E49ED7006002AA /* ReactiveCocoa */, D04725F919E49ED7006002AA /* ReactiveCocoaTests */, D047262519E49FE8006002AA /* Configuration */, D04725EB19E49ED7006002AA /* Products */, ); sourceTree = ""; usesTabs = 1; }; D04725EB19E49ED7006002AA /* Products */ = { isa = PBXGroup; children = ( D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */, D04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */, D047260C19E49F82006002AA /* ReactiveCocoa.framework */, D047261619E49F82006002AA /* ReactiveCocoaTests.xctest */, A9B315541B3940610001CB9C /* ReactiveCocoa.framework */, 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */, 7DFBED031CDB8C9500EE435B /* ReactiveCocoaTests.xctest */, ); name = Products; sourceTree = ""; }; D04725EC19E49ED7006002AA /* ReactiveCocoa */ = { isa = PBXGroup; children = ( D04725EF19E49ED7006002AA /* ReactiveCocoa.h */, D0C312B919EF2A3000984962 /* Swift */, D037642919EDA3B600A782A9 /* Objective-C */, D04725ED19E49ED7006002AA /* Supporting Files */, ); path = ReactiveCocoa; sourceTree = ""; }; D04725ED19E49ED7006002AA /* Supporting Files */ = { isa = PBXGroup; children = ( CDC42E2E1AE7AB8B00965373 /* Result.framework */, D04725EE19E49ED7006002AA /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; D04725F919E49ED7006002AA /* ReactiveCocoaTests */ = { isa = PBXGroup; children = ( D0C312ED19EF2A6F00984962 /* Swift */, D037667519EDA5D900A782A9 /* Objective-C */, D04725FA19E49ED7006002AA /* Supporting Files */, ); path = ReactiveCocoaTests; sourceTree = ""; }; D04725FA19E49ED7006002AA /* Supporting Files */ = { isa = PBXGroup; children = ( D05E662419EDD82000904ACA /* Nimble.framework */, D037672B19EDA75D00A782A9 /* Quick.framework */, D03766B119EDA60000A782A9 /* test-data.json */, BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */, D04725FB19E49ED7006002AA /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; D047262519E49FE8006002AA /* Configuration */ = { isa = PBXGroup; children = ( D047262619E49FE8006002AA /* Base */, D047263119E49FE8006002AA /* iOS */, D047263619E49FE8006002AA /* Mac OS X */, A97451321B3A935E00F48E55 /* watchOS */, 57A4D2431BA13F9700F7D4B1 /* tvOS */, D047263C19E49FE8006002AA /* README.md */, ); name = Configuration; path = Carthage/Checkouts/xcconfigs; sourceTree = ""; }; D047262619E49FE8006002AA /* Base */ = { isa = PBXGroup; children = ( D047262719E49FE8006002AA /* Common.xcconfig */, D047262819E49FE8006002AA /* Configurations */, D047262D19E49FE8006002AA /* Targets */, ); path = Base; sourceTree = ""; }; D047262819E49FE8006002AA /* Configurations */ = { isa = PBXGroup; children = ( D047262919E49FE8006002AA /* Debug.xcconfig */, D047262A19E49FE8006002AA /* Profile.xcconfig */, D047262B19E49FE8006002AA /* Release.xcconfig */, D047262C19E49FE8006002AA /* Test.xcconfig */, ); path = Configurations; sourceTree = ""; }; D047262D19E49FE8006002AA /* Targets */ = { isa = PBXGroup; children = ( D047262E19E49FE8006002AA /* Application.xcconfig */, D047262F19E49FE8006002AA /* Framework.xcconfig */, D047263019E49FE8006002AA /* StaticLibrary.xcconfig */, ); path = Targets; sourceTree = ""; }; D047263119E49FE8006002AA /* iOS */ = { isa = PBXGroup; children = ( D047263219E49FE8006002AA /* iOS-Application.xcconfig */, D047263319E49FE8006002AA /* iOS-Base.xcconfig */, D047263419E49FE8006002AA /* iOS-Framework.xcconfig */, D047263519E49FE8006002AA /* iOS-StaticLibrary.xcconfig */, ); path = iOS; sourceTree = ""; }; D047263619E49FE8006002AA /* Mac OS X */ = { isa = PBXGroup; children = ( D047263719E49FE8006002AA /* Mac-Application.xcconfig */, D047263819E49FE8006002AA /* Mac-Base.xcconfig */, D047263919E49FE8006002AA /* Mac-DynamicLibrary.xcconfig */, D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */, D047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */, ); path = "Mac OS X"; sourceTree = ""; }; D0C312B919EF2A3000984962 /* Swift */ = { isa = PBXGroup; children = ( D0C312BB19EF2A5800984962 /* Atomic.swift */, D0C312BC19EF2A5800984962 /* Bag.swift */, D0C312BE19EF2A5800984962 /* Disposable.swift */, D08C54B51A69A3DB00AD8286 /* Event.swift */, D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */, EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */, D871D69E1B3B29A40070F16C /* Optional.swift */, D0C312C819EF2A5800984962 /* Scheduler.swift */, C79B647B1CD52E23003F2376 /* EventLogger.swift */, D03B4A3919F4C25F009E02AC /* Signals */, D03B4A3A19F4C26D009E02AC /* Internal Utilities */, D03B4A3B19F4C281009E02AC /* Extensions */, ); path = Swift; sourceTree = ""; }; D0C312ED19EF2A6F00984962 /* Swift */ = { isa = PBXGroup; children = ( D021671C1A6CD50500987861 /* ActionSpec.swift */, D0C312EE19EF2A7700984962 /* AtomicSpec.swift */, D0C312EF19EF2A7700984962 /* BagSpec.swift */, CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */, D0C312F019EF2A7700984962 /* DisposableSpec.swift */, CA6F284F1C52626B001879D2 /* FlattenSpec.swift */, D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */, D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */, D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */, D0C312F219EF2A7700984962 /* SchedulerSpec.swift */, 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */, D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */, D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */, D0A226071A72E0E900D33B74 /* SignalSpec.swift */, B696FB801A7640C00075236D /* TestError.swift */, C79B64731CD38B2B003F2376 /* TestLogger.swift */, ); path = Swift; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 57A4D2091BA13D7A00F7D4B1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 57A4D20A1BA13D7A00F7D4B1 /* ReactiveCocoa.h in Headers */, 57A4D20B1BA13D7A00F7D4B1 /* EXTKeyPathCoding.h in Headers */, A1046B7D1BFF5664004D8045 /* EXTRuntimeExtensions.h in Headers */, 57A4D20C1BA13D7A00F7D4B1 /* EXTScope.h in Headers */, 57A4D20D1BA13D7A00F7D4B1 /* metamacros.h in Headers */, 57A4D20E1BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.h in Headers */, 57A4D20F1BA13D7A00F7D4B1 /* NSData+RACSupport.h in Headers */, BEBDD6E51CDC292D009A75A9 /* RACDelegateProxy.h in Headers */, 57A4D2101BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.h in Headers */, 57A4D2111BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.h in Headers */, 57A4D2121BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.h in Headers */, 57A4D2131BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.h in Headers */, 57A4D2141BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.h in Headers */, 57A4D2151BA13D7A00F7D4B1 /* NSObject+RACDeallocating.h in Headers */, 57A4D2161BA13D7A00F7D4B1 /* NSObject+RACLifting.h in Headers */, 57A4D2171BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.h in Headers */, 57DC89A01C5066D400E367B7 /* UIGestureRecognizer+RACSignalSupport.h in Headers */, 57A4D2181BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.h in Headers */, 57A4D2191BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.h in Headers */, 57A4D21A1BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.h in Headers */, 57A4D21B1BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.h in Headers */, 57A4D21C1BA13D7A00F7D4B1 /* NSString+RACSupport.h in Headers */, 57A4D21E1BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.h in Headers */, 57A4D21F1BA13D7A00F7D4B1 /* RACBehaviorSubject.h in Headers */, 57A4D2201BA13D7A00F7D4B1 /* RACChannel.h in Headers */, 57A4D2211BA13D7A00F7D4B1 /* RACCommand.h in Headers */, 57A4D2221BA13D7A00F7D4B1 /* RACCompoundDisposable.h in Headers */, 57A4D2231BA13D7A00F7D4B1 /* RACDisposable.h in Headers */, 57A4D2241BA13D7A00F7D4B1 /* RACEvent.h in Headers */, 7DFBED6F1CDB926400EE435B /* UIBarButtonItem+RACCommandSupport.h in Headers */, 57A4D2251BA13D7A00F7D4B1 /* RACGroupedSignal.h in Headers */, 57A4D2261BA13D7A00F7D4B1 /* RACKVOChannel.h in Headers */, 57A4D2271BA13D7A00F7D4B1 /* RACMulticastConnection.h in Headers */, 57A4D2281BA13D7A00F7D4B1 /* RACQueueScheduler.h in Headers */, 57DC89A51C50675700E367B7 /* UITextField+RACSignalSupport.h in Headers */, 57A4D2291BA13D7A00F7D4B1 /* RACQueueScheduler+Subclass.h in Headers */, 57A4D22A1BA13D7A00F7D4B1 /* RACReplaySubject.h in Headers */, 57DC89A21C50673C00E367B7 /* UISegmentedControl+RACSignalSupport.h in Headers */, 57A4D22B1BA13D7A00F7D4B1 /* RACScheduler.h in Headers */, 57DC89A41C50674D00E367B7 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */, 57A4D22C1BA13D7A00F7D4B1 /* RACScheduler+Subclass.h in Headers */, 57DC89A11C50672B00E367B7 /* UIControl+RACSignalSupport.h in Headers */, 57A4D22D1BA13D7A00F7D4B1 /* RACScopedDisposable.h in Headers */, 57DC89A31C50674300E367B7 /* UITableViewCell+RACSignalSupport.h in Headers */, 57A4D22E1BA13D7A00F7D4B1 /* RACSequence.h in Headers */, 57A4D22F1BA13D7A00F7D4B1 /* RACSerialDisposable.h in Headers */, 57A4D2301BA13D7A00F7D4B1 /* RACSignal.h in Headers */, 57DC89A81C50679E00E367B7 /* UICollectionReusableView+RACSignalSupport.h in Headers */, 57DC89A71C50679700E367B7 /* UIButton+RACCommandSupport.h in Headers */, 57A4D2311BA13D7A00F7D4B1 /* RACSignal+Operations.h in Headers */, 57A4D2321BA13D7A00F7D4B1 /* RACStream.h in Headers */, 57A4D2331BA13D7A00F7D4B1 /* RACSubject.h in Headers */, 57A4D2341BA13D7A00F7D4B1 /* RACSubscriber.h in Headers */, 57A4D2351BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.h in Headers */, 57A4D2361BA13D7A00F7D4B1 /* RACTargetQueueScheduler.h in Headers */, 57A4D2371BA13D7A00F7D4B1 /* RACTestScheduler.h in Headers */, 57A4D2381BA13D7A00F7D4B1 /* RACTuple.h in Headers */, 57DC89A61C50675F00E367B7 /* UITextView+RACSignalSupport.h in Headers */, 57A4D2391BA13D7A00F7D4B1 /* RACUnit.h in Headers */, 57A4D23A1BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; A9B315511B3940610001CB9C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( A9B315CA1B3940AB0001CB9C /* ReactiveCocoa.h in Headers */, A9B315CB1B3940AB0001CB9C /* EXTKeyPathCoding.h in Headers */, A1046B7C1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */, A9B315CD1B3940AB0001CB9C /* EXTScope.h in Headers */, A9B315CE1B3940AB0001CB9C /* metamacros.h in Headers */, A9B315D01B3940AB0001CB9C /* NSArray+RACSequenceAdditions.h in Headers */, A9B315D31B3940AB0001CB9C /* NSData+RACSupport.h in Headers */, A9B315D41B3940AB0001CB9C /* NSDictionary+RACSequenceAdditions.h in Headers */, A9B315D51B3940AB0001CB9C /* NSEnumerator+RACSequenceAdditions.h in Headers */, A9B315D61B3940AB0001CB9C /* NSFileHandle+RACSupport.h in Headers */, A9B315D71B3940AB0001CB9C /* NSIndexSet+RACSequenceAdditions.h in Headers */, A9B315D91B3940AB0001CB9C /* NSNotificationCenter+RACSupport.h in Headers */, A9B315DB1B3940AB0001CB9C /* NSObject+RACDeallocating.h in Headers */, A9B315DE1B3940AB0001CB9C /* NSObject+RACLifting.h in Headers */, A9B315DF1B3940AB0001CB9C /* NSObject+RACPropertySubscribing.h in Headers */, A9B315E01B3940AB0001CB9C /* NSObject+RACSelectorSignal.h in Headers */, A9B315E11B3940AB0001CB9C /* NSOrderedSet+RACSequenceAdditions.h in Headers */, A9B315E21B3940AB0001CB9C /* NSSet+RACSequenceAdditions.h in Headers */, A9B315E41B3940AB0001CB9C /* NSString+RACSequenceAdditions.h in Headers */, A9B315E51B3940AB0001CB9C /* NSString+RACSupport.h in Headers */, A9B315E81B3940AB0001CB9C /* NSUserDefaults+RACSupport.h in Headers */, A9B315EA1B3940AB0001CB9C /* RACBehaviorSubject.h in Headers */, A9B315EC1B3940AB0001CB9C /* RACChannel.h in Headers */, A9B315ED1B3940AC0001CB9C /* RACCommand.h in Headers */, A9B315EE1B3940AC0001CB9C /* RACCompoundDisposable.h in Headers */, A9B315F01B3940AC0001CB9C /* RACDisposable.h in Headers */, A9B315F71B3940AC0001CB9C /* RACEvent.h in Headers */, BEBDD6E61CDC292D009A75A9 /* RACDelegateProxy.h in Headers */, A9B315F81B3940AC0001CB9C /* RACGroupedSignal.h in Headers */, A9B315FB1B3940AC0001CB9C /* RACKVOChannel.h in Headers */, A9B315FE1B3940AC0001CB9C /* RACMulticastConnection.h in Headers */, A9B316021B3940AD0001CB9C /* RACQueueScheduler.h in Headers */, A9B316031B3940AD0001CB9C /* RACQueueScheduler+Subclass.h in Headers */, A9B316041B3940AD0001CB9C /* RACReplaySubject.h in Headers */, A9B316061B3940AD0001CB9C /* RACScheduler.h in Headers */, A9B316081B3940AD0001CB9C /* RACScheduler+Subclass.h in Headers */, A9B316091B3940AD0001CB9C /* RACScopedDisposable.h in Headers */, A9B3160A1B3940AD0001CB9C /* RACSequence.h in Headers */, A9B3160B1B3940AD0001CB9C /* RACSerialDisposable.h in Headers */, A9B3160C1B3940AE0001CB9C /* RACSignal.h in Headers */, A9B3160D1B3940AE0001CB9C /* RACSignal+Operations.h in Headers */, A9B3160F1B3940AE0001CB9C /* RACStream.h in Headers */, A9B316121B3940AE0001CB9C /* RACSubject.h in Headers */, A9B316131B3940AE0001CB9C /* RACSubscriber.h in Headers */, A9B316151B3940AE0001CB9C /* RACSubscriptingAssignmentTrampoline.h in Headers */, A9B316171B3940AF0001CB9C /* RACTargetQueueScheduler.h in Headers */, A9B316181B3940AF0001CB9C /* RACTestScheduler.h in Headers */, A9B316191B3940AF0001CB9C /* RACTuple.h in Headers */, A9B3161C1B3940AF0001CB9C /* RACUnit.h in Headers */, A9B316311B3940B20001CB9C /* RACDynamicPropertySuperclass.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D04725E719E49ED7006002AA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D04725F019E49ED7006002AA /* ReactiveCocoa.h in Headers */, D037652019EDA41200A782A9 /* NSObject+RACLifting.h in Headers */, D03764EC19EDA41200A782A9 /* NSControl+RACCommandSupport.h in Headers */, D037655C19EDA41200A782A9 /* RACChannel.h in Headers */, D03765EE19EDA41200A782A9 /* RACSubscriber.h in Headers */, D03765D219EDA41200A782A9 /* RACSignal.h in Headers */, D037650419EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */, D43F27A01A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */, D037659A19EDA41200A782A9 /* RACKVOChannel.h in Headers */, D037651419EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */, D037650C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */, D037667319EDA57100A782A9 /* metamacros.h in Headers */, D037666B19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */, D03765F419EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */, D03765C419EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */, D037656E19EDA41200A782A9 /* RACDisposable.h in Headers */, D03765B019EDA41200A782A9 /* RACQueueScheduler.h in Headers */, BEBDD6E81CDC292F009A75A9 /* RACDelegateProxy.h in Headers */, D037652419EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */, D037650019EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */, D037653019EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */, D037654019EDA41200A782A9 /* NSText+RACSignalSupport.h in Headers */, D03765E019EDA41200A782A9 /* RACStream.h in Headers */, D03765FC19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */, D03765B419EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */, D037661019EDA41200A782A9 /* RACUnit.h in Headers */, D037656419EDA41200A782A9 /* RACCompoundDisposable.h in Headers */, D03764F419EDA41200A782A9 /* NSData+RACSupport.h in Headers */, D03764FC19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */, D03765CA19EDA41200A782A9 /* RACSequence.h in Headers */, D037672719EDA63400A782A9 /* RACBehaviorSubject.h in Headers */, D037653C19EDA41200A782A9 /* NSString+RACSupport.h in Headers */, D03765CE19EDA41200A782A9 /* RACSerialDisposable.h in Headers */, D03765D619EDA41200A782A9 /* RACSignal+Operations.h in Headers */, D03765B619EDA41200A782A9 /* RACReplaySubject.h in Headers */, D03765A219EDA41200A782A9 /* RACMulticastConnection.h in Headers */, D037658E19EDA41200A782A9 /* RACGroupedSignal.h in Headers */, D037654819EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */, D03765BE19EDA41200A782A9 /* RACScheduler.h in Headers */, D037656019EDA41200A782A9 /* RACCommand.h in Headers */, D037660419EDA41200A782A9 /* RACTuple.h in Headers */, D03765C619EDA41200A782A9 /* RACScopedDisposable.h in Headers */, D037660019EDA41200A782A9 /* RACTestScheduler.h in Headers */, D037652C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */, D03764F019EDA41200A782A9 /* NSControl+RACTextSignalSupport.h in Headers */, D03765EA19EDA41200A782A9 /* RACSubject.h in Headers */, A1046B7A1BFF5661004D8045 /* EXTRuntimeExtensions.h in Headers */, D037652819EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */, D037654419EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */, D03764E819EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */, D037651019EDA41200A782A9 /* NSObject+RACAppKitBindings.h in Headers */, D037658A19EDA41200A782A9 /* RACEvent.h in Headers */, D037667119EDA57100A782A9 /* EXTScope.h in Headers */, D037653819EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */, D03764F819EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D047260919E49F82006002AA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D037664519EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h in Headers */, D037666419EDA43C00A782A9 /* ReactiveCocoa.h in Headers */, D037652519EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */, D03765B119EDA41200A782A9 /* RACQueueScheduler.h in Headers */, D037662519EDA41200A782A9 /* UIButton+RACCommandSupport.h in Headers */, D037672819EDA63500A782A9 /* RACBehaviorSubject.h in Headers */, D037660119EDA41200A782A9 /* RACTestScheduler.h in Headers */, D03765A319EDA41200A782A9 /* RACMulticastConnection.h in Headers */, D03765B719EDA41200A782A9 /* RACReplaySubject.h in Headers */, D037663D19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h in Headers */, D037656F19EDA41200A782A9 /* RACDisposable.h in Headers */, 314304171ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h in Headers */, D037654519EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */, D037661D19EDA41200A782A9 /* UIAlertView+RACSignalSupport.h in Headers */, D037650D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */, D037650119EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */, D037666119EDA41200A782A9 /* UITextView+RACSignalSupport.h in Headers */, D037659B19EDA41200A782A9 /* RACKVOChannel.h in Headers */, D037652D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */, D03764F919EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */, D037667219EDA57100A782A9 /* EXTScope.h in Headers */, D037663519EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h in Headers */, D037667419EDA57100A782A9 /* metamacros.h in Headers */, D03764FD19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */, D037652119EDA41200A782A9 /* NSObject+RACLifting.h in Headers */, D037665919EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */, D037656519EDA41200A782A9 /* RACCompoundDisposable.h in Headers */, D037653D19EDA41200A782A9 /* NSString+RACSupport.h in Headers */, D037662919EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h in Headers */, D037660519EDA41200A782A9 /* RACTuple.h in Headers */, D037665519EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h in Headers */, D03764F519EDA41200A782A9 /* NSData+RACSupport.h in Headers */, D037653919EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */, D037651519EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */, D037658F19EDA41200A782A9 /* RACGroupedSignal.h in Headers */, D03765C519EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */, D03765E119EDA41200A782A9 /* RACStream.h in Headers */, D03765D719EDA41200A782A9 /* RACSignal+Operations.h in Headers */, D037665D19EDA41200A782A9 /* UITextField+RACSignalSupport.h in Headers */, D037664919EDA41200A782A9 /* UISlider+RACSignalSupport.h in Headers */, D03765BF19EDA41200A782A9 /* RACScheduler.h in Headers */, D43F27A11A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */, D03764E919EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */, D037654919EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */, D037663919EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h in Headers */, D037653119EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */, D03765CB19EDA41200A782A9 /* RACSequence.h in Headers */, D037662D19EDA41200A782A9 /* UIControl+RACSignalSupport.h in Headers */, D037666C19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */, D037658B19EDA41200A782A9 /* RACEvent.h in Headers */, D03765CF19EDA41200A782A9 /* RACSerialDisposable.h in Headers */, D037650519EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */, D037655D19EDA41200A782A9 /* RACChannel.h in Headers */, D03765B519EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */, D037665119EDA41200A782A9 /* UISwitch+RACSignalSupport.h in Headers */, D037664119EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h in Headers */, D037652919EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */, D03765D319EDA41200A782A9 /* RACSignal.h in Headers */, D03765F519EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */, D03765C719EDA41200A782A9 /* RACScopedDisposable.h in Headers */, A1046B7B1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */, D037661119EDA41200A782A9 /* RACUnit.h in Headers */, D03765FD19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */, D037661919EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h in Headers */, D037664D19EDA41200A782A9 /* UIStepper+RACSignalSupport.h in Headers */, D037662119EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h in Headers */, D03765EB19EDA41200A782A9 /* RACSubject.h in Headers */, BEBDD6E71CDC292E009A75A9 /* RACDelegateProxy.h in Headers */, D037656119EDA41200A782A9 /* RACCommand.h in Headers */, D03765EF19EDA41200A782A9 /* RACSubscriber.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 57A4D1AF1BA13D7A00F7D4B1 /* ReactiveCocoa-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 57A4D23C1BA13D7A00F7D4B1 /* Build configuration list for PBXNativeTarget "ReactiveCocoa-tvOS" */; buildPhases = ( 57A4D1B01BA13D7A00F7D4B1 /* Sources */, 57A4D2071BA13D7A00F7D4B1 /* Frameworks */, 57A4D2091BA13D7A00F7D4B1 /* Headers */, 57A4D23B1BA13D7A00F7D4B1 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "ReactiveCocoa-tvOS"; productName = ReactiveCocoa; productReference = 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */; productType = "com.apple.product-type.framework"; }; 7DFBED021CDB8C9500EE435B /* ReactiveCocoa-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 7DFBED0F1CDB8C9500EE435B /* Build configuration list for PBXNativeTarget "ReactiveCocoa-tvOSTests" */; buildPhases = ( 7DFBECFF1CDB8C9500EE435B /* Sources */, 7DFBED001CDB8C9500EE435B /* Frameworks */, 7DFBED011CDB8C9500EE435B /* Resources */, 7DFBED151CDB8CEC00EE435B /* Copy Frameworks */, ); buildRules = ( ); dependencies = ( 7DFBED0A1CDB8C9500EE435B /* PBXTargetDependency */, ); name = "ReactiveCocoa-tvOSTests"; productName = "ReactiveCocoa-tvOSTests"; productReference = 7DFBED031CDB8C9500EE435B /* ReactiveCocoaTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; A9B315531B3940610001CB9C /* ReactiveCocoa-watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = A9B3155D1B3940610001CB9C /* Build configuration list for PBXNativeTarget "ReactiveCocoa-watchOS" */; buildPhases = ( A9B3154F1B3940610001CB9C /* Sources */, A9B315501B3940610001CB9C /* Frameworks */, A9B315511B3940610001CB9C /* Headers */, A9B315521B3940610001CB9C /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "ReactiveCocoa-watchOS"; productName = ReactiveCocoa; productReference = A9B315541B3940610001CB9C /* ReactiveCocoa.framework */; productType = "com.apple.product-type.framework"; }; D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-Mac" */; buildPhases = ( D04725E519E49ED7006002AA /* Sources */, D04725E619E49ED7006002AA /* Frameworks */, D04725E719E49ED7006002AA /* Headers */, D04725E819E49ED7006002AA /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "ReactiveCocoa-Mac"; productName = ReactiveCocoa; productReference = D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */; productType = "com.apple.product-type.framework"; }; D04725F419E49ED7006002AA /* ReactiveCocoa-MacTests */ = { isa = PBXNativeTarget; buildConfigurationList = D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-MacTests" */; buildPhases = ( D04725F119E49ED7006002AA /* Sources */, D04725F219E49ED7006002AA /* Frameworks */, D04725F319E49ED7006002AA /* Resources */, ); buildRules = ( ); dependencies = ( D04725F819E49ED7006002AA /* PBXTargetDependency */, ); name = "ReactiveCocoa-MacTests"; productName = ReactiveCocoaTests; productReference = D04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D047260B19E49F82006002AA /* ReactiveCocoa-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = D047261F19E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-iOS" */; buildPhases = ( D047260719E49F82006002AA /* Sources */, D047260819E49F82006002AA /* Frameworks */, D047260919E49F82006002AA /* Headers */, D047260A19E49F82006002AA /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "ReactiveCocoa-iOS"; productName = ReactiveCocoa; productReference = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; productType = "com.apple.product-type.framework"; }; D047261519E49F82006002AA /* ReactiveCocoa-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = D047262219E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-iOSTests" */; buildPhases = ( D047261219E49F82006002AA /* Sources */, D047261319E49F82006002AA /* Frameworks */, D047261419E49F82006002AA /* Resources */, D01B7B6119EDD8F600D26E01 /* Copy Frameworks */, ); buildRules = ( ); dependencies = ( D047261919E49F82006002AA /* PBXTargetDependency */, ); name = "ReactiveCocoa-iOSTests"; productName = ReactiveCocoaTests; productReference = D047261619E49F82006002AA /* ReactiveCocoaTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ D04725E119E49ED7006002AA /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0710; ORGANIZATIONNAME = GitHub; TargetAttributes = { 57A4D1AF1BA13D7A00F7D4B1 = { LastSwiftMigration = 0800; }; 7DFBED021CDB8C9500EE435B = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 0800; }; A9B315531B3940610001CB9C = { CreatedOnToolsVersion = 7.0; LastSwiftMigration = 0800; }; D04725E919E49ED7006002AA = { CreatedOnToolsVersion = 6.1; LastSwiftMigration = 0800; }; D04725F419E49ED7006002AA = { CreatedOnToolsVersion = 6.1; LastSwiftMigration = 0800; }; D047260B19E49F82006002AA = { CreatedOnToolsVersion = 6.1; LastSwiftMigration = 0800; }; D047261519E49F82006002AA = { CreatedOnToolsVersion = 6.1; LastSwiftMigration = 0800; }; }; }; buildConfigurationList = D04725E419E49ED7006002AA /* Build configuration list for PBXProject "ReactiveCocoa" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = D04725E019E49ED7006002AA; productRefGroup = D04725EB19E49ED7006002AA /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */, D04725F419E49ED7006002AA /* ReactiveCocoa-MacTests */, D047260B19E49F82006002AA /* ReactiveCocoa-iOS */, D047261519E49F82006002AA /* ReactiveCocoa-iOSTests */, A9B315531B3940610001CB9C /* ReactiveCocoa-watchOS */, 57A4D1AF1BA13D7A00F7D4B1 /* ReactiveCocoa-tvOS */, 7DFBED021CDB8C9500EE435B /* ReactiveCocoa-tvOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 57A4D23B1BA13D7A00F7D4B1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 7DFBED011CDB8C9500EE435B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 7DFBED141CDB8CE600EE435B /* test-data.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; A9B315521B3940610001CB9C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D04725E819E49ED7006002AA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D04725F319E49ED7006002AA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( D037671719EDA60000A782A9 /* test-data.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; D047260A19E49F82006002AA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D047261419E49F82006002AA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( D037671819EDA60000A782A9 /* test-data.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 57A4D1B01BA13D7A00F7D4B1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */, 57D476951C4206EC00EFE697 /* UITableViewCell+RACSignalSupport.m in Sources */, 57A4D1B21BA13D7A00F7D4B1 /* RACCompoundDisposableProvider.d in Sources */, 57D476901C4206D400EFE697 /* UIControl+RACSignalSupportPrivate.m in Sources */, 57A4D1B31BA13D7A00F7D4B1 /* RACSignalProvider.d in Sources */, 57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */, 57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */, 57A4D1B71BA13D7A00F7D4B1 /* ObjectiveCBridging.swift in Sources */, 57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */, 57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */, 57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */, 57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */, 57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */, 57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */, 57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */, 57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */, 57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */, 57A4D1C11BA13D7A00F7D4B1 /* EXTRuntimeExtensions.m in Sources */, 57A4D1C21BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.m in Sources */, 57A4D1C31BA13D7A00F7D4B1 /* NSData+RACSupport.m in Sources */, 57A4D1C41BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.m in Sources */, 57A4D1C51BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.m in Sources */, D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */, 57D476961C4206EC00EFE697 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */, 57A4D1C61BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.m in Sources */, 57A4D1C71BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.m in Sources */, 57A4D1C81BA13D7A00F7D4B1 /* NSInvocation+RACTypeParsing.m in Sources */, 57D4769B1C4206F200EFE697 /* UICollectionReusableView+RACSignalSupport.m in Sources */, 57A4D1C91BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.m in Sources */, 7DFBED6E1CDB918900EE435B /* UIBarButtonItem+RACCommandSupport.m in Sources */, 57A4D1CA1BA13D7A00F7D4B1 /* NSObject+RACDeallocating.m in Sources */, 57A4D1CB1BA13D7A00F7D4B1 /* NSObject+RACDescription.m in Sources */, 57A4D1CC1BA13D7A00F7D4B1 /* NSObject+RACKVOWrapper.m in Sources */, 57A4D1CD1BA13D7A00F7D4B1 /* NSObject+RACLifting.m in Sources */, 57A4D1CE1BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.m in Sources */, 57A4D1CF1BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.m in Sources */, 57D476981C4206EC00EFE697 /* UITextView+RACSignalSupport.m in Sources */, 57A4D1D01BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.m in Sources */, 57A4D1D11BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.m in Sources */, 57D476911C4206DA00EFE697 /* UIGestureRecognizer+RACSignalSupport.m in Sources */, 57A4D1D21BA13D7A00F7D4B1 /* NSString+RACKeyPathUtilities.m in Sources */, 57D4769A1C4206F200EFE697 /* UIButton+RACCommandSupport.m in Sources */, 57A4D1D31BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.m in Sources */, 57A4D1D41BA13D7A00F7D4B1 /* NSString+RACSupport.m in Sources */, 57A4D1D61BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.m in Sources */, 57A4D1D71BA13D7A00F7D4B1 /* RACArraySequence.m in Sources */, 57A4D1D81BA13D7A00F7D4B1 /* RACBehaviorSubject.m in Sources */, 57A4D1D91BA13D7A00F7D4B1 /* RACBlockTrampoline.m in Sources */, 57A4D1DA1BA13D7A00F7D4B1 /* RACChannel.m in Sources */, 57A4D1DB1BA13D7A00F7D4B1 /* RACCommand.m in Sources */, 57A4D1DC1BA13D7A00F7D4B1 /* RACCompoundDisposable.m in Sources */, 57A4D1DD1BA13D7A00F7D4B1 /* RACDelegateProxy.m in Sources */, 57A4D1DE1BA13D7A00F7D4B1 /* RACDisposable.m in Sources */, EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */, 57A4D1DF1BA13D7A00F7D4B1 /* RACDynamicSequence.m in Sources */, C7142DBF1CDEA195009F402D /* CocoaAction.swift in Sources */, 57A4D1E01BA13D7A00F7D4B1 /* RACDynamicSignal.m in Sources */, 57A4D1E11BA13D7A00F7D4B1 /* RACEagerSequence.m in Sources */, C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */, 57D4768D1C42063C00EFE697 /* UIControl+RACSignalSupport.m in Sources */, 57A4D1E21BA13D7A00F7D4B1 /* RACEmptySequence.m in Sources */, 57A4D1E31BA13D7A00F7D4B1 /* RACEmptySignal.m in Sources */, 57A4D1E41BA13D7A00F7D4B1 /* RACErrorSignal.m in Sources */, 57A4D1E51BA13D7A00F7D4B1 /* RACEvent.m in Sources */, 57A4D1E61BA13D7A00F7D4B1 /* RACGroupedSignal.m in Sources */, 57A4D1E71BA13D7A00F7D4B1 /* RACImmediateScheduler.m in Sources */, 57D476971C4206EC00EFE697 /* UITextField+RACSignalSupport.m in Sources */, 57A4D1E81BA13D7A00F7D4B1 /* RACIndexSetSequence.m in Sources */, 57A4D1E91BA13D7A00F7D4B1 /* RACKVOChannel.m in Sources */, 57A4D1EA1BA13D7A00F7D4B1 /* RACKVOProxy.m in Sources */, 57A4D1EB1BA13D7A00F7D4B1 /* RACKVOTrampoline.m in Sources */, 57A4D1EC1BA13D7A00F7D4B1 /* RACMulticastConnection.m in Sources */, 57A4D1EE1BA13D7A00F7D4B1 /* RACPassthroughSubscriber.m in Sources */, 57A4D1EF1BA13D7A00F7D4B1 /* RACQueueScheduler.m in Sources */, 57A4D1F01BA13D7A00F7D4B1 /* RACReplaySubject.m in Sources */, 57A4D1F11BA13D7A00F7D4B1 /* RACReturnSignal.m in Sources */, 57A4D1F21BA13D7A00F7D4B1 /* RACScheduler.m in Sources */, 57A4D1F31BA13D7A00F7D4B1 /* RACScopedDisposable.m in Sources */, 57A4D1F41BA13D7A00F7D4B1 /* RACSequence.m in Sources */, 57A4D1F51BA13D7A00F7D4B1 /* RACSerialDisposable.m in Sources */, 57A4D1F61BA13D7A00F7D4B1 /* RACSignal.m in Sources */, 57D476921C4206DF00EFE697 /* UISegmentedControl+RACSignalSupport.m in Sources */, 57A4D1F71BA13D7A00F7D4B1 /* RACSignal+Operations.m in Sources */, 57A4D1F81BA13D7A00F7D4B1 /* RACSignalSequence.m in Sources */, 57A4D1F91BA13D7A00F7D4B1 /* RACStream.m in Sources */, 57A4D1FA1BA13D7A00F7D4B1 /* RACStringSequence.m in Sources */, CD0C45E11CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, 57A4D1FB1BA13D7A00F7D4B1 /* RACSubject.m in Sources */, 57A4D1FC1BA13D7A00F7D4B1 /* RACSubscriber.m in Sources */, 57A4D1FD1BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.m in Sources */, 57A4D1FE1BA13D7A00F7D4B1 /* RACSubscriptionScheduler.m in Sources */, 57A4D1FF1BA13D7A00F7D4B1 /* RACTargetQueueScheduler.m in Sources */, 57A4D2001BA13D7A00F7D4B1 /* RACTestScheduler.m in Sources */, 57A4D2011BA13D7A00F7D4B1 /* RACTuple.m in Sources */, 57A4D2021BA13D7A00F7D4B1 /* RACTupleSequence.m in Sources */, 57A4D2031BA13D7A00F7D4B1 /* RACUnarySequence.m in Sources */, 57A4D2041BA13D7A00F7D4B1 /* RACUnit.m in Sources */, 57A4D2051BA13D7A00F7D4B1 /* RACValueTransformer.m in Sources */, 57A4D2061BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 7DFBECFF1CDB8C9500EE435B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 7DFBED221CDB8DE300EE435B /* ActionSpec.swift in Sources */, 7DFBED231CDB8DE300EE435B /* AtomicSpec.swift in Sources */, 7DFBED241CDB8DE300EE435B /* BagSpec.swift in Sources */, 7DFBED251CDB8DE300EE435B /* DisposableSpec.swift in Sources */, 7DFBED261CDB8DE300EE435B /* FoundationExtensionsSpec.swift in Sources */, 7DFBED271CDB8DE300EE435B /* ObjectiveCBridgingSpec.swift in Sources */, 7DFBED281CDB8DE300EE435B /* PropertySpec.swift in Sources */, 7DFBED291CDB8DE300EE435B /* SchedulerSpec.swift in Sources */, 7DFBED2A1CDB8DE300EE435B /* SignalLifetimeSpec.swift in Sources */, 7DFBED2B1CDB8DE300EE435B /* SignalProducerSpec.swift in Sources */, 7DFBED2C1CDB8DE300EE435B /* SignalProducerLiftingSpec.swift in Sources */, 7DFBED2D1CDB8DE300EE435B /* SignalSpec.swift in Sources */, 7DFBED2E1CDB8DE300EE435B /* FlattenSpec.swift in Sources */, 7DFBED2F1CDB8DE300EE435B /* TestError.swift in Sources */, 7DFBED301CDB8DE300EE435B /* TestLogger.swift in Sources */, 7DFBED321CDB8DE300EE435B /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */, 7DFBED331CDB8DE300EE435B /* NSNotificationCenterRACSupportSpec.m in Sources */, 7DFBED351CDB8DE300EE435B /* NSObjectRACDeallocatingSpec.m in Sources */, 7DFBED361CDB8DE300EE435B /* NSObjectRACLiftingSpec.m in Sources */, 7DFBED381CDB8DE300EE435B /* NSObjectRACPropertySubscribingExamples.m in Sources */, 7DFBED391CDB8DE300EE435B /* NSObjectRACPropertySubscribingSpec.m in Sources */, 7DFBED3A1CDB8DE300EE435B /* NSObjectRACSelectorSignalSpec.m in Sources */, 7DFBED3B1CDB8DE300EE435B /* NSStringRACKeyPathUtilitiesSpec.m in Sources */, 7DFBED3D1CDB8DE300EE435B /* NSUserDefaultsRACSupportSpec.m in Sources */, 7DFBED3E1CDB8DE300EE435B /* RACBlockTrampolineSpec.m in Sources */, 7DFBED401CDB8DE300EE435B /* RACChannelExamples.m in Sources */, 7DFBED411CDB8DE300EE435B /* RACChannelSpec.m in Sources */, 7DFBED421CDB8DE300EE435B /* RACCommandSpec.m in Sources */, 7DFBED431CDB8DE300EE435B /* RACCompoundDisposableSpec.m in Sources */, 7DFBED451CDB8DE300EE435B /* RACControlCommandExamples.m in Sources */, 7DFBED461CDB8DE300EE435B /* RACDelegateProxySpec.m in Sources */, 7DFBED471CDB8DE300EE435B /* RACDisposableSpec.m in Sources */, 7DFBED481CDB8DE300EE435B /* RACEventSpec.m in Sources */, 7DFBED491CDB8DE300EE435B /* RACKVOChannelSpec.m in Sources */, CD8401851CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */, 7DFBED4A1CDB8DE300EE435B /* RACKVOProxySpec.m in Sources */, 7DFBED4B1CDB8DE300EE435B /* RACKVOWrapperSpec.m in Sources */, 7DFBED6D1CDB8F7D00EE435B /* SignalProducerNimbleMatchers.swift in Sources */, 7DFBED4C1CDB8DE300EE435B /* RACMulticastConnectionSpec.m in Sources */, 7DFBED4E1CDB8DE300EE435B /* RACPropertySignalExamples.m in Sources */, 7DFBED4F1CDB8DE300EE435B /* RACSchedulerSpec.m in Sources */, 7DFBED501CDB8DE300EE435B /* RACSequenceAdditionsSpec.m in Sources */, 7DFBED521CDB8DE300EE435B /* RACSequenceExamples.m in Sources */, 7DFBED531CDB8DE300EE435B /* RACSequenceSpec.m in Sources */, 7DFBED541CDB8DE300EE435B /* RACSerialDisposableSpec.m in Sources */, 7DFBED551CDB8DE300EE435B /* RACSignalSpec.m in Sources */, 7DFBED571CDB8DE300EE435B /* RACStreamExamples.m in Sources */, 7DFBED591CDB8DE300EE435B /* RACSubclassObject.m in Sources */, 7DFBED5A1CDB8DE300EE435B /* RACSubjectSpec.m in Sources */, 7DFBED5C1CDB8DE300EE435B /* RACSubscriberExamples.m in Sources */, 7DFBED5D1CDB8DE300EE435B /* RACSubscriberSpec.m in Sources */, 7DFBED5E1CDB8DE300EE435B /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */, 7DFBED5F1CDB8DE300EE435B /* RACTargetQueueSchedulerSpec.m in Sources */, 7DFBED601CDB8DE300EE435B /* RACTupleSpec.m in Sources */, 7DFBED631CDB8DE300EE435B /* UIBarButtonItemRACSupportSpec.m in Sources */, 7DFBED641CDB8DE300EE435B /* UIButtonRACSupportSpec.m in Sources */, 7DFBED671CDB8DE300EE435B /* RACTestExampleScheduler.m in Sources */, 7DFBED691CDB8DE300EE435B /* RACTestObject.m in Sources */, 7DFBED6A1CDB8DE300EE435B /* RACTestSchedulerSpec.m in Sources */, 7DFBED6C1CDB8DE300EE435B /* RACTestUIButton.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; A9B3154F1B3940610001CB9C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( A9F793341B60D0140026BCBA /* Optional.swift in Sources */, A9B316341B394C7F0001CB9C /* RACCompoundDisposableProvider.d in Sources */, A9B316351B394C7F0001CB9C /* RACSignalProvider.d in Sources */, A9B315BC1B3940810001CB9C /* Disposable.swift in Sources */, A9B315BE1B3940810001CB9C /* Event.swift in Sources */, A9B315BF1B3940810001CB9C /* ObjectiveCBridging.swift in Sources */, A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */, A9B315C11B3940810001CB9C /* Action.swift in Sources */, A9B315C21B3940810001CB9C /* Property.swift in Sources */, A9B315C31B3940810001CB9C /* Signal.swift in Sources */, A9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */, A9B315C51B3940810001CB9C /* Atomic.swift in Sources */, A9B315C61B3940810001CB9C /* Bag.swift in Sources */, A9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */, A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */, A9B3155E1B3940750001CB9C /* EXTRuntimeExtensions.m in Sources */, A9B315601B3940750001CB9C /* NSArray+RACSequenceAdditions.m in Sources */, A9B315631B3940750001CB9C /* NSData+RACSupport.m in Sources */, A9B315641B3940750001CB9C /* NSDictionary+RACSequenceAdditions.m in Sources */, A9B315651B3940750001CB9C /* NSEnumerator+RACSequenceAdditions.m in Sources */, D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */, A9B315661B3940750001CB9C /* NSFileHandle+RACSupport.m in Sources */, A9B315671B3940750001CB9C /* NSIndexSet+RACSequenceAdditions.m in Sources */, A9B315681B3940750001CB9C /* NSInvocation+RACTypeParsing.m in Sources */, A9B315691B3940750001CB9C /* NSNotificationCenter+RACSupport.m in Sources */, A9B3156B1B3940750001CB9C /* NSObject+RACDeallocating.m in Sources */, A9B3156C1B3940750001CB9C /* NSObject+RACDescription.m in Sources */, A9B3156D1B3940750001CB9C /* NSObject+RACKVOWrapper.m in Sources */, A9B3156E1B3940750001CB9C /* NSObject+RACLifting.m in Sources */, A9B3156F1B3940750001CB9C /* NSObject+RACPropertySubscribing.m in Sources */, A9B315701B3940750001CB9C /* NSObject+RACSelectorSignal.m in Sources */, A9B315711B3940750001CB9C /* NSOrderedSet+RACSequenceAdditions.m in Sources */, A9B315721B3940750001CB9C /* NSSet+RACSequenceAdditions.m in Sources */, A9B315731B3940750001CB9C /* NSString+RACKeyPathUtilities.m in Sources */, A9B315741B3940750001CB9C /* NSString+RACSequenceAdditions.m in Sources */, A9B315751B3940750001CB9C /* NSString+RACSupport.m in Sources */, A9B315781B3940750001CB9C /* NSUserDefaults+RACSupport.m in Sources */, A9B315791B3940750001CB9C /* RACArraySequence.m in Sources */, A9B3157A1B3940750001CB9C /* RACBehaviorSubject.m in Sources */, A9B3157B1B3940750001CB9C /* RACBlockTrampoline.m in Sources */, A9B3157C1B3940750001CB9C /* RACChannel.m in Sources */, A9B3157D1B3940750001CB9C /* RACCommand.m in Sources */, A9B3157E1B3940750001CB9C /* RACCompoundDisposable.m in Sources */, A9B3157F1B3940750001CB9C /* RACDelegateProxy.m in Sources */, A9B315801B3940750001CB9C /* RACDisposable.m in Sources */, EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */, C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */, A9B315811B3940750001CB9C /* RACDynamicSequence.m in Sources */, A9B315821B3940750001CB9C /* RACDynamicSignal.m in Sources */, A9B315831B3940750001CB9C /* RACEagerSequence.m in Sources */, A9B315841B3940750001CB9C /* RACEmptySequence.m in Sources */, A9B315851B3940750001CB9C /* RACEmptySignal.m in Sources */, A9B315861B3940750001CB9C /* RACErrorSignal.m in Sources */, A9B315871B3940750001CB9C /* RACEvent.m in Sources */, A9B315881B3940750001CB9C /* RACGroupedSignal.m in Sources */, A9B315891B3940750001CB9C /* RACImmediateScheduler.m in Sources */, A9B3158A1B3940750001CB9C /* RACIndexSetSequence.m in Sources */, A9B3158B1B3940750001CB9C /* RACKVOChannel.m in Sources */, A9B3158C1B3940750001CB9C /* RACKVOProxy.m in Sources */, A9B3158D1B3940750001CB9C /* RACKVOTrampoline.m in Sources */, A9B3158E1B3940750001CB9C /* RACMulticastConnection.m in Sources */, C7142DBE1CDEA194009F402D /* CocoaAction.swift in Sources */, A9B315901B3940750001CB9C /* RACPassthroughSubscriber.m in Sources */, A9B315911B3940750001CB9C /* RACQueueScheduler.m in Sources */, A9B315921B3940750001CB9C /* RACReplaySubject.m in Sources */, A9B315931B3940750001CB9C /* RACReturnSignal.m in Sources */, A9B315941B3940750001CB9C /* RACScheduler.m in Sources */, A9B315951B3940750001CB9C /* RACScopedDisposable.m in Sources */, A9B315961B3940750001CB9C /* RACSequence.m in Sources */, A9B315971B3940750001CB9C /* RACSerialDisposable.m in Sources */, A9B315981B3940750001CB9C /* RACSignal.m in Sources */, A9B315991B3940750001CB9C /* RACSignal+Operations.m in Sources */, A9B3159A1B3940750001CB9C /* RACSignalSequence.m in Sources */, A9B3159B1B3940750001CB9C /* RACStream.m in Sources */, A9B3159C1B3940750001CB9C /* RACStringSequence.m in Sources */, CD0C45E01CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, A9B3159D1B3940750001CB9C /* RACSubject.m in Sources */, A9B3159E1B3940750001CB9C /* RACSubscriber.m in Sources */, A9B3159F1B3940750001CB9C /* RACSubscriptingAssignmentTrampoline.m in Sources */, A9B315A01B3940750001CB9C /* RACSubscriptionScheduler.m in Sources */, A9B315A11B3940750001CB9C /* RACTargetQueueScheduler.m in Sources */, A9B315A21B3940750001CB9C /* RACTestScheduler.m in Sources */, A9B315A31B3940750001CB9C /* RACTuple.m in Sources */, A9B315A41B3940750001CB9C /* RACTupleSequence.m in Sources */, A9B315A51B3940750001CB9C /* RACUnarySequence.m in Sources */, A9B315A61B3940750001CB9C /* RACUnit.m in Sources */, A9B315A71B3940750001CB9C /* RACValueTransformer.m in Sources */, A9B315BB1B3940750001CB9C /* RACDynamicPropertySuperclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D04725E519E49ED7006002AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D037654219EDA41200A782A9 /* NSText+RACSignalSupport.m in Sources */, D037659C19EDA41200A782A9 /* RACKVOChannel.m in Sources */, D03765C819EDA41200A782A9 /* RACScopedDisposable.m in Sources */, D03764FE19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */, D03764EA19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */, D00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */, D03765C019EDA41200A782A9 /* RACScheduler.m in Sources */, D43F27A21A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */, D037659819EDA41200A782A9 /* RACIndexSetSequence.m in Sources */, D03765D819EDA41200A782A9 /* RACSignal+Operations.m in Sources */, D871D69F1B3B29A40070F16C /* Optional.swift in Sources */, D08C54B61A69A3DB00AD8286 /* Event.swift in Sources */, D03764F219EDA41200A782A9 /* NSControl+RACTextSignalSupport.m in Sources */, D037650219EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */, D03765E219EDA41200A782A9 /* RACStream.m in Sources */, D037655619EDA41200A782A9 /* RACBehaviorSubject.m in Sources */, D037660219EDA41200A782A9 /* RACTestScheduler.m in Sources */, D03765B819EDA41200A782A9 /* RACReplaySubject.m in Sources */, D03765EC19EDA41200A782A9 /* RACSubject.m in Sources */, D03765D019EDA41200A782A9 /* RACSerialDisposable.m in Sources */, D0C312D319EF2A5800984962 /* Disposable.swift in Sources */, D037666F19EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */, D037653E19EDA41200A782A9 /* NSString+RACSupport.m in Sources */, D037653619EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */, D03764FA19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */, EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */, CD0C45DE1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, D037656819EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */, D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */, D037653A19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */, D03765E819EDA41200A782A9 /* RACStringSequence.m in Sources */, D03764EE19EDA41200A782A9 /* NSControl+RACCommandSupport.m in Sources */, D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */, D037660A19EDA41200A782A9 /* RACTupleSequence.m in Sources */, D03765D419EDA41200A782A9 /* RACSignal.m in Sources */, D037651A19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */, D03765A419EDA41200A782A9 /* RACMulticastConnection.m in Sources */, D037654E19EDA41200A782A9 /* RACArraySequence.m in Sources */, D037652219EDA41200A782A9 /* NSObject+RACLifting.m in Sources */, D037650619EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */, D037650E19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */, D03765FA19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */, D85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */, D0C312CF19EF2A5800984962 /* Bag.swift in Sources */, D037658019EDA41200A782A9 /* RACEmptySequence.m in Sources */, D037654A19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */, D037660E19EDA41200A782A9 /* RACUnarySequence.m in Sources */, D03765FE19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */, C7142DBC1CDEA167009F402D /* CocoaAction.swift in Sources */, D03765DE19EDA41200A782A9 /* RACSignalSequence.m in Sources */, D037656C19EDA41200A782A9 /* RACDelegateProxy.m in Sources */, D037657419EDA41200A782A9 /* RACDynamicSequence.m in Sources */, D037657019EDA41200A782A9 /* RACDisposable.m in Sources */, D03765DA19EDA41200A782A9 /* RACSignalProvider.d in Sources */, D037653219EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */, D037651219EDA41200A782A9 /* NSObject+RACAppKitBindings.m in Sources */, D037656619EDA41200A782A9 /* RACCompoundDisposable.m in Sources */, D037655A19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */, D0C312DF19EF2A5800984962 /* ObjectiveCBridging.swift in Sources */, D037659019EDA41200A782A9 /* RACGroupedSignal.m in Sources */, D037655E19EDA41200A782A9 /* RACChannel.m in Sources */, D037657C19EDA41200A782A9 /* RACEagerSequence.m in Sources */, D037657819EDA41200A782A9 /* RACDynamicSignal.m in Sources */, D037659419EDA41200A782A9 /* RACImmediateScheduler.m in Sources */, 7A7065811A3F88B8001E8354 /* RACKVOProxy.m in Sources */, D037651619EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */, D0C312E719EF2A5800984962 /* Scheduler.swift in Sources */, D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */, D037658419EDA41200A782A9 /* RACEmptySignal.m in Sources */, D037654619EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */, D03765F019EDA41200A782A9 /* RACSubscriber.m in Sources */, D03764F619EDA41200A782A9 /* NSData+RACSupport.m in Sources */, D037656219EDA41200A782A9 /* RACCommand.m in Sources */, D037658819EDA41200A782A9 /* RACErrorSignal.m in Sources */, D03765F619EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */, D08C54BA1A69C54300AD8286 /* Property.swift in Sources */, D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */, D037661219EDA41200A782A9 /* RACUnit.m in Sources */, D03765A019EDA41200A782A9 /* RACKVOTrampoline.m in Sources */, D037650A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */, D037660619EDA41200A782A9 /* RACTuple.m in Sources */, D037651E19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */, D037661619EDA41200A782A9 /* RACValueTransformer.m in Sources */, C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */, D03765CC19EDA41200A782A9 /* RACSequence.m in Sources */, D037652E19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */, D037652619EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */, D037658C19EDA41200A782A9 /* RACEvent.m in Sources */, D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */, D03765B219EDA41200A782A9 /* RACQueueScheduler.m in Sources */, D037652A19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */, D03765AE19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */, D03765BC19EDA41200A782A9 /* RACReturnSignal.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D04725F119E49ED7006002AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */, D03766C719EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */, D03766E319EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */, B696FB811A7640C00075236D /* TestError.swift in Sources */, D021671D1A6CD50500987861 /* ActionSpec.swift in Sources */, D03766F919EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */, D0C3131E19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */, D037670B19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */, D03766DD19EDA60000A782A9 /* RACCommandSpec.m in Sources */, D0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */, D037670919EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */, BFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */, D03766EB19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */, D03766E719EDA60000A782A9 /* RACEventSpec.m in Sources */, D03766F719EDA60000A782A9 /* RACSequenceSpec.m in Sources */, D8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */, D03766C919EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */, D03766C319EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */, C79B64741CD38B2B003F2376 /* TestLogger.swift in Sources */, D03766BD19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */, CA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */, D037670119EDA60000A782A9 /* RACSubclassObject.m in Sources */, D03766CD19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */, D037671519EDA60000A782A9 /* RACTupleSpec.m in Sources */, D03766C519EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */, D03766D119EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */, D03766F319EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */, D03766ED19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */, CDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */, D03766E919EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */, D03766FB19EDA60000A782A9 /* RACSignalSpec.m in Sources */, 7A7065841A3F8967001E8354 /* RACKVOProxySpec.m in Sources */, 579504331BB8A34200A5E482 /* BagSpec.swift in Sources */, D037670719EDA60000A782A9 /* RACSubscriberSpec.m in Sources */, CD8401831CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */, D03766EF19EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */, D037670519EDA60000A782A9 /* RACSubscriberExamples.m in Sources */, D0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */, D0C3132219EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */, 02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */, D0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */, D03766D719EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */, D0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */, D03766FF19EDA60000A782A9 /* RACStreamExamples.m in Sources */, D03766CB19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */, D03766E119EDA60000A782A9 /* RACControlCommandExamples.m in Sources */, D03766BF19EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */, D037670319EDA60000A782A9 /* RACSubjectSpec.m in Sources */, D03766F119EDA60000A782A9 /* RACSchedulerSpec.m in Sources */, D03766DF19EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */, D03766E519EDA60000A782A9 /* RACDisposableSpec.m in Sources */, D0C3132019EF2D9700984962 /* RACTestObject.m in Sources */, D03766D319EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */, D03766C119EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m in Sources */, D03766DB19EDA60000A782A9 /* RACChannelSpec.m in Sources */, D0A226111A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */, D03766D919EDA60000A782A9 /* RACChannelExamples.m in Sources */, D03766F519EDA60000A782A9 /* RACSequenceExamples.m in Sources */, D8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */, D03766B919EDA60000A782A9 /* NSControllerRACSupportSpec.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D047260719E49F82006002AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D037659D19EDA41200A782A9 /* RACKVOChannel.m in Sources */, D08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */, D037666319EDA41200A782A9 /* UITextView+RACSignalSupport.m in Sources */, D037662F19EDA41200A782A9 /* UIControl+RACSignalSupport.m in Sources */, D03765C919EDA41200A782A9 /* RACScopedDisposable.m in Sources */, D03764FF19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */, D037664719EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m in Sources */, D43F27A31A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */, D8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */, D03764EB19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */, D0C312D419EF2A5800984962 /* Disposable.swift in Sources */, D03765C119EDA41200A782A9 /* RACScheduler.m in Sources */, D037662B19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m in Sources */, D037659919EDA41200A782A9 /* RACIndexSetSequence.m in Sources */, D03765D919EDA41200A782A9 /* RACSignal+Operations.m in Sources */, D037661B19EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m in Sources */, D037650319EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */, D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */, D03765E319EDA41200A782A9 /* RACStream.m in Sources */, D037655719EDA41200A782A9 /* RACBehaviorSubject.m in Sources */, D037663B19EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m in Sources */, D037660319EDA41200A782A9 /* RACTestScheduler.m in Sources */, D03765B919EDA41200A782A9 /* RACReplaySubject.m in Sources */, D03765ED19EDA41200A782A9 /* RACSubject.m in Sources */, D037664F19EDA41200A782A9 /* UIStepper+RACSignalSupport.m in Sources */, D03765D119EDA41200A782A9 /* RACSerialDisposable.m in Sources */, EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */, D037663F19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m in Sources */, D037653F19EDA41200A782A9 /* NSString+RACSupport.m in Sources */, D037653719EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */, D03764FB19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */, D037656919EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */, D037653B19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */, D037661F19EDA41200A782A9 /* UIAlertView+RACSignalSupport.m in Sources */, D03765E919EDA41200A782A9 /* RACStringSequence.m in Sources */, D037660B19EDA41200A782A9 /* RACTupleSequence.m in Sources */, D03765D519EDA41200A782A9 /* RACSignal.m in Sources */, D037663319EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m in Sources */, CD0C45DF1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, D037664319EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m in Sources */, D037651B19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */, D03765A519EDA41200A782A9 /* RACMulticastConnection.m in Sources */, D85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */, D037654F19EDA41200A782A9 /* RACArraySequence.m in Sources */, D037652319EDA41200A782A9 /* NSObject+RACLifting.m in Sources */, C7142DBD1CDEA194009F402D /* CocoaAction.swift in Sources */, D037650719EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */, D037665F19EDA41200A782A9 /* UITextField+RACSignalSupport.m in Sources */, D037650F19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */, D03765FB19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */, D037658119EDA41200A782A9 /* RACEmptySequence.m in Sources */, D0C312E019EF2A5800984962 /* ObjectiveCBridging.swift in Sources */, D037654B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */, D037660F19EDA41200A782A9 /* RACUnarySequence.m in Sources */, D08C54BB1A69C54400AD8286 /* Property.swift in Sources */, D03765FF19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */, D03765DF19EDA41200A782A9 /* RACSignalSequence.m in Sources */, D037656D19EDA41200A782A9 /* RACDelegateProxy.m in Sources */, D03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */, D037657519EDA41200A782A9 /* RACDynamicSequence.m in Sources */, D037657119EDA41200A782A9 /* RACDisposable.m in Sources */, D000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */, D03765DB19EDA41200A782A9 /* RACSignalProvider.d in Sources */, D037653319EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */, D037665319EDA41200A782A9 /* UISwitch+RACSignalSupport.m in Sources */, D037664B19EDA41200A782A9 /* UISlider+RACSignalSupport.m in Sources */, D037656719EDA41200A782A9 /* RACCompoundDisposable.m in Sources */, D037655B19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */, D037659119EDA41200A782A9 /* RACGroupedSignal.m in Sources */, D037655F19EDA41200A782A9 /* RACChannel.m in Sources */, D037657D19EDA41200A782A9 /* RACEagerSequence.m in Sources */, D037657919EDA41200A782A9 /* RACDynamicSignal.m in Sources */, D037659519EDA41200A782A9 /* RACImmediateScheduler.m in Sources */, D037651719EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */, D037658519EDA41200A782A9 /* RACEmptySignal.m in Sources */, D037663719EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m in Sources */, D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */, D037654719EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */, D03765F119EDA41200A782A9 /* RACSubscriber.m in Sources */, D03764F719EDA41200A782A9 /* NSData+RACSupport.m in Sources */, C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */, D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */, D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */, D037656319EDA41200A782A9 /* RACCommand.m in Sources */, D037658919EDA41200A782A9 /* RACErrorSignal.m in Sources */, D03765F719EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */, D037661319EDA41200A782A9 /* RACUnit.m in Sources */, D037662319EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m in Sources */, D03765A119EDA41200A782A9 /* RACKVOTrampoline.m in Sources */, D037665B19EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */, D0C312D019EF2A5800984962 /* Bag.swift in Sources */, D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */, D037650B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */, D037660719EDA41200A782A9 /* RACTuple.m in Sources */, D037667019EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */, D037651F19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */, D037661719EDA41200A782A9 /* RACValueTransformer.m in Sources */, D03765CD19EDA41200A782A9 /* RACSequence.m in Sources */, 314304181ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m in Sources */, D037652F19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */, D037662719EDA41200A782A9 /* UIButton+RACCommandSupport.m in Sources */, D037652719EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */, 7A7065821A3F88B8001E8354 /* RACKVOProxy.m in Sources */, D037658D19EDA41200A782A9 /* RACEvent.m in Sources */, D03765B319EDA41200A782A9 /* RACQueueScheduler.m in Sources */, D037665719EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m in Sources */, D037652B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */, D03765AF19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */, D03765BD19EDA41200A782A9 /* RACReturnSignal.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D047261219E49F82006002AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */, D03766C819EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */, D037672419EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m in Sources */, D03766E419EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */, D0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */, D03766FA19EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */, D0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */, CDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */, D037670C19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */, D03766DE19EDA60000A782A9 /* RACCommandSpec.m in Sources */, D037670A19EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */, D03766EC19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */, D021671E1A6CD50500987861 /* ActionSpec.swift in Sources */, D03766E819EDA60000A782A9 /* RACEventSpec.m in Sources */, D03766F819EDA60000A782A9 /* RACSequenceSpec.m in Sources */, D0A226121A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */, D037671E19EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m in Sources */, D8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */, BFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */, D03766CA19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */, D0C3132319EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */, D03766C419EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */, D03766BE19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */, D037672019EDA60000A782A9 /* UIButtonRACSupportSpec.m in Sources */, D0C3132519EF2D9700984962 /* RACTestUIButton.m in Sources */, D037670219EDA60000A782A9 /* RACSubclassObject.m in Sources */, D03766CE19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */, D037671619EDA60000A782A9 /* RACTupleSpec.m in Sources */, 7A7065851A3F8967001E8354 /* RACKVOProxySpec.m in Sources */, D03766C619EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */, B696FB821A7640C00075236D /* TestError.swift in Sources */, D0C3131F19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */, D8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */, D03766D219EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */, D03766F419EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */, D0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */, C79B64751CD38B2B003F2376 /* TestLogger.swift in Sources */, D0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */, D03766EE19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */, D03766EA19EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */, CA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */, D0C3132119EF2D9700984962 /* RACTestObject.m in Sources */, D03766FC19EDA60000A782A9 /* RACSignalSpec.m in Sources */, D037670819EDA60000A782A9 /* RACSubscriberSpec.m in Sources */, D037671C19EDA60000A782A9 /* UIAlertViewRACSupportSpec.m in Sources */, D03766F019EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */, D037670619EDA60000A782A9 /* RACSubscriberExamples.m in Sources */, D03766D819EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */, D037670019EDA60000A782A9 /* RACStreamExamples.m in Sources */, D03766CC19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */, D03766E219EDA60000A782A9 /* RACControlCommandExamples.m in Sources */, D03766C019EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */, D037670419EDA60000A782A9 /* RACSubjectSpec.m in Sources */, D03766F219EDA60000A782A9 /* RACSchedulerSpec.m in Sources */, D03766E019EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */, D03766E619EDA60000A782A9 /* RACDisposableSpec.m in Sources */, D03766D419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */, D03766DC19EDA60000A782A9 /* RACChannelSpec.m in Sources */, 579504341BB8A34300A5E482 /* BagSpec.swift in Sources */, D037671A19EDA60000A782A9 /* UIActionSheetRACSupportSpec.m in Sources */, D03766DA19EDA60000A782A9 /* RACChannelExamples.m in Sources */, D03766F619EDA60000A782A9 /* RACSequenceExamples.m in Sources */, CD8401841CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */, 02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 7DFBED0A1CDB8C9500EE435B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 57A4D1AF1BA13D7A00F7D4B1 /* ReactiveCocoa-tvOS */; targetProxy = 7DFBED091CDB8C9500EE435B /* PBXContainerItemProxy */; }; D04725F819E49ED7006002AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */; targetProxy = D04725F719E49ED7006002AA /* PBXContainerItemProxy */; }; D047261919E49F82006002AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D047260B19E49F82006002AA /* ReactiveCocoa-iOS */; targetProxy = D047261819E49F82006002AA /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 57A4D23D1BA13D7A00F7D4B1 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Debug; }; 57A4D23E1BA13D7A00F7D4B1 /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Test; }; 57A4D23F1BA13D7A00F7D4B1 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Release; }; 57A4D2401BA13D7A00F7D4B1 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Profile; }; 7DFBED0B1CDB8C9500EE435B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Debug; }; 7DFBED0C1CDB8C9500EE435B /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Test; }; 7DFBED0D1CDB8C9500EE435B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Release; }; 7DFBED0E1CDB8C9500EE435B /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Profile; }; A9B315591B3940610001CB9C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Debug; }; A9B3155A1B3940610001CB9C /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Test; }; A9B3155B1B3940610001CB9C /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Release; }; A9B3155C1B3940610001CB9C /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DTRACE_PROBES_DISABLED=1", ); INFOPLIST_FILE = ReactiveCocoa/Info.plist; }; name = Profile; }; D04725FE19E49ED7006002AA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047262919E49FE8006002AA /* Debug.xcconfig */; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(PROJECT_NAME)"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; D04725FF19E49ED7006002AA /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047262B19E49FE8006002AA /* Release.xcconfig */; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = 0; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(PROJECT_NAME)"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; D047260119E49ED7006002AA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Debug; }; D047260219E49ED7006002AA /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Release; }; D047260419E49ED7006002AA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Debug; }; D047260519E49ED7006002AA /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Release; }; D047262019E49F82006002AA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Debug; }; D047262119E49F82006002AA /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Release; }; D047262319E49F82006002AA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Debug; }; D047262419E49F82006002AA /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Release; }; D047263D19E4A008006002AA /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047262A19E49FE8006002AA /* Profile.xcconfig */; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(PROJECT_NAME)"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Profile; }; D047263E19E4A008006002AA /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Profile; }; D047263F19E4A008006002AA /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Profile; }; D047264019E4A008006002AA /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Profile; }; D047264119E4A008006002AA /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Profile; }; D047264219E4A00B006002AA /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047262C19E49FE8006002AA /* Test.xcconfig */; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)-Tests"; PRODUCT_NAME = "$(PROJECT_NAME)"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Test; }; D047264319E4A00B006002AA /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Test; }; D047264419E4A00B006002AA /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Test; }; D047264519E4A00B006002AA /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; ENABLE_BITCODE = YES; INFOPLIST_FILE = ReactiveCocoa/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; USER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc; }; name = Test; }; D047264619E4A00B006002AA /* Test */ = { isa = XCBuildConfiguration; baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = ReactiveCocoaTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; name = Test; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 57A4D23C1BA13D7A00F7D4B1 /* Build configuration list for PBXNativeTarget "ReactiveCocoa-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 57A4D23D1BA13D7A00F7D4B1 /* Debug */, 57A4D23E1BA13D7A00F7D4B1 /* Test */, 57A4D23F1BA13D7A00F7D4B1 /* Release */, 57A4D2401BA13D7A00F7D4B1 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 7DFBED0F1CDB8C9500EE435B /* Build configuration list for PBXNativeTarget "ReactiveCocoa-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 7DFBED0B1CDB8C9500EE435B /* Debug */, 7DFBED0C1CDB8C9500EE435B /* Test */, 7DFBED0D1CDB8C9500EE435B /* Release */, 7DFBED0E1CDB8C9500EE435B /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; A9B3155D1B3940610001CB9C /* Build configuration list for PBXNativeTarget "ReactiveCocoa-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( A9B315591B3940610001CB9C /* Debug */, A9B3155A1B3940610001CB9C /* Test */, A9B3155B1B3940610001CB9C /* Release */, A9B3155C1B3940610001CB9C /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D04725E419E49ED7006002AA /* Build configuration list for PBXProject "ReactiveCocoa" */ = { isa = XCConfigurationList; buildConfigurations = ( D04725FE19E49ED7006002AA /* Debug */, D047264219E4A00B006002AA /* Test */, D04725FF19E49ED7006002AA /* Release */, D047263D19E4A008006002AA /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( D047260119E49ED7006002AA /* Debug */, D047264319E4A00B006002AA /* Test */, D047260219E49ED7006002AA /* Release */, D047263E19E4A008006002AA /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-MacTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D047260419E49ED7006002AA /* Debug */, D047264419E4A00B006002AA /* Test */, D047260519E49ED7006002AA /* Release */, D047263F19E4A008006002AA /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D047261F19E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D047262019E49F82006002AA /* Debug */, D047264519E4A00B006002AA /* Test */, D047262119E49F82006002AA /* Release */, D047264019E4A008006002AA /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D047262219E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D047262319E49F82006002AA /* Debug */, D047264619E4A00B006002AA /* Test */, D047262419E49F82006002AA /* Release */, D047264119E4A008006002AA /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = D04725E119E49ED7006002AA /* Project object */; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-watchOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSControllerRACSupportSpec.m ================================================ // // NSControllerRACSupportSpec.m // ReactiveCocoa // // Created by Uri Baghin on 26/10/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import #import "RACKVOChannel.h" @interface RACTestController : NSController @property (nonatomic, strong) id object; @end @implementation RACTestController @end QuickSpecBegin(NSControllerRACSupportSpec) qck_it(@"RACKVOChannel should support NSController", ^{ RACTestController *a = [[RACTestController alloc] init]; RACTestController *b = [[RACTestController alloc] init]; RACChannelTo(a, object) = RACChannelTo(b, object); expect(a.object).to(beNil()); expect(b.object).to(beNil()); a.object = a; expect(a.object).to(equal(a)); expect(b.object).to(equal(a)); b.object = b; expect(a.object).to(equal(b)); expect(b.object).to(equal(b)); a.object = nil; expect(a.object).to(beNil()); expect(b.object).to(beNil()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSEnumeratorRACSequenceAdditionsSpec.m ================================================ // // NSEnumeratorRACSequenceAdditionsSpec.m // ReactiveCocoa // // Created by Uri Baghin on 07/01/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACSequenceExamples.h" #import "NSEnumerator+RACSequenceAdditions.h" QuickSpecBegin(NSEnumeratorRACSequenceAdditionsSpec) qck_describe(@"-rac_sequence", ^{ NSArray *values = @[ @0, @1, @2, @3, @4 ]; qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: values.objectEnumerator.rac_sequence, RACSequenceExampleExpectedValues: values }; }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSNotificationCenterRACSupportSpec.m ================================================ // // NSNotificationCenterRACSupportSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-12-07. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "NSNotificationCenter+RACSupport.h" #import "RACSignal.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "NSObject+RACDeallocating.h" static NSString * const TestNotification = @"TestNotification"; QuickSpecBegin(NSNotificationCenterRACSupportSpec) __block NSNotificationCenter *notificationCenter; qck_beforeEach(^{ // The compiler gets confused and thinks you might be messaging // NSDistributedNotificationCenter otherwise. Wtf? notificationCenter = NSNotificationCenter.defaultCenter; }); qck_it(@"should send the notification when posted by any object", ^{ RACSignal *signal = [notificationCenter rac_addObserverForName:TestNotification object:nil]; __block NSUInteger count = 0; [signal subscribeNext:^(NSNotification *notification) { ++count; expect(notification).to(beAKindOf(NSNotification.class)); expect(notification.name).to(equal(TestNotification)); }]; expect(@(count)).to(equal(@0)); [notificationCenter postNotificationName:TestNotification object:nil]; expect(@(count)).to(equal(@1)); [notificationCenter postNotificationName:TestNotification object:self]; expect(@(count)).to(equal(@2)); }); qck_it(@"should send the notification when posted by a specific object", ^{ RACSignal *signal = [notificationCenter rac_addObserverForName:TestNotification object:self]; __block NSUInteger count = 0; [signal subscribeNext:^(NSNotification *notification) { ++count; expect(notification).to(beAKindOf(NSNotification.class)); expect(notification.name).to(equal(TestNotification)); expect(notification.object).to(beIdenticalTo(self)); }]; expect(@(count)).to(equal(@0)); [notificationCenter postNotificationName:TestNotification object:nil]; expect(@(count)).to(equal(@0)); [notificationCenter postNotificationName:TestNotification object:self]; expect(@(count)).to(equal(@1)); }); qck_it(@"shouldn't strongly capture the notification object", ^{ RACSignal *signal __attribute__((objc_precise_lifetime, unused)); __block BOOL dealloced = NO; @autoreleasepool { NSObject *notificationObject = [[NSObject alloc] init]; [notificationObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ dealloced = YES; }]]; signal = [notificationCenter rac_addObserverForName:TestNotification object:notificationObject]; } expect(@(dealloced)).to(beTruthy()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACAppKitBindingsSpec.m ================================================ // // NSObjectRACAppKitBindingsSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACChannelExamples.h" #import #import "NSObject+RACAppKitBindings.h" QuickSpecBegin(NSObjectRACAppKitBindingsSpec) qck_itBehavesLike(RACViewChannelExamples, ^{ return @{ RACViewChannelExampleCreateViewBlock: ^{ return [[NSSlider alloc] initWithFrame:NSZeroRect]; }, RACViewChannelExampleCreateTerminalBlock: ^(NSSlider *view) { return [view rac_channelToBinding:NSValueBinding]; }, RACViewChannelExampleKeyPath: @keypath(NSSlider.new, objectValue), RACViewChannelExampleSetViewValueBlock: ^(NSSlider *view, NSNumber *value) { view.objectValue = value; // Bindings don't actually trigger from programmatic modification. Do it // manually. NSDictionary *bindingInfo = [view infoForBinding:NSValueBinding]; [bindingInfo[NSObservedObjectKey] setValue:value forKeyPath:bindingInfo[NSObservedKeyPathKey]]; } }; }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACDeallocatingSpec.m ================================================ // // NSObject+RACDeallocating.m // ReactiveCocoa // // Created by Kazuo Koga on 2013/03/15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" #import "NSObject+RACDeallocating.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" #import @interface RACDeallocSwizzlingTestClass : NSObject @end @implementation RACDeallocSwizzlingTestClass - (void)dealloc { // Provide an empty implementation just so we can swizzle it. } @end @interface RACDeallocSwizzlingTestSubclass : RACDeallocSwizzlingTestClass @end @implementation RACDeallocSwizzlingTestSubclass @end QuickSpecBegin(NSObjectRACDeallocatingSpec) qck_describe(@"-dealloc swizzling", ^{ SEL selector = NSSelectorFromString(@"dealloc"); qck_it(@"should not invoke superclass -dealloc method twice", ^{ __block NSUInteger superclassDeallocatedCount = 0; __block BOOL subclassDeallocated = NO; @autoreleasepool { RACDeallocSwizzlingTestSubclass *object __attribute__((objc_precise_lifetime)) = [[RACDeallocSwizzlingTestSubclass alloc] init]; Method oldDeallocMethod = class_getInstanceMethod(RACDeallocSwizzlingTestClass.class, selector); void (*oldDealloc)(id, SEL) = (__typeof__(oldDealloc))method_getImplementation(oldDeallocMethod); id newDealloc = ^(__unsafe_unretained id self) { superclassDeallocatedCount++; oldDealloc(self, selector); }; class_replaceMethod(RACDeallocSwizzlingTestClass.class, selector, imp_implementationWithBlock(newDealloc), method_getTypeEncoding(oldDeallocMethod)); [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ subclassDeallocated = YES; }]]; expect(@(subclassDeallocated)).to(beFalsy()); expect(@(superclassDeallocatedCount)).to(equal(@0)); } expect(@(subclassDeallocated)).to(beTruthy()); expect(@(superclassDeallocatedCount)).to(equal(@1)); }); qck_it(@"should invoke superclass -dealloc method swizzled in after the subclass", ^{ __block BOOL superclassDeallocated = NO; __block BOOL subclassDeallocated = NO; @autoreleasepool { RACDeallocSwizzlingTestSubclass *object __attribute__((objc_precise_lifetime)) = [[RACDeallocSwizzlingTestSubclass alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ subclassDeallocated = YES; }]]; Method oldDeallocMethod = class_getInstanceMethod(RACDeallocSwizzlingTestClass.class, selector); void (*oldDealloc)(id, SEL) = (__typeof__(oldDealloc))method_getImplementation(oldDeallocMethod); id newDealloc = ^(__unsafe_unretained id self) { superclassDeallocated = YES; oldDealloc(self, selector); }; class_replaceMethod(RACDeallocSwizzlingTestClass.class, selector, imp_implementationWithBlock(newDealloc), method_getTypeEncoding(oldDeallocMethod)); expect(@(subclassDeallocated)).to(beFalsy()); expect(@(superclassDeallocated)).to(beFalsy()); } expect(@(subclassDeallocated)).to(beTruthy()); expect(@(superclassDeallocated)).to(beTruthy()); }); }); qck_describe(@"-rac_deallocDisposable", ^{ qck_it(@"should dispose of the disposable when it is dealloc'd", ^{ __block BOOL wasDisposed = NO; @autoreleasepool { NSObject *object __attribute__((objc_precise_lifetime)) = [[NSObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ wasDisposed = YES; }]]; expect(@(wasDisposed)).to(beFalsy()); } expect(@(wasDisposed)).to(beTruthy()); }); qck_it(@"should be able to use the object during disposal", ^{ @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; @autoreleasepool { object.objectValue = [@"foo" mutableCopy]; } __unsafe_unretained RACTestObject *weakObject = object; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ expect(weakObject.objectValue).to(equal(@"foo")); }]]; } }); }); qck_describe(@"-rac_willDeallocSignal", ^{ qck_it(@"should complete on dealloc", ^{ __block BOOL completed = NO; @autoreleasepool { [[[[RACTestObject alloc] init] rac_willDeallocSignal] subscribeCompleted:^{ completed = YES; }]; } expect(@(completed)).to(beTruthy()); }); qck_it(@"should not send anything", ^{ __block BOOL valueReceived = NO; __block BOOL completed = NO; @autoreleasepool { [[[[RACTestObject alloc] init] rac_willDeallocSignal] subscribeNext:^(id x) { valueReceived = YES; } completed:^{ completed = YES; }]; } expect(@(valueReceived)).to(beFalsy()); expect(@(completed)).to(beTruthy()); }); qck_it(@"should complete upon subscription if already deallocated", ^{ __block BOOL deallocated = NO; RACSignal *signal; @autoreleasepool { RACTestObject *object = [[RACTestObject alloc] init]; signal = [object rac_willDeallocSignal]; [signal subscribeCompleted:^{ deallocated = YES; }]; } expect(@(deallocated)).to(beTruthy()); expect(@([signal waitUntilCompleted:NULL])).to(beTruthy()); }); qck_it(@"should complete before the object is invalid", ^{ __block NSString *objectValue; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; @autoreleasepool { object.objectValue = [@"foo" mutableCopy]; } __unsafe_unretained RACTestObject *weakObject = object; [[object rac_willDeallocSignal] subscribeCompleted:^{ objectValue = [weakObject.objectValue copy]; }]; } expect(objectValue).to(equal(@"foo")); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACLiftingSpec.m ================================================ // // NSObjectRACLifting.m // ReactiveCocoa // // Created by Josh Abernathy on 10/2/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" #import "NSObject+RACLifting.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSubject.h" #import "RACTuple.h" #import "RACUnit.h" QuickSpecBegin(NSObjectRACLiftingSpec) qck_describe(@"-rac_liftSelector:withSignals:", ^{ __block RACTestObject *object; qck_beforeEach(^{ object = [[RACTestObject alloc] init]; }); qck_it(@"should call the selector with the value of the signal", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:) withSignals:subject, nil]; expect(object.objectValue).to(beNil()); [subject sendNext:@1]; expect(object.objectValue).to(equal(@1)); [subject sendNext:@42]; expect(object.objectValue).to(equal(@42)); }); }); qck_describe(@"-rac_liftSelector:withSignalsFromArray:", ^{ __block RACTestObject *object; qck_beforeEach(^{ object = [[RACTestObject alloc] init]; }); qck_it(@"should call the selector with the value of the signal", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]]; expect(object.objectValue).to(beNil()); [subject sendNext:@1]; expect(object.objectValue).to(equal(@1)); [subject sendNext:@42]; expect(object.objectValue).to(equal(@42)); }); qck_it(@"should call the selector with the value of the signal unboxed", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setIntegerValue:) withSignalsFromArray:@[ subject ]]; expect(@(object.integerValue)).to(equal(@0)); [subject sendNext:@1]; expect(@(object.integerValue)).to(equal(@1)); [subject sendNext:@42]; expect(@(object.integerValue)).to(equal(@42)); }); qck_it(@"should work with multiple arguments", ^{ RACSubject *objectValueSubject = [RACSubject subject]; RACSubject *integerValueSubject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:andIntegerValue:) withSignalsFromArray:@[ objectValueSubject, integerValueSubject ]]; expect(@(object.hasInvokedSetObjectValueAndIntegerValue)).to(beFalsy()); expect(object.objectValue).to(beNil()); expect(@(object.integerValue)).to(equal(@0)); [objectValueSubject sendNext:@1]; expect(@(object.hasInvokedSetObjectValueAndIntegerValue)).to(beFalsy()); expect(object.objectValue).to(beNil()); expect(@(object.integerValue)).to(equal(@0)); [integerValueSubject sendNext:@42]; expect(@(object.hasInvokedSetObjectValueAndIntegerValue)).to(beTruthy()); expect(object.objectValue).to(equal(@1)); expect(@(object.integerValue)).to(equal(@42)); }); qck_it(@"should work with signals that immediately start with a value", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ [subject startWith:@42] ]]; expect(object.objectValue).to(equal(@42)); [subject sendNext:@1]; expect(object.objectValue).to(equal(@1)); }); qck_it(@"should work with signals that send nil", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]]; [subject sendNext:nil]; expect(object.objectValue).to(beNil()); [subject sendNext:RACTupleNil.tupleNil]; expect(object.objectValue).to(beNil()); }); qck_it(@"should work with integers", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setIntegerValue:) withSignalsFromArray:@[ subject ]]; expect(@(object.integerValue)).to(equal(@0)); [subject sendNext:@1]; expect(@(object.integerValue)).to(equal(@1)); }); qck_it(@"should convert between numeric types", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setIntegerValue:) withSignalsFromArray:@[ subject ]]; expect(@(object.integerValue)).to(equal(@0)); [subject sendNext:@1.0]; expect(@(object.integerValue)).to(equal(@1)); }); qck_it(@"should work with class objects", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]]; expect(object.objectValue).to(beNil()); [subject sendNext:self.class]; expect(object.objectValue).to(equal(self.class)); }); qck_it(@"should work for char pointer", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setCharPointerValue:) withSignalsFromArray:@[ subject ]]; expect(@((size_t)object.charPointerValue)).to(equal(@0)); NSString *string = @"blah blah blah"; [subject sendNext:string]; expect(@(object.charPointerValue)).to(equal(string)); }); qck_it(@"should work for const char pointer", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setConstCharPointerValue:) withSignalsFromArray:@[ subject ]]; expect(@((size_t)object.constCharPointerValue)).to(equal(@0)); NSString *string = @"blah blah blah"; [subject sendNext:string]; expect(@(object.constCharPointerValue)).to(equal(string)); }); qck_it(@"should work for CGRect", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setRectValue:) withSignalsFromArray:@[ subject ]]; expect(@(CGRectEqualToRect(object.rectValue, CGRectZero))).to(beTruthy()); CGRect value = CGRectMake(10, 20, 30, 40); [subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(CGRect)]]; expect(@(CGRectEqualToRect(object.rectValue, value))).to(beTruthy()); }); qck_it(@"should work for CGSize", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setSizeValue:) withSignalsFromArray:@[ subject ]]; expect(@(CGSizeEqualToSize(object.sizeValue, CGSizeZero))).to(beTruthy()); CGSize value = CGSizeMake(10, 20); [subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(CGSize)]]; expect(@(CGSizeEqualToSize(object.sizeValue, value))).to(beTruthy()); }); qck_it(@"should work for CGPoint", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setPointValue:) withSignalsFromArray:@[ subject ]]; expect(@(CGPointEqualToPoint(object.pointValue, CGPointZero))).to(beTruthy()); CGPoint value = CGPointMake(10, 20); [subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(CGPoint)]]; expect(@(CGPointEqualToPoint(object.pointValue, value))).to(beTruthy()); }); qck_it(@"should work for NSRange", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setRangeValue:) withSignalsFromArray:@[ subject ]]; expect(@(NSEqualRanges(object.rangeValue, NSMakeRange(0, 0)))).to(beTruthy()); NSRange value = NSMakeRange(10, 20); [subject sendNext:[NSValue valueWithRange:value]]; expect(@(NSEqualRanges(object.rangeValue, value))).to(beTruthy()); }); qck_it(@"should work for _Bool", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setC99BoolValue:) withSignalsFromArray:@[ subject ]]; expect(@(object.c99BoolValue)).to(beFalsy()); _Bool value = true; [subject sendNext:@(value)]; expect(@(object.c99BoolValue)).to(beTruthy()); }); qck_it(@"should work for primitive pointers", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(write5ToIntPointer:) withSignalsFromArray:@[ subject ]]; int value = 0; int *valuePointer = &value; expect(@(value)).to(equal(@0)); [subject sendNext:[NSValue valueWithPointer:valuePointer]]; expect(@(value)).to(equal(@5)); }); qck_it(@"should work for custom structs", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setStructValue:) withSignalsFromArray:@[ subject ]]; expect(@(object.structValue.integerField)).to(equal(@0)); expect(@(object.structValue.doubleField)).to(equal(@0.0)); RACTestStruct value = (RACTestStruct){7, 1.23}; [subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(typeof(value))]]; expect(@(object.structValue.integerField)).to(equal(@(value.integerField))); expect(@(object.structValue.doubleField)).to(equal(@(value.doubleField))); }); qck_it(@"should send the latest value of the signal as the right argument", ^{ RACSubject *subject = [RACSubject subject]; [object rac_liftSelector:@selector(setObjectValue:andIntegerValue:) withSignalsFromArray:@[ [RACSignal return:@"object"], subject ]]; [subject sendNext:@1]; expect(object.objectValue).to(equal(@"object")); expect(@(object.integerValue)).to(equal(@1)); }); qck_describe(@"the returned signal", ^{ qck_it(@"should send the return value of the method invocation", ^{ RACSubject *objectSubject = [RACSubject subject]; RACSubject *integerSubject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(combineObjectValue:andIntegerValue:) withSignalsFromArray:@[ objectSubject, integerSubject ]]; __block NSString *result; [signal subscribeNext:^(id x) { result = x; }]; [objectSubject sendNext:@"Magic number"]; expect(result).to(beNil()); [integerSubject sendNext:@42]; expect(result).to(equal(@"Magic number: 42")); }); qck_it(@"should send RACUnit.defaultUnit for void-returning methods", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]]; __block id result; [signal subscribeNext:^(id x) { result = x; }]; [subject sendNext:@1]; expect(result).to(equal(RACUnit.defaultUnit)); }); qck_it(@"should support integer returning methods", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(doubleInteger:) withSignalsFromArray:@[ subject ]]; __block id result; [signal subscribeNext:^(id x) { result = x; }]; [subject sendNext:@1]; expect(result).to(equal(@2)); }); qck_it(@"should support char * returning methods", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(doubleString:) withSignalsFromArray:@[ subject ]]; __block id result; [signal subscribeNext:^(id x) { result = x; }]; [subject sendNext:@"test"]; expect(result).to(equal(@"testtest")); }); qck_it(@"should support const char * returning methods", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(doubleConstString:) withSignalsFromArray:@[ subject ]]; __block id result; [signal subscribeNext:^(id x) { result = x; }]; [subject sendNext:@"test"]; expect(result).to(equal(@"testtest")); }); qck_it(@"should support struct returning methods", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(doubleStruct:) withSignalsFromArray:@[ subject ]]; __block NSValue *boxedResult; [signal subscribeNext:^(id x) { boxedResult = x; }]; RACTestStruct value = {4, 12.3}; NSValue *boxedValue = [NSValue valueWithBytes:&value objCType:@encode(typeof(value))]; [subject sendNext:boxedValue]; RACTestStruct result = {0, 0.0}; [boxedResult getValue:&result]; expect(@(result.integerField)).to(equal(@8)); expect(@(result.doubleField)).to(equal(@24.6)); }); qck_it(@"should support block arguments and returns", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(wrapBlock:) withSignalsFromArray:@[ subject ]]; __block BOOL blockInvoked = NO; dispatch_block_t testBlock = ^{ blockInvoked = YES; }; __block dispatch_block_t result; [signal subscribeNext:^(id x) { result = x; }]; [subject sendNext:testBlock]; expect(result).notTo(beNil()); result(); expect(@(blockInvoked)).to(beTruthy()); }); qck_it(@"should replay the last value", ^{ RACSubject *objectSubject = [RACSubject subject]; RACSubject *integerSubject = [RACSubject subject]; RACSignal *signal = [object rac_liftSelector:@selector(combineObjectValue:andIntegerValue:) withSignalsFromArray:@[ objectSubject, integerSubject ]]; [objectSubject sendNext:@"Magic number"]; [integerSubject sendNext:@42]; [integerSubject sendNext:@43]; __block NSString *result; [signal subscribeNext:^(id x) { result = x; }]; expect(result).to(equal(@"Magic number: 43")); }); }); qck_it(@"shouldn't strongly capture the receiver", ^{ __block BOOL dealloced = NO; @autoreleasepool { RACTestObject *testObject __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [testObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ dealloced = YES; }]]; RACSubject *subject = [RACSubject subject]; [testObject rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]]; [subject sendNext:@1]; } expect(@(dealloced)).to(beTruthy()); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACPropertySubscribingExamples.h ================================================ // // NSObjectRACPropertySubscribingExamples.h // ReactiveCocoa // // Created by Josh Vera on 4/10/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // // The name of the shared examples for a signal-driven observation. extern NSString * const RACPropertySubscribingExamples; // The block should have the signature: // RACSignal * (^)(RACTestObject *testObject, NSString *keyPath, id observer) // and should observe the value of the key path on testObject with observer. The value // for this key should not be nil. extern NSString * const RACPropertySubscribingExamplesSetupBlock; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACPropertySubscribingExamples.m ================================================ // // NSObjectRACPropertySubscribingExamples.m // ReactiveCocoa // // Created by Josh Vera on 4/10/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" #import "NSObjectRACPropertySubscribingExamples.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal.h" NSString * const RACPropertySubscribingExamples = @"RACPropertySubscribingExamples"; NSString * const RACPropertySubscribingExamplesSetupBlock = @"RACPropertySubscribingExamplesSetupBlock"; QuickConfigurationBegin(NSObjectRACPropertySubscribingExamples) + (void)configure:(Configuration *)configuration { sharedExamples(RACPropertySubscribingExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block RACSignal *(^signalBlock)(RACTestObject *object, NSString *keyPath, id observer); qck_beforeEach(^{ signalBlock = exampleContext()[RACPropertySubscribingExamplesSetupBlock]; }); qck_it(@"should send the current value once on subscription", ^{ RACTestObject *object = [[RACTestObject alloc] init]; RACSignal *signal = signalBlock(object, @keypath(object, objectValue), self); NSMutableArray *values = [NSMutableArray array]; object.objectValue = @0; [signal subscribeNext:^(id x) { [values addObject:x]; }]; expect(values).to(equal((@[ @0 ]))); }); qck_it(@"should send the new value when it changes", ^{ RACTestObject *object = [[RACTestObject alloc] init]; RACSignal *signal = signalBlock(object, @keypath(object, objectValue), self); NSMutableArray *values = [NSMutableArray array]; object.objectValue = @0; [signal subscribeNext:^(id x) { [values addObject:x]; }]; expect(values).to(equal((@[ @0 ]))); object.objectValue = @1; expect(values).to(equal((@[ @0, @1 ]))); }); qck_it(@"should stop observing when disposed", ^{ RACTestObject *object = [[RACTestObject alloc] init]; RACSignal *signal = signalBlock(object, @keypath(object, objectValue), self); NSMutableArray *values = [NSMutableArray array]; object.objectValue = @0; RACDisposable *disposable = [signal subscribeNext:^(id x) { [values addObject:x]; }]; object.objectValue = @1; NSArray *expected = @[ @0, @1 ]; expect(values).to(equal(expected)); [disposable dispose]; object.objectValue = @2; expect(values).to(equal(expected)); }); qck_it(@"shouldn't send any more values after the observer is gone", ^{ __block BOOL observerDealloced = NO; RACTestObject *object = [[RACTestObject alloc] init]; NSMutableArray *values = [NSMutableArray array]; @autoreleasepool { RACTestObject *observer __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [observer.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ observerDealloced = YES; }]]; RACSignal *signal = signalBlock(object, @keypath(object, objectValue), observer); object.objectValue = @1; [signal subscribeNext:^(id x) { [values addObject:x]; }]; } expect(@(observerDealloced)).to(beTruthy()); NSArray *expected = @[ @1 ]; expect(values).to(equal(expected)); object.objectValue = @2; expect(values).to(equal(expected)); }); qck_it(@"shouldn't keep either object alive unnaturally long", ^{ __block BOOL objectDealloced = NO; __block BOOL scopeObjectDealloced = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ objectDealloced = YES; }]]; RACTestObject *scopeObject __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [scopeObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ scopeObjectDealloced = YES; }]]; RACSignal *signal = signalBlock(object, @keypath(object, objectValue), scopeObject); [signal subscribeNext:^(id _) { }]; } expect(@(objectDealloced)).to(beTruthy()); expect(@(scopeObjectDealloced)).to(beTruthy()); }); qck_it(@"shouldn't keep the signal alive past the lifetime of the object", ^{ __block BOOL objectDealloced = NO; __block BOOL signalDealloced = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ objectDealloced = YES; }]]; RACSignal *signal = [signalBlock(object, @keypath(object, objectValue), self) map:^(id value) { return value; }]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ signalDealloced = YES; }]]; [signal subscribeNext:^(id _) { }]; } expect(@(signalDealloced)).toEventually(beTruthy()); expect(@(objectDealloced)).to(beTruthy()); }); qck_it(@"shouldn't crash when the value is changed on a different queue", ^{ __block id value; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; RACSignal *signal = signalBlock(object, @keypath(object, objectValue), self); [signal subscribeNext:^(id x) { value = x; }]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperationWithBlock:^{ object.objectValue = @1; }]; [queue waitUntilAllOperationsAreFinished]; } expect(value).toEventually(equal(@1)); }); qck_describe(@"mutating collections", ^{ __block RACTestObject *object; __block NSMutableOrderedSet *lastValue; __block NSMutableOrderedSet *proxySet; qck_beforeEach(^{ object = [[RACTestObject alloc] init]; object.objectValue = [NSMutableOrderedSet orderedSetWithObject:@1]; NSString *keyPath = @keypath(object, objectValue); [signalBlock(object, keyPath, self) subscribeNext:^(NSMutableOrderedSet *x) { lastValue = x; }]; proxySet = [object mutableOrderedSetValueForKey:keyPath]; }); qck_it(@"sends the newest object when inserting values into an observed object", ^{ NSMutableOrderedSet *expected = [NSMutableOrderedSet orderedSetWithObjects: @1, @2, nil]; [proxySet addObject:@2]; expect(lastValue).to(equal(expected)); }); qck_it(@"sends the newest object when removing values in an observed object", ^{ NSMutableOrderedSet *expected = [NSMutableOrderedSet orderedSet]; [proxySet removeAllObjects]; expect(lastValue).to(equal(expected)); }); qck_it(@"sends the newest object when replacing values in an observed object", ^{ NSMutableOrderedSet *expected = [NSMutableOrderedSet orderedSetWithObjects: @2, nil]; [proxySet replaceObjectAtIndex:0 withObject:@2]; expect(lastValue).to(equal(expected)); }); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACPropertySubscribingSpec.m ================================================ // // NSObjectRACPropertySubscribingSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 9/28/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "NSObjectRACPropertySubscribingExamples.h" #import "RACTestObject.h" #import "NSObject+RACPropertySubscribing.h" #import "RACDisposable.h" #import "RACSignal.h" QuickSpecBegin(NSObjectRACPropertySubscribingSpec) qck_describe(@"-rac_valuesForKeyPath:observer:", ^{ id (^setupBlock)(id, id, id) = ^(RACTestObject *object, NSString *keyPath, id observer) { return [object rac_valuesForKeyPath:keyPath observer:observer]; }; qck_itBehavesLike(RACPropertySubscribingExamples, ^{ return @{ RACPropertySubscribingExamplesSetupBlock: setupBlock }; }); }); qck_describe(@"+rac_signalWithChangesFor:keyPath:options:observer:", ^{ qck_describe(@"KVO options argument", ^{ __block RACTestObject *object; __block id actual; __block RACSignal *(^objectValueSignal)(NSKeyValueObservingOptions); qck_beforeEach(^{ object = [[RACTestObject alloc] init]; objectValueSignal = ^(NSKeyValueObservingOptions options) { return [[object rac_valuesAndChangesForKeyPath:@keypath(object, objectValue) options:options observer:self] reduceEach:^(id value, NSDictionary *change) { return change; }]; }; }); qck_it(@"sends a KVO dictionary", ^{ [objectValueSignal(0) subscribeNext:^(NSDictionary *x) { actual = x; }]; object.objectValue = @1; expect(actual).to(beAKindOf(NSDictionary.class)); }); qck_it(@"sends a kind key by default", ^{ [objectValueSignal(0) subscribeNext:^(NSDictionary *x) { actual = x[NSKeyValueChangeKindKey]; }]; object.objectValue = @1; expect(actual).notTo(beNil()); }); qck_it(@"sends the newest changes with NSKeyValueObservingOptionNew", ^{ [objectValueSignal(NSKeyValueObservingOptionNew) subscribeNext:^(NSDictionary *x) { actual = x[NSKeyValueChangeNewKey]; }]; object.objectValue = @1; expect(actual).to(equal(@1)); object.objectValue = @2; expect(actual).to(equal(@2)); }); qck_it(@"sends an additional change value with NSKeyValueObservingOptionPrior", ^{ NSMutableArray *values = [NSMutableArray new]; NSArray *expected = @[ @(YES), @(NO) ]; [objectValueSignal(NSKeyValueObservingOptionPrior) subscribeNext:^(NSDictionary *x) { BOOL isPrior = [x[NSKeyValueChangeNotificationIsPriorKey] boolValue]; [values addObject:@(isPrior)]; }]; object.objectValue = @[ @1 ]; expect(values).to(equal(expected)); }); qck_it(@"sends index changes when adding, inserting or removing a value from an observed object", ^{ __block NSUInteger hasIndexesCount = 0; [objectValueSignal(0) subscribeNext:^(NSDictionary *x) { if (x[NSKeyValueChangeIndexesKey] != nil) { hasIndexesCount += 1; } }]; object.objectValue = [NSMutableOrderedSet orderedSet]; expect(@(hasIndexesCount)).to(equal(@0)); NSMutableOrderedSet *objectValue = [object mutableOrderedSetValueForKey:@"objectValue"]; [objectValue addObject:@1]; expect(@(hasIndexesCount)).to(equal(@1)); [objectValue replaceObjectAtIndex:0 withObject:@2]; expect(@(hasIndexesCount)).to(equal(@2)); [objectValue removeObject:@2]; expect(@(hasIndexesCount)).to(equal(@3)); }); qck_it(@"sends the previous value with NSKeyValueObservingOptionOld", ^{ [objectValueSignal(NSKeyValueObservingOptionOld) subscribeNext:^(NSDictionary *x) { actual = x[NSKeyValueChangeOldKey]; }]; object.objectValue = @1; expect(actual).to(equal(NSNull.null)); object.objectValue = @2; expect(actual).to(equal(@1)); }); qck_it(@"sends the initial value with NSKeyValueObservingOptionInitial", ^{ [objectValueSignal(NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew) subscribeNext:^(NSDictionary *x) { actual = x[NSKeyValueChangeNewKey]; }]; expect(actual).to(equal(NSNull.null)); }); }); }); qck_describe(@"-rac_valuesAndChangesForKeyPath:options:observer:", ^{ qck_it(@"should complete immediately if the receiver or observer have deallocated", ^{ RACSignal *signal; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; RACTestObject *observer __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; signal = [object rac_valuesAndChangesForKeyPath:@keypath(object, stringValue) options:0 observer:observer]; } __block BOOL completed = NO; [signal subscribeCompleted:^{ completed = YES; }]; expect(@(completed)).to(beTruthy()); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACSelectorSignalSpec.m ================================================ // // NSObjectRACSelectorSignalSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 3/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" #import "RACSubclassObject.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "NSObject+RACSelectorSignal.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACMulticastConnection.h" #import "RACSignal+Operations.h" #import "RACSignal.h" #import "RACTuple.h" @protocol TestProtocol @required - (BOOL)requiredMethod:(NSUInteger)number; - (void)lifeIsGood:(id)sender; @optional - (NSUInteger)optionalMethodWithObject:(id)object flag:(BOOL)flag; - (id)objectValue; @end QuickSpecBegin(NSObjectRACSelectorSignalSpec) qck_describe(@"RACTestObject", ^{ qck_it(@"should send the argument for each invocation", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id value; [[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) { value = x.first; }]; [object lifeIsGood:@42]; expect(value).to(equal(@42)); }); qck_it(@"should send completed on deallocation", ^{ __block BOOL completed = NO; __block BOOL deallocated = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; [[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeCompleted:^{ completed = YES; }]; expect(@(deallocated)).to(beFalsy()); expect(@(completed)).to(beFalsy()); } expect(@(deallocated)).to(beTruthy()); expect(@(completed)).to(beTruthy()); }); qck_it(@"should send for a zero-argument method", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block RACTuple *value; [[object rac_signalForSelector:@selector(objectValue)] subscribeNext:^(RACTuple *x) { value = x; }]; (void)[object objectValue]; expect(value).to(equal([RACTuple tupleWithObjectsFromArray:@[]])); }); qck_it(@"should send the argument for each invocation to the instance's own signal", ^{ RACTestObject *object1 = [[RACTestObject alloc] init]; __block id value1; [[object1 rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) { value1 = x.first; }]; RACTestObject *object2 = [[RACTestObject alloc] init]; __block id value2; [[object2 rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) { value2 = x.first; }]; [object1 lifeIsGood:@42]; [object2 lifeIsGood:@"Carpe diem"]; expect(value1).to(equal(@42)); expect(value2).to(equal(@"Carpe diem")); }); qck_it(@"should send multiple arguments for each invocation", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id value1; __block id value2; [[object rac_signalForSelector:@selector(combineObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) { value1 = x.first; value2 = x.second; }]; expect([object combineObjectValue:@42 andSecondObjectValue:@"foo"]).to(equal(@"42: foo")); expect(value1).to(equal(@42)); expect(value2).to(equal(@"foo")); }); qck_it(@"should send arguments for invocation of non-existant methods", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id key; __block id value; [[object rac_signalForSelector:@selector(setObject:forKey:)] subscribeNext:^(RACTuple *x) { value = x.first; key = x.second; }]; [object performSelector:@selector(setObject:forKey:) withObject:@YES withObject:@"Winner"]; expect(value).to(equal(@YES)); expect(key).to(equal(@"Winner")); }); qck_it(@"should send arguments for invocation and invoke the original method on previously KVO'd receiver", ^{ RACTestObject *object = [[RACTestObject alloc] init]; [[RACObserve(object, objectValue) publish] connect]; __block id key; __block id value; [[object rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) { value = x.first; key = x.second; }]; [object setObjectValue:@YES andSecondObjectValue:@"Winner"]; expect(@(object.hasInvokedSetObjectValueAndSecondObjectValue)).to(beTruthy()); expect(object.objectValue).to(equal(@YES)); expect(object.secondObjectValue).to(equal(@"Winner")); expect(value).to(equal(@YES)); expect(key).to(equal(@"Winner")); }); qck_it(@"should send arguments for invocation and invoke the original method when receiver is subsequently KVO'd", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id key; __block id value; [[object rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) { value = x.first; key = x.second; }]; [[RACObserve(object, objectValue) publish] connect]; [object setObjectValue:@YES andSecondObjectValue:@"Winner"]; expect(@(object.hasInvokedSetObjectValueAndSecondObjectValue)).to(beTruthy()); expect(object.objectValue).to(equal(@YES)); expect(object.secondObjectValue).to(equal(@"Winner")); expect(value).to(equal(@YES)); expect(key).to(equal(@"Winner")); }); qck_it(@"should properly implement -respondsToSelector: when called on KVO'd receiver", ^{ RACTestObject *object = [[RACTestObject alloc] init]; // First, setup KVO on `object`, which gives us the desired side-effect // of `object` taking on a KVO-custom subclass. [[RACObserve(object, objectValue) publish] connect]; SEL selector = NSSelectorFromString(@"anyOldSelector:"); // With the KVO subclass in place, call -rac_signalForSelector: to // implement -anyOldSelector: directly on the KVO subclass. [object rac_signalForSelector:selector]; expect(@([object respondsToSelector:selector])).to(beTruthy()); }); qck_it(@"should properly implement -respondsToSelector: when called on signalForSelector'd receiver that has subsequently been KVO'd", ^{ RACTestObject *object = [[RACTestObject alloc] init]; SEL selector = NSSelectorFromString(@"anyOldSelector:"); // Implement -anyOldSelector: on the object first [object rac_signalForSelector:selector]; expect(@([object respondsToSelector:selector])).to(beTruthy()); // Then KVO the object [[RACObserve(object, objectValue) publish] connect]; expect(@([object respondsToSelector:selector])).to(beTruthy()); }); qck_it(@"should properly implement -respondsToSelector: when called on signalForSelector'd receiver that has subsequently been KVO'd, then signalForSelector'd again", ^{ RACTestObject *object = [[RACTestObject alloc] init]; SEL selector = NSSelectorFromString(@"anyOldSelector:"); // Implement -anyOldSelector: on the object first [object rac_signalForSelector:selector]; expect(@([object respondsToSelector:selector])).to(beTruthy()); // Then KVO the object [[RACObserve(object, objectValue) publish] connect]; expect(@([object respondsToSelector:selector])).to(beTruthy()); SEL selector2 = NSSelectorFromString(@"anotherSelector:"); // Then implement -anotherSelector: on the object [object rac_signalForSelector:selector2]; expect(@([object respondsToSelector:selector2])).to(beTruthy()); }); qck_it(@"should call the right signal for two instances of the same class, adding signals for the same selector", ^{ RACTestObject *object1 = [[RACTestObject alloc] init]; RACTestObject *object2 = [[RACTestObject alloc] init]; SEL selector = NSSelectorFromString(@"lifeIsGood:"); __block id value1 = nil; [[object1 rac_signalForSelector:selector] subscribeNext:^(RACTuple *x) { value1 = x.first; }]; __block id value2 = nil; [[object2 rac_signalForSelector:selector] subscribeNext:^(RACTuple *x) { value2 = x.first; }]; [object1 lifeIsGood:@42]; expect(value1).to(equal(@42)); expect(value2).to(beNil()); [object2 lifeIsGood:@420]; expect(value1).to(equal(@42)); expect(value2).to(equal(@420)); }); qck_it(@"should properly implement -respondsToSelector: for optional method from a protocol", ^{ // Selector for the targeted optional method from a protocol. SEL selector = @selector(optionalProtocolMethodWithObjectValue:); RACTestObject *object1 = [[RACTestObject alloc] init]; // Method implementation of the selector is added to its swizzled class. [object1 rac_signalForSelector:selector fromProtocol:@protocol(RACTestProtocol)]; expect(@([object1 respondsToSelector:selector])).to(beTruthy()); RACTestObject *object2 = [[RACTestObject alloc] init]; // Call -rac_signalForSelector: to swizzle this instance's class, // method implementations of -respondsToSelector: and // -forwardInvocation:. [object2 rac_signalForSelector:@selector(lifeIsGood:)]; // This instance should not respond to the selector because of not // calling -rac_signalForSelector: with the selector. expect(@([object2 respondsToSelector:selector])).to(beFalsy()); }); qck_it(@"should send non-object arguments", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id value; [[object rac_signalForSelector:@selector(setIntegerValue:)] subscribeNext:^(RACTuple *x) { value = x.first; }]; object.integerValue = 42; expect(value).to(equal(@42)); }); qck_it(@"should send on signal after the original method is invoked", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block BOOL invokedMethodBefore = NO; [[object rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) { invokedMethodBefore = object.hasInvokedSetObjectValueAndSecondObjectValue; }]; [object setObjectValue:@YES andSecondObjectValue:@"Winner"]; expect(@(invokedMethodBefore)).to(beTruthy()); }); }); qck_it(@"should swizzle an NSObject method", ^{ NSObject *object = [[NSObject alloc] init]; __block RACTuple *value; [[object rac_signalForSelector:@selector(description)] subscribeNext:^(RACTuple *x) { value = x; }]; expect([object description]).notTo(beNil()); expect(value).to(equal([RACTuple tupleWithObjectsFromArray:@[]])); }); qck_describe(@"a class that already overrides -forwardInvocation:", ^{ qck_it(@"should invoke the superclass' implementation", ^{ RACSubclassObject *object = [[RACSubclassObject alloc] init]; __block id value; [[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) { value = x.first; }]; [object lifeIsGood:@42]; expect(value).to(equal(@42)); expect(@((size_t)(void*)object.forwardedSelector)).to(equal(@0)); [object performSelector:@selector(allObjects)]; expect(value).to(equal(@42)); expect(NSStringFromSelector(object.forwardedSelector)).to(equal(@"allObjects")); }); qck_it(@"should not infinite recurse when KVO'd after RAC swizzled", ^{ RACSubclassObject *object = [[RACSubclassObject alloc] init]; __block id value; [[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) { value = x.first; }]; [[RACObserve(object, objectValue) publish] connect]; [object lifeIsGood:@42]; expect(value).to(equal(@42)); expect(@((size_t)(void*)object.forwardedSelector)).to(equal(@0)); [object performSelector:@selector(allObjects)]; expect(NSStringFromSelector(object.forwardedSelector)).to(equal(@"allObjects")); }); }); qck_describe(@"two classes in the same hierarchy", ^{ __block RACTestObject *superclassObj; __block RACTuple *superclassTuple; __block RACSubclassObject *subclassObj; __block RACTuple *subclassTuple; qck_beforeEach(^{ superclassObj = [[RACTestObject alloc] init]; expect(superclassObj).notTo(beNil()); subclassObj = [[RACSubclassObject alloc] init]; expect(subclassObj).notTo(beNil()); }); qck_it(@"should not collide", ^{ [[superclassObj rac_signalForSelector:@selector(combineObjectValue:andIntegerValue:)] subscribeNext:^(RACTuple *t) { superclassTuple = t; }]; [[subclassObj rac_signalForSelector:@selector(combineObjectValue:andIntegerValue:)] subscribeNext:^(RACTuple *t) { subclassTuple = t; }]; expect([superclassObj combineObjectValue:@"foo" andIntegerValue:42]).to(equal(@"foo: 42")); NSArray *expectedValues = @[ @"foo", @42 ]; expect(superclassTuple.allObjects).to(equal(expectedValues)); expect([subclassObj combineObjectValue:@"foo" andIntegerValue:42]).to(equal(@"fooSUBCLASS: 42")); expectedValues = @[ @"foo", @42 ]; expect(subclassTuple.allObjects).to(equal(expectedValues)); }); qck_it(@"should not collide when the superclass is invoked asynchronously", ^{ [[superclassObj rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *t) { superclassTuple = t; }]; [[subclassObj rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *t) { subclassTuple = t; }]; [superclassObj setObjectValue:@"foo" andSecondObjectValue:@"42"]; expect(@(superclassObj.hasInvokedSetObjectValueAndSecondObjectValue)).to(beTruthy()); NSArray *expectedValues = @[ @"foo", @"42" ]; expect(superclassTuple.allObjects).to(equal(expectedValues)); [subclassObj setObjectValue:@"foo" andSecondObjectValue:@"42"]; expect(@(subclassObj.hasInvokedSetObjectValueAndSecondObjectValue)).to(beFalsy()); expect(@(subclassObj.hasInvokedSetObjectValueAndSecondObjectValue)).toEventually(beTruthy()); expectedValues = @[ @"foo", @"42" ]; expect(subclassTuple.allObjects).to(equal(expectedValues)); }); }); qck_describe(@"-rac_signalForSelector:fromProtocol", ^{ __block RACTestObject *object; __block Protocol *protocol; qck_beforeEach(^{ object = (id)[[RACTestObject alloc] init]; expect(object).notTo(beNil()); protocol = @protocol(TestProtocol); expect(protocol).notTo(beNil()); }); qck_it(@"should not clobber a required method already implemented", ^{ __block id value; [[object rac_signalForSelector:@selector(lifeIsGood:) fromProtocol:protocol] subscribeNext:^(RACTuple *x) { value = x.first; }]; [object lifeIsGood:@42]; expect(value).to(equal(@42)); }); qck_it(@"should not clobber an optional method already implemented", ^{ object.objectValue = @"foo"; __block id value; [[object rac_signalForSelector:@selector(objectValue) fromProtocol:protocol] subscribeNext:^(RACTuple *x) { value = x; }]; expect([object objectValue]).to(equal(@"foo")); expect(value).to(equal([RACTuple tupleWithObjectsFromArray:@[]])); }); qck_it(@"should inject a required method", ^{ __block id value; [[object rac_signalForSelector:@selector(requiredMethod:) fromProtocol:protocol] subscribeNext:^(RACTuple *x) { value = x.first; }]; expect(@([object requiredMethod:42])).to(beFalsy()); expect(value).to(equal(@42)); }); qck_it(@"should inject an optional method", ^{ __block id value; [[object rac_signalForSelector:@selector(optionalMethodWithObject:flag:) fromProtocol:protocol] subscribeNext:^(RACTuple *x) { value = x; }]; expect(@([object optionalMethodWithObject:@"foo" flag:YES])).to(equal(@0)); expect(value).to(equal(RACTuplePack(@"foo", @YES))); }); }); qck_describe(@"class reporting", ^{ __block RACTestObject *object; __block Class originalClass; qck_beforeEach(^{ object = [[RACTestObject alloc] init]; originalClass = object.class; }); qck_it(@"should report the original class", ^{ [object rac_signalForSelector:@selector(lifeIsGood:)]; expect(object.class).to(beIdenticalTo(originalClass)); }); qck_it(@"should report the original class when it's KVO'd after dynamically subclassing", ^{ [object rac_signalForSelector:@selector(lifeIsGood:)]; [[RACObserve(object, objectValue) publish] connect]; expect(object.class).to(beIdenticalTo(originalClass)); }); qck_it(@"should report the original class when it's KVO'd before dynamically subclassing", ^{ [[RACObserve(object, objectValue) publish] connect]; [object rac_signalForSelector:@selector(lifeIsGood:)]; expect(object.class).to(beIdenticalTo(originalClass)); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSStringRACKeyPathUtilitiesSpec.m ================================================ // // NSStringRACKeyPathUtilitiesSpec.m // ReactiveCocoa // // Created by Uri Baghin on 05/05/2013. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "NSString+RACKeyPathUtilities.h" QuickSpecBegin(NSStringRACKeyPathUtilitiesSpec) qck_describe(@"-keyPathComponents", ^{ qck_it(@"should return components in the key path", ^{ expect(@"self.test.key.path".rac_keyPathComponents).to(equal((@[@"self", @"test", @"key", @"path"]))); }); qck_it(@"should return nil if given an empty string", ^{ expect(@"".rac_keyPathComponents).to(beNil()); }); }); qck_describe(@"-keyPathByDeletingLastKeyPathComponent", ^{ qck_it(@"should return the parent key path", ^{ expect(@"grandparent.parent.child".rac_keyPathByDeletingLastKeyPathComponent).to(equal(@"grandparent.parent")); }); qck_it(@"should return nil if given an empty string", ^{ expect(@"".rac_keyPathByDeletingLastKeyPathComponent).to(beNil()); }); qck_it(@"should return nil if given a key path with only one component", ^{ expect(@"self".rac_keyPathByDeletingLastKeyPathComponent).to(beNil()); }); }); qck_describe(@"-keyPathByDeletingFirstKeyPathComponent", ^{ qck_it(@"should return the remaining key path", ^{ expect(@"first.second.third".rac_keyPathByDeletingFirstKeyPathComponent).to(equal(@"second.third")); }); qck_it(@"should return nil if given an empty string", ^{ expect(@"".rac_keyPathByDeletingFirstKeyPathComponent).to(beNil()); }); qck_it(@"should return nil if given a key path with only one component", ^{ expect(@"self".rac_keyPathByDeletingFirstKeyPathComponent).to(beNil()); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSURLConnectionRACSupportSpec.m ================================================ // // NSURLConnectionRACSupportSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-10-01. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "NSURLConnection+RACSupport.h" #import "RACSignal+Operations.h" #import "RACTuple.h" QuickSpecBegin(NSURLConnectionRACSupportSpec) qck_it(@"should fetch a JSON file", ^{ NSURL *fileURL = [[NSBundle bundleForClass:self.class] URLForResource:@"test-data" withExtension:@"json"]; expect(fileURL).notTo(beNil()); NSURLRequest *request = [NSURLRequest requestWithURL:fileURL]; BOOL success = NO; NSError *error = nil; RACTuple *result = [[NSURLConnection rac_sendAsynchronousRequest:request] firstOrDefault:nil success:&success error:&error]; expect(@(success)).to(beTruthy()); expect(error).to(beNil()); expect(result).to(beAKindOf(RACTuple.class)); NSURLResponse *response = result.first; expect(response).to(beAKindOf(NSURLResponse.class)); NSData *data = result.second; expect(data).to(beAKindOf(NSData.class)); expect(data).to(equal([NSData dataWithContentsOfURL:fileURL])); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSUserDefaultsRACSupportSpec.m ================================================ // // NSUserDefaultsRACSupportSpec.m // ReactiveCocoa // // Created by Matt Diephouse on 12/19/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "NSUserDefaults+RACSupport.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACKVOChannel.h" #import "NSObject+RACDeallocating.h" #import "RACSignal+Operations.h" static NSString * const NSUserDefaultsRACSupportSpecStringDefault = @"NSUserDefaultsRACSupportSpecStringDefault"; static NSString * const NSUserDefaultsRACSupportSpecBoolDefault = @"NSUserDefaultsRACSupportSpecBoolDefault"; @interface TestObserver : NSObject @property (copy, atomic) NSString *string1; @property (copy, atomic) NSString *string2; @property (assign, atomic) BOOL bool1; @end @implementation TestObserver @end QuickSpecBegin(NSUserDefaultsRACSupportSpec) __block NSUserDefaults *defaults = nil; __block TestObserver *observer = nil; qck_beforeEach(^{ defaults = NSUserDefaults.standardUserDefaults; observer = [TestObserver new]; }); qck_afterEach(^{ [defaults removeObjectForKey:NSUserDefaultsRACSupportSpecStringDefault]; [defaults removeObjectForKey:NSUserDefaultsRACSupportSpecBoolDefault]; observer = nil; }); qck_it(@"should set defaults", ^{ RACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; RACChannelTo(observer, bool1, @NO) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecBoolDefault]; observer.string1 = @"A string"; observer.bool1 = YES; expect([defaults objectForKey:NSUserDefaultsRACSupportSpecStringDefault]).toEventually(equal(@"A string")); expect([defaults objectForKey:NSUserDefaultsRACSupportSpecBoolDefault]).toEventually(equal(@YES)); }); qck_it(@"should read defaults", ^{ RACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; RACChannelTo(observer, bool1, @NO) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecBoolDefault]; expect(observer.string1).to(beNil()); expect(@(observer.bool1)).to(equal(@NO)); [defaults setObject:@"Another string" forKey:NSUserDefaultsRACSupportSpecStringDefault]; [defaults setBool:YES forKey:NSUserDefaultsRACSupportSpecBoolDefault]; expect(observer.string1).to(equal(@"Another string")); expect(@(observer.bool1)).to(equal(@YES)); }); qck_it(@"should be okay to create 2 terminals", ^{ RACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; RACChannelTo(observer, string2) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; [defaults setObject:@"String 3" forKey:NSUserDefaultsRACSupportSpecStringDefault]; expect(observer.string1).to(equal(@"String 3")); expect(observer.string2).to(equal(@"String 3")); }); qck_it(@"should handle removed defaults", ^{ observer.string1 = @"Some string"; observer.bool1 = YES; RACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; RACChannelTo(observer, bool1, @NO) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecBoolDefault]; [defaults removeObjectForKey:NSUserDefaultsRACSupportSpecStringDefault]; [defaults removeObjectForKey:NSUserDefaultsRACSupportSpecBoolDefault]; expect(observer.string1).to(beNil()); expect(@(observer.bool1)).to(equal(@NO)); }); qck_it(@"shouldn't resend values", ^{ RACChannelTerminal *terminal = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; RACChannelTo(observer, string1) = terminal; RACSignal *sentValue = [terminal replayLast]; observer.string1 = @"Test value"; id value = [sentValue asynchronousFirstOrDefault:nil success:NULL error:NULL]; expect(value).to(beNil()); }); qck_it(@"should complete when the NSUserDefaults deallocates", ^{ __block RACChannelTerminal *terminal; __block BOOL deallocated = NO; @autoreleasepool { NSUserDefaults *customDefaults __attribute__((objc_precise_lifetime)) = [NSUserDefaults new]; [customDefaults.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; terminal = [customDefaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; } expect(@(deallocated)).to(beTruthy()); expect(@([terminal asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); }); qck_it(@"should send an initial value", ^{ [defaults setObject:@"Initial" forKey:NSUserDefaultsRACSupportSpecStringDefault]; RACChannelTerminal *terminal = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault]; expect([terminal asynchronousFirstOrDefault:nil success:NULL error:NULL]).to(equal(@"Initial")); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACBlockTrampolineSpec.m ================================================ // // RACBlockTrampolineSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 10/28/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACBlockTrampoline.h" #import "RACTuple.h" QuickSpecBegin(RACBlockTrampolineSpec) qck_it(@"should invoke the block with the given arguments", ^{ __block NSString *stringArg; __block NSNumber *numberArg; id (^block)(NSString *, NSNumber *) = ^ id (NSString *string, NSNumber *number) { stringArg = string; numberArg = number; return nil; }; [RACBlockTrampoline invokeBlock:block withArguments:RACTuplePack(@"hi", @1)]; expect(stringArg).to(equal(@"hi")); expect(numberArg).to(equal(@1)); }); qck_it(@"should return the result of the block invocation", ^{ NSString * (^block)(NSString *) = ^(NSString *string) { return string.uppercaseString; }; NSString *result = [RACBlockTrampoline invokeBlock:block withArguments:RACTuplePack(@"hi")]; expect(result).to(equal(@"HI")); }); qck_it(@"should pass RACTupleNils as nil", ^{ __block id arg; id (^block)(id) = ^ id (id obj) { arg = obj; return nil; }; [RACBlockTrampoline invokeBlock:block withArguments:RACTuplePack(nil)]; expect(arg).to(beNil()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACChannelExamples.h ================================================ // // RACChannelExamples.h // ReactiveCocoa // // Created by Uri Baghin on 30/12/2012. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // // The name of the shared examples for RACChannel and its subclasses. extern NSString * const RACChannelExamples; // A block of type `RACChannel * (^)(void)`, which should return a new // RACChannel. extern NSString * const RACChannelExampleCreateBlock; // The name of the shared examples for any RACChannel class that gets and sets // a property. extern NSString * const RACViewChannelExamples; // A block of type `NSObject * (^)(void)`, which should create a new test view // and return it. extern NSString * const RACViewChannelExampleCreateViewBlock; // A block of type `RACChannelTerminal * (^)(NSObject *view)`, which should // create a new RACChannel to the given test view and return an terminal. extern NSString * const RACViewChannelExampleCreateTerminalBlock; // The key path that will be read/written in RACViewChannelExamples. This // must lead to an NSNumber or numeric primitive property. extern NSString * const RACViewChannelExampleKeyPath; // A block of type `void (^)(NSObject *view, NSNumber *value)`, which should // change the given test view's value to the given one. extern NSString * const RACViewChannelExampleSetViewValueBlock; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACChannelExamples.m ================================================ // // RACChannelExamples.m // ReactiveCocoa // // Created by Uri Baghin on 30/12/2012. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACChannelExamples.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "RACChannel.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" NSString * const RACChannelExamples = @"RACChannelExamples"; NSString * const RACChannelExampleCreateBlock = @"RACChannelExampleCreateBlock"; NSString * const RACViewChannelExamples = @"RACViewChannelExamples"; NSString * const RACViewChannelExampleCreateViewBlock = @"RACViewChannelExampleCreateViewBlock"; NSString * const RACViewChannelExampleCreateTerminalBlock = @"RACViewChannelExampleCreateTerminalBlock"; NSString * const RACViewChannelExampleKeyPath = @"RACViewChannelExampleKeyPath"; NSString * const RACViewChannelExampleSetViewValueBlock = @"RACViewChannelExampleSetViewValueBlock"; QuickConfigurationBegin(RACChannelExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACChannelExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block RACChannel * (^getChannel)(void); __block RACChannel *channel; id value1 = @"test value 1"; id value2 = @"test value 2"; id value3 = @"test value 3"; NSArray *values = @[ value1, value2, value3 ]; qck_beforeEach(^{ getChannel = exampleContext()[RACChannelExampleCreateBlock]; channel = getChannel(); }); qck_it(@"should not send any leadingTerminal value on subscription", ^{ __block id receivedValue = nil; [channel.followingTerminal sendNext:value1]; [channel.leadingTerminal subscribeNext:^(id x) { receivedValue = x; }]; expect(receivedValue).to(beNil()); [channel.followingTerminal sendNext:value2]; expect(receivedValue).to(equal(value2)); }); qck_it(@"should send the latest followingTerminal value on subscription", ^{ __block id receivedValue = nil; [channel.leadingTerminal sendNext:value1]; [[channel.followingTerminal take:1] subscribeNext:^(id x) { receivedValue = x; }]; expect(receivedValue).to(equal(value1)); [channel.leadingTerminal sendNext:value2]; [[channel.followingTerminal take:1] subscribeNext:^(id x) { receivedValue = x; }]; expect(receivedValue).to(equal(value2)); }); qck_it(@"should send leadingTerminal values as they change", ^{ NSMutableArray *receivedValues = [NSMutableArray array]; [channel.leadingTerminal subscribeNext:^(id x) { [receivedValues addObject:x]; }]; [channel.followingTerminal sendNext:value1]; [channel.followingTerminal sendNext:value2]; [channel.followingTerminal sendNext:value3]; expect(receivedValues).to(equal(values)); }); qck_it(@"should send followingTerminal values as they change", ^{ [channel.leadingTerminal sendNext:value1]; NSMutableArray *receivedValues = [NSMutableArray array]; [channel.followingTerminal subscribeNext:^(id x) { [receivedValues addObject:x]; }]; [channel.leadingTerminal sendNext:value2]; [channel.leadingTerminal sendNext:value3]; expect(receivedValues).to(equal(values)); }); qck_it(@"should complete both signals when the leadingTerminal is completed", ^{ __block BOOL completedLeft = NO; [channel.leadingTerminal subscribeCompleted:^{ completedLeft = YES; }]; __block BOOL completedRight = NO; [channel.followingTerminal subscribeCompleted:^{ completedRight = YES; }]; [channel.leadingTerminal sendCompleted]; expect(@(completedLeft)).to(beTruthy()); expect(@(completedRight)).to(beTruthy()); }); qck_it(@"should complete both signals when the followingTerminal is completed", ^{ __block BOOL completedLeft = NO; [channel.leadingTerminal subscribeCompleted:^{ completedLeft = YES; }]; __block BOOL completedRight = NO; [channel.followingTerminal subscribeCompleted:^{ completedRight = YES; }]; [channel.followingTerminal sendCompleted]; expect(@(completedLeft)).to(beTruthy()); expect(@(completedRight)).to(beTruthy()); }); qck_it(@"should replay completion to new subscribers", ^{ [channel.leadingTerminal sendCompleted]; __block BOOL completedLeft = NO; [channel.leadingTerminal subscribeCompleted:^{ completedLeft = YES; }]; __block BOOL completedRight = NO; [channel.followingTerminal subscribeCompleted:^{ completedRight = YES; }]; expect(@(completedLeft)).to(beTruthy()); expect(@(completedRight)).to(beTruthy()); }); }); sharedExamples(RACViewChannelExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block NSString *keyPath; __block NSObject * (^getView)(void); __block RACChannelTerminal * (^getTerminal)(NSObject *); __block void (^setViewValue)(NSObject *view, NSNumber *value); __block NSObject *testView; __block RACChannelTerminal *endpoint; qck_beforeEach(^{ keyPath = exampleContext()[RACViewChannelExampleKeyPath]; getTerminal = exampleContext()[RACViewChannelExampleCreateTerminalBlock]; getView = exampleContext()[RACViewChannelExampleCreateViewBlock]; setViewValue = exampleContext()[RACViewChannelExampleSetViewValueBlock]; testView = getView(); endpoint = getTerminal(testView); }); qck_it(@"should not send changes made by the channel itself", ^{ __block BOOL receivedNext = NO; [endpoint subscribeNext:^(id x) { receivedNext = YES; }]; expect(@(receivedNext)).to(beFalsy()); [endpoint sendNext:@0.1]; expect(@(receivedNext)).to(beFalsy()); [endpoint sendNext:@0.2]; expect(@(receivedNext)).to(beFalsy()); [endpoint sendCompleted]; expect(@(receivedNext)).to(beFalsy()); }); qck_it(@"should not send progammatic changes made to the view", ^{ __block BOOL receivedNext = NO; [endpoint subscribeNext:^(id x) { receivedNext = YES; }]; expect(@(receivedNext)).to(beFalsy()); [testView setValue:@0.1 forKeyPath:keyPath]; expect(@(receivedNext)).to(beFalsy()); [testView setValue:@0.2 forKeyPath:keyPath]; expect(@(receivedNext)).to(beFalsy()); }); qck_it(@"should not have a starting value", ^{ __block BOOL receivedNext = NO; [endpoint subscribeNext:^(id x) { receivedNext = YES; }]; expect(@(receivedNext)).to(beFalsy()); }); qck_it(@"should send view changes", ^{ __block NSString *received; [endpoint subscribeNext:^(id x) { received = x; }]; setViewValue(testView, @0.1); expect(received).to(equal(@0.1)); setViewValue(testView, @0.2); expect(received).to(equal(@0.2)); }); qck_it(@"should set values on the view", ^{ [endpoint sendNext:@0.1]; expect([testView valueForKeyPath:keyPath]).to(equal(@0.1)); [endpoint sendNext:@0.2]; expect([testView valueForKeyPath:keyPath]).to(equal(@0.2)); }); qck_it(@"should not echo changes back to the channel", ^{ __block NSUInteger receivedCount = 0; [endpoint subscribeNext:^(id _) { receivedCount++; }]; expect(@(receivedCount)).to(equal(@0)); [endpoint sendNext:@0.1]; expect(@(receivedCount)).to(equal(@0)); setViewValue(testView, @0.2); expect(@(receivedCount)).to(equal(@1)); }); qck_it(@"should complete when the view deallocates", ^{ __block BOOL deallocated = NO; __block BOOL completed = NO; @autoreleasepool { NSObject *view __attribute__((objc_precise_lifetime)) = getView(); [view.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; RACChannelTerminal *terminal = getTerminal(view); [terminal subscribeCompleted:^{ completed = YES; }]; expect(@(deallocated)).to(beFalsy()); expect(@(completed)).to(beFalsy()); } expect(@(deallocated)).to(beTruthy()); expect(@(completed)).to(beTruthy()); }); qck_it(@"should deallocate after the view deallocates", ^{ __block BOOL viewDeallocated = NO; __block BOOL terminalDeallocated = NO; @autoreleasepool { NSObject *view __attribute__((objc_precise_lifetime)) = getView(); [view.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ viewDeallocated = YES; }]]; RACChannelTerminal *terminal = getTerminal(view); [terminal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ terminalDeallocated = YES; }]]; expect(@(viewDeallocated)).to(beFalsy()); expect(@(terminalDeallocated)).to(beFalsy()); } expect(@(viewDeallocated)).to(beTruthy()); expect(@(terminalDeallocated)).toEventually(beTruthy()); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACChannelSpec.m ================================================ // // RACChannelSpec.m // ReactiveCocoa // // Created by Uri Baghin on 30/12/2012. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACChannelExamples.h" #import "NSObject+RACDeallocating.h" #import "RACChannel.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSignal.h" QuickSpecBegin(RACChannelSpec) qck_describe(@"RACChannel", ^{ qck_itBehavesLike(RACChannelExamples, ^{ return @{ RACChannelExampleCreateBlock: [^{ return [[RACChannel alloc] init]; } copy] }; }); qck_describe(@"memory management", ^{ qck_it(@"should dealloc when its subscribers are disposed", ^{ RACDisposable *leadingDisposable = nil; RACDisposable *followingDisposable = nil; __block BOOL deallocated = NO; @autoreleasepool { RACChannel *channel __attribute__((objc_precise_lifetime)) = [[RACChannel alloc] init]; [channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; leadingDisposable = [channel.leadingTerminal subscribeCompleted:^{}]; followingDisposable = [channel.followingTerminal subscribeCompleted:^{}]; } [leadingDisposable dispose]; [followingDisposable dispose]; expect(@(deallocated)).toEventually(beTruthy()); }); qck_it(@"should dealloc when its subscriptions are disposed", ^{ RACDisposable *leadingDisposable = nil; RACDisposable *followingDisposable = nil; __block BOOL deallocated = NO; @autoreleasepool { RACChannel *channel __attribute__((objc_precise_lifetime)) = [[RACChannel alloc] init]; [channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; leadingDisposable = [[RACSignal never] subscribe:channel.leadingTerminal]; followingDisposable = [[RACSignal never] subscribe:channel.followingTerminal]; } [leadingDisposable dispose]; [followingDisposable dispose]; expect(@(deallocated)).toEventually(beTruthy()); }); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACCommandSpec.m ================================================ // // RACCommandSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 8/31/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "NSArray+RACSequenceAdditions.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "RACCommand.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACEvent.h" #import "RACScheduler.h" #import "RACSequence.h" #import "RACSignal+Operations.h" #import "RACSubject.h" #import "RACUnit.h" QuickSpecBegin(RACCommandSpec) RACSignal * (^emptySignalBlock)(id) = ^(id _) { return [RACSignal empty]; }; qck_describe(@"with a simple signal block", ^{ __block RACCommand *command; qck_beforeEach(^{ command = [[RACCommand alloc] initWithSignalBlock:^(id value) { return [RACSignal return:value]; }]; expect(command).notTo(beNil()); expect(@(command.allowsConcurrentExecution)).to(beFalsy()); }); qck_it(@"should be enabled by default", ^{ expect([command.enabled first]).to(equal(@YES)); }); qck_it(@"should not be executing by default", ^{ expect([command.executing first]).to(equal(@NO)); }); qck_it(@"should create an execution signal", ^{ __block NSUInteger signalsReceived = 0; __block BOOL completed = NO; id value = NSNull.null; [command.executionSignals subscribeNext:^(RACSignal *signal) { signalsReceived++; [signal subscribeNext:^(id x) { expect(x).to(equal(value)); } completed:^{ completed = YES; }]; }]; expect(@(signalsReceived)).to(equal(@0)); [command execute:value]; expect(@(signalsReceived)).toEventually(equal(@1)); expect(@(completed)).to(beTruthy()); }); qck_it(@"should return the execution signal from -execute:", ^{ __block BOOL completed = NO; id value = NSNull.null; [[command execute:value] subscribeNext:^(id x) { expect(x).to(equal(value)); } completed:^{ completed = YES; }]; expect(@(completed)).toEventually(beTruthy()); }); qck_it(@"should always send executionSignals on the main thread", ^{ __block RACScheduler *receivedScheduler = nil; [command.executionSignals subscribeNext:^(id _) { receivedScheduler = RACScheduler.currentScheduler; }]; [[RACScheduler scheduler] schedule:^{ expect(@([[command execute:nil] waitUntilCompleted:NULL])).to(beTruthy()); }]; expect(receivedScheduler).to(beNil()); expect(receivedScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); }); qck_it(@"should not send anything on 'errors' by default", ^{ __block BOOL receivedError = NO; [command.errors subscribeNext:^(id _) { receivedError = YES; }]; expect(@([[command execute:nil] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); expect(@(receivedError)).to(beFalsy()); }); qck_it(@"should be executing while an execution signal is running", ^{ [command.executionSignals subscribeNext:^(RACSignal *signal) { [signal subscribeNext:^(id x) { expect([command.executing first]).to(equal(@YES)); }]; }]; expect(@([[command execute:nil] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); expect([command.executing first]).to(equal(@NO)); }); qck_it(@"should always update executing on the main thread", ^{ __block RACScheduler *updatedScheduler = nil; [[command.executing skip:1] subscribeNext:^(NSNumber *executing) { if (!executing.boolValue) return; updatedScheduler = RACScheduler.currentScheduler; }]; [[RACScheduler scheduler] schedule:^{ expect(@([[command execute:nil] waitUntilCompleted:NULL])).to(beTruthy()); }]; expect([command.executing first]).to(equal(@NO)); expect(updatedScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); }); qck_it(@"should dealloc without subscribers", ^{ __block BOOL disposed = NO; @autoreleasepool { RACCommand *command __attribute__((objc_precise_lifetime)) = [[RACCommand alloc] initWithSignalBlock:emptySignalBlock]; [command.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ disposed = YES; }]]; } expect(@(disposed)).toEventually(beTruthy()); }); qck_it(@"should complete signals on the main thread when deallocated", ^{ __block RACScheduler *executionSignalsScheduler = nil; __block RACScheduler *executingScheduler = nil; __block RACScheduler *enabledScheduler = nil; __block RACScheduler *errorsScheduler = nil; [[RACScheduler scheduler] schedule:^{ @autoreleasepool { RACCommand *command __attribute__((objc_precise_lifetime)) = [[RACCommand alloc] initWithSignalBlock:emptySignalBlock]; [command.executionSignals subscribeCompleted:^{ executionSignalsScheduler = RACScheduler.currentScheduler; }]; [command.executing subscribeCompleted:^{ executingScheduler = RACScheduler.currentScheduler; }]; [command.enabled subscribeCompleted:^{ enabledScheduler = RACScheduler.currentScheduler; }]; [command.errors subscribeCompleted:^{ errorsScheduler = RACScheduler.currentScheduler; }]; } }]; expect(executionSignalsScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); expect(executingScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); expect(enabledScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); expect(errorsScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); }); }); qck_it(@"should invoke the signalBlock once per execution", ^{ NSMutableArray *valuesReceived = [NSMutableArray array]; RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id x) { [valuesReceived addObject:x]; return [RACSignal empty]; }]; expect(@([[command execute:@"foo"] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); expect(valuesReceived).to(equal((@[ @"foo" ]))); expect(@([[command execute:@"bar"] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); expect(valuesReceived).to(equal((@[ @"foo", @"bar" ]))); }); qck_it(@"should send on executionSignals in order of execution", ^{ RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSequence *seq) { return [seq signalWithScheduler:RACScheduler.immediateScheduler]; }]; NSMutableArray *valuesReceived = [NSMutableArray array]; [[command.executionSignals concat] subscribeNext:^(id x) { [valuesReceived addObject:x]; }]; RACSequence *first = @[ @"foo", @"bar" ].rac_sequence; expect(@([[command execute:first] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); RACSequence *second = @[ @"buzz", @"baz" ].rac_sequence; expect(@([[command execute:second] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); NSArray *expectedValues = @[ @"foo", @"bar", @"buzz", @"baz" ]; expect(valuesReceived).to(equal(expectedValues)); }); qck_it(@"should wait for all signals to complete or error before executing sends NO", ^{ RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) { return signal; }]; command.allowsConcurrentExecution = YES; RACSubject *firstSubject = [RACSubject subject]; expect([command execute:firstSubject]).notTo(beNil()); RACSubject *secondSubject = [RACSubject subject]; expect([command execute:secondSubject]).notTo(beNil()); expect([command.executing first]).toEventually(equal(@YES)); [firstSubject sendError:nil]; expect([command.executing first]).to(equal(@YES)); [secondSubject sendNext:nil]; expect([command.executing first]).to(equal(@YES)); [secondSubject sendCompleted]; expect([command.executing first]).toEventually(equal(@NO)); }); qck_it(@"should have allowsConcurrentExecution be observable", ^{ RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) { return signal; }]; RACSubject *completion = [RACSubject subject]; RACSignal *allowsConcurrentExecution = [[RACObserve(command, allowsConcurrentExecution) takeUntil:completion] replayLast]; command.allowsConcurrentExecution = YES; expect([allowsConcurrentExecution first]).to(beTrue()); [completion sendCompleted]; }); qck_it(@"should not deliver errors from executionSignals", ^{ RACSubject *subject = [RACSubject subject]; NSMutableArray *receivedEvents = [NSMutableArray array]; RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id _) { return subject; }]; [[[command.executionSignals flatten] materialize] subscribeNext:^(RACEvent *event) { [receivedEvents addObject:event]; }]; expect([command execute:nil]).notTo(beNil()); expect([command.executing first]).toEventually(equal(@YES)); [subject sendNext:RACUnit.defaultUnit]; NSArray *expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit] ]; expect(receivedEvents).toEventually(equal(expectedEvents)); expect([command.executing first]).to(equal(@YES)); [subject sendNext:@"foo"]; expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], [RACEvent eventWithValue:@"foo"] ]; expect(receivedEvents).toEventually(equal(expectedEvents)); expect([command.executing first]).to(equal(@YES)); NSError *error = [NSError errorWithDomain:@"" code:1 userInfo:nil]; [subject sendError:error]; expect([command.executing first]).toEventually(equal(@NO)); expect(receivedEvents).to(equal(expectedEvents)); }); qck_it(@"should deliver errors from -execute:", ^{ RACSubject *subject = [RACSubject subject]; NSMutableArray *receivedEvents = [NSMutableArray array]; RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id _) { return subject; }]; [[[command execute:nil] materialize] subscribeNext:^(RACEvent *event) { [receivedEvents addObject:event]; }]; expect([command.executing first]).toEventually(equal(@YES)); [subject sendNext:RACUnit.defaultUnit]; NSArray *expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit] ]; expect(receivedEvents).toEventually(equal(expectedEvents)); expect([command.executing first]).to(equal(@YES)); [subject sendNext:@"foo"]; expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], [RACEvent eventWithValue:@"foo"] ]; expect(receivedEvents).toEventually(equal(expectedEvents)); expect([command.executing first]).to(equal(@YES)); NSError *error = [NSError errorWithDomain:@"" code:1 userInfo:nil]; [subject sendError:error]; expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], [RACEvent eventWithValue:@"foo"], [RACEvent eventWithError:error] ]; expect(receivedEvents).toEventually(equal(expectedEvents)); expect([command.executing first]).toEventually(equal(@NO)); }); qck_it(@"should deliver errors onto 'errors'", ^{ RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) { return signal; }]; command.allowsConcurrentExecution = YES; RACSubject *firstSubject = [RACSubject subject]; expect([command execute:firstSubject]).notTo(beNil()); RACSubject *secondSubject = [RACSubject subject]; expect([command execute:secondSubject]).notTo(beNil()); NSError *firstError = [NSError errorWithDomain:@"" code:1 userInfo:nil]; NSError *secondError = [NSError errorWithDomain:@"" code:2 userInfo:nil]; // We should receive errors from our previously-started executions. NSMutableArray *receivedErrors = [NSMutableArray array]; [command.errors subscribeNext:^(NSError *error) { [receivedErrors addObject:error]; }]; expect([command.executing first]).toEventually(equal(@YES)); [firstSubject sendError:firstError]; expect([command.executing first]).toEventually(equal(@YES)); NSArray *expected = @[ firstError ]; expect(receivedErrors).toEventually(equal(expected)); [secondSubject sendError:secondError]; expect([command.executing first]).toEventually(equal(@NO)); expected = @[ firstError, secondError ]; expect(receivedErrors).toEventually(equal(expected)); }); qck_it(@"should not deliver non-error events onto 'errors'", ^{ RACSubject *subject = [RACSubject subject]; RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id _) { return subject; }]; __block BOOL receivedEvent = NO; [command.errors subscribeNext:^(id _) { receivedEvent = YES; }]; expect([command execute:nil]).notTo(beNil()); expect([command.executing first]).toEventually(equal(@YES)); [subject sendNext:RACUnit.defaultUnit]; [subject sendCompleted]; expect([command.executing first]).toEventually(equal(@NO)); expect(@(receivedEvent)).to(beFalsy()); }); qck_it(@"should send errors on the main thread", ^{ RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) { return signal; }]; NSError *error = [NSError errorWithDomain:@"" code:1 userInfo:nil]; __block RACScheduler *receivedScheduler = nil; [command.errors subscribeNext:^(NSError *e) { expect(e).to(equal(error)); receivedScheduler = RACScheduler.currentScheduler; }]; RACSignal *errorSignal = [RACSignal error:error]; [[RACScheduler scheduler] schedule:^{ [command execute:errorSignal]; }]; expect(receivedScheduler).to(beNil()); expect(receivedScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); }); qck_describe(@"enabled signal", ^{ __block RACSubject *enabledSubject; __block RACCommand *command; qck_beforeEach(^{ enabledSubject = [RACSubject subject]; command = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:^(id _) { return [RACSignal return:RACUnit.defaultUnit]; }]; }); qck_it(@"should send YES by default", ^{ expect([command.enabled first]).to(equal(@YES)); }); qck_it(@"should send whatever the enabledSignal has sent most recently", ^{ [enabledSubject sendNext:@NO]; expect([command.enabled first]).toEventually(equal(@NO)); [enabledSubject sendNext:@YES]; expect([command.enabled first]).toEventually(equal(@YES)); [enabledSubject sendNext:@NO]; expect([command.enabled first]).toEventually(equal(@NO)); }); qck_it(@"should sample enabledSignal synchronously at initialization time", ^{ RACCommand *command = [[RACCommand alloc] initWithEnabled:[RACSignal return:@NO] signalBlock:^(id _) { return [RACSignal empty]; }]; expect([command.enabled first]).to(equal(@NO)); }); qck_it(@"should send NO while executing is YES and allowsConcurrentExecution is NO", ^{ [[command.executionSignals flatten] subscribeNext:^(id _) { expect([command.executing first]).to(equal(@YES)); expect([command.enabled first]).to(equal(@NO)); }]; expect([command.enabled first]).to(equal(@YES)); expect(@([[command execute:nil] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); expect([command.enabled first]).to(equal(@YES)); }); qck_it(@"should send YES while executing is YES and allowsConcurrentExecution is YES", ^{ command.allowsConcurrentExecution = YES; __block BOOL outerExecuted = NO; __block BOOL innerExecuted = NO; // Prevent infinite recursion by only responding to the first value. [[[command.executionSignals take:1] flatten] subscribeNext:^(id _) { outerExecuted = YES; expect([command.executing first]).to(equal(@YES)); expect([command.enabled first]).to(equal(@YES)); [[command execute:nil] subscribeCompleted:^{ innerExecuted = YES; }]; }]; expect([command.enabled first]).to(equal(@YES)); expect([command execute:nil]).notTo(beNil()); expect(@(outerExecuted)).toEventually(beTruthy()); expect(@(innerExecuted)).toEventually(beTruthy()); expect([command.enabled first]).to(equal(@YES)); }); qck_it(@"should send an error from -execute: when NO", ^{ [enabledSubject sendNext:@NO]; RACSignal *signal = [command execute:nil]; expect(signal).notTo(beNil()); __block BOOL success = NO; __block NSError *error = nil; expect([signal firstOrDefault:nil success:&success error:&error]).to(beNil()); expect(@(success)).to(beFalsy()); expect(error).notTo(beNil()); expect(error.domain).to(equal(RACCommandErrorDomain)); expect(@(error.code)).to(equal(@(RACCommandErrorNotEnabled))); expect(error.userInfo[RACUnderlyingCommandErrorKey]).to(beIdenticalTo(command)); }); qck_it(@"should always update on the main thread", ^{ __block RACScheduler *updatedScheduler = nil; [[command.enabled skip:1] subscribeNext:^(id _) { updatedScheduler = RACScheduler.currentScheduler; }]; [[RACScheduler scheduler] schedule:^{ [enabledSubject sendNext:@NO]; }]; expect([command.enabled first]).to(equal(@YES)); expect([command.enabled first]).toEventually(equal(@NO)); expect(updatedScheduler).to(equal(RACScheduler.mainThreadScheduler)); }); qck_it(@"should complete when the command is deallocated even if the input signal hasn't", ^{ __block BOOL deallocated = NO; __block BOOL completed = NO; @autoreleasepool { RACCommand *command __attribute__((objc_precise_lifetime)) = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:emptySignalBlock]; [command.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; [command.enabled subscribeCompleted:^{ completed = YES; }]; } expect(@(deallocated)).toEventually(beTruthy()); expect(@(completed)).toEventually(beTruthy()); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACCompoundDisposableSpec.m ================================================ // // RACCompoundDisposableSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 11/30/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACCompoundDisposable.h" QuickSpecBegin(RACCompoundDisposableSpec) qck_it(@"should dispose of all its contained disposables", ^{ __block BOOL d1Disposed = NO; RACDisposable *d1 = [RACDisposable disposableWithBlock:^{ d1Disposed = YES; }]; __block BOOL d2Disposed = NO; RACDisposable *d2 = [RACDisposable disposableWithBlock:^{ d2Disposed = YES; }]; __block BOOL d3Disposed = NO; RACDisposable *d3 = [RACDisposable disposableWithBlock:^{ d3Disposed = YES; }]; __block BOOL d4Disposed = NO; RACDisposable *d4 = [RACDisposable disposableWithBlock:^{ d4Disposed = YES; }]; RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ d1, d2, d3 ]]; [disposable addDisposable:d4]; expect(@(d1Disposed)).to(beFalsy()); expect(@(d2Disposed)).to(beFalsy()); expect(@(d3Disposed)).to(beFalsy()); expect(@(d4Disposed)).to(beFalsy()); expect(@(disposable.disposed)).to(beFalsy()); [disposable dispose]; expect(@(d1Disposed)).to(beTruthy()); expect(@(d2Disposed)).to(beTruthy()); expect(@(d3Disposed)).to(beTruthy()); expect(@(d4Disposed)).to(beTruthy()); expect(@(disposable.disposed)).to(beTruthy()); }); qck_it(@"should dispose of any added disposables immediately if it's already been disposed", ^{ RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; [disposable dispose]; RACDisposable *d = [[RACDisposable alloc] init]; expect(@(d.disposed)).to(beFalsy()); [disposable addDisposable:d]; expect(@(d.disposed)).to(beTruthy()); }); qck_it(@"should work when initialized with -init", ^{ RACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init]; __block BOOL disposed = NO; RACDisposable *d = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; [disposable addDisposable:d]; expect(@(disposed)).to(beFalsy()); [disposable dispose]; expect(@(disposed)).to(beTruthy()); }); qck_it(@"should work when initialized with +disposableWithBlock:", ^{ __block BOOL compoundDisposed = NO; RACCompoundDisposable *disposable = [RACCompoundDisposable disposableWithBlock:^{ compoundDisposed = YES; }]; __block BOOL disposed = NO; RACDisposable *d = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; [disposable addDisposable:d]; expect(@(disposed)).to(beFalsy()); expect(@(compoundDisposed)).to(beFalsy()); [disposable dispose]; expect(@(disposed)).to(beTruthy()); expect(@(compoundDisposed)).to(beTruthy()); }); qck_it(@"should allow disposables to be removed", ^{ RACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init]; RACDisposable *d = [[RACDisposable alloc] init]; [disposable addDisposable:d]; [disposable removeDisposable:d]; [disposable dispose]; expect(@(d.disposed)).to(beFalsy()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACControlCommandExamples.h ================================================ // // RACControlCommandExamples.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-08-15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // // The name of the shared examples for any control class that has // `rac_command` and `isEnabled` properties. extern NSString * const RACControlCommandExamples; // The control to test. extern NSString * const RACControlCommandExampleControl; // A block of type `void (^)(id control)` which should activate the // `rac_command` of the `control` by manipulating the control itself. extern NSString * const RACControlCommandExampleActivateBlock; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACControlCommandExamples.m ================================================ // // RACControlCommandExamples.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-08-15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACControlCommandExamples.h" #import "RACCommand.h" #import "RACSubject.h" #import "RACUnit.h" NSString * const RACControlCommandExamples = @"RACControlCommandExamples"; NSString * const RACControlCommandExampleControl = @"RACControlCommandExampleControl"; NSString * const RACControlCommandExampleActivateBlock = @"RACControlCommandExampleActivateBlock"; // Methods used by the unit test that would otherwise require platform-specific // imports. @interface NSObject (RACControlCommandExamples) @property (nonatomic, strong) RACCommand *rac_command; - (BOOL)isEnabled; @end QuickConfigurationBegin(RACControlCommandExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACControlCommandExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block id control; __block void (^activate)(id); __block RACSubject *enabledSubject; __block RACCommand *command; qck_beforeEach(^{ control = exampleContext()[RACControlCommandExampleControl]; activate = [exampleContext()[RACControlCommandExampleActivateBlock] copy]; enabledSubject = [RACSubject subject]; command = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:^(id sender) { return [RACSignal return:sender]; }]; [control setRac_command:command]; }); qck_it(@"should bind the control's enabledness to the command", ^{ expect(@([control isEnabled])).toEventually(beTruthy()); [enabledSubject sendNext:@NO]; expect(@([control isEnabled])).toEventually(beFalsy()); [enabledSubject sendNext:@YES]; expect(@([control isEnabled])).toEventually(beTruthy()); }); qck_it(@"should execute the control's command when activated", ^{ __block BOOL executed = NO; [[command.executionSignals flatten] subscribeNext:^(id sender) { expect(sender).to(equal(control)); executed = YES; }]; activate(control); expect(@(executed)).toEventually(beTruthy()); }); qck_it(@"should overwrite an existing command when setting a new one", ^{ RACCommand *secondCommand = [[RACCommand alloc] initWithSignalBlock:^(id _) { return [RACSignal return:RACUnit.defaultUnit]; }]; [control setRac_command:secondCommand]; expect([control rac_command]).to(beIdenticalTo(secondCommand)); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACDelegateProxySpec.m ================================================ // // RACDelegateProxySpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "NSObject+RACSelectorSignal.h" #import "RACDelegateProxy.h" #import "RACSignal.h" #import "RACTuple.h" #import "RACCompoundDisposable.h" #import "NSObject+RACDeallocating.h" @protocol TestDelegateProtocol - (NSUInteger)lengthOfString:(NSString *)str; @end @interface TestDelegate : NSObject @property (nonatomic, assign) BOOL lengthOfStringInvoked; @end QuickSpecBegin(RACDelegateProxySpec) __block id proxy; __block TestDelegate *delegate; __block Protocol *protocol; qck_beforeEach(^{ protocol = @protocol(TestDelegateProtocol); expect(protocol).notTo(beNil()); proxy = [[RACDelegateProxy alloc] initWithProtocol:protocol]; expect(proxy).notTo(beNil()); expect([proxy rac_proxiedDelegate]).to(beNil()); delegate = [[TestDelegate alloc] init]; expect(delegate).notTo(beNil()); }); qck_it(@"should not respond to selectors at first", ^{ expect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beFalsy()); }); qck_it(@"should send on a signal for a protocol method", ^{ __block RACTuple *tuple; [[proxy signalForSelector:@selector(lengthOfString:)] subscribeNext:^(RACTuple *t) { tuple = t; }]; expect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beTruthy()); expect(@([proxy lengthOfString:@"foo"])).to(equal(@0)); expect(tuple).to(equal(RACTuplePack(@"foo"))); }); qck_it(@"should forward to the proxied delegate", ^{ [proxy setRac_proxiedDelegate:delegate]; expect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beTruthy()); expect(@([proxy lengthOfString:@"foo"])).to(equal(@3)); expect(@(delegate.lengthOfStringInvoked)).to(beTruthy()); }); qck_it(@"should not send to the delegate when signals are applied", ^{ [proxy setRac_proxiedDelegate:delegate]; __block RACTuple *tuple; [[proxy signalForSelector:@selector(lengthOfString:)] subscribeNext:^(RACTuple *t) { tuple = t; }]; expect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beTruthy()); expect(@([proxy lengthOfString:@"foo"])).to(equal(@0)); expect(tuple).to(equal(RACTuplePack(@"foo"))); expect(@(delegate.lengthOfStringInvoked)).to(beFalsy()); }); QuickSpecEnd @implementation TestDelegate - (NSUInteger)lengthOfString:(NSString *)str { self.lengthOfStringInvoked = YES; return str.length; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACDisposableSpec.m ================================================ // // RACDisposableSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACDisposable.h" #import "RACScopedDisposable.h" QuickSpecBegin(RACDisposableSpec) qck_it(@"should initialize without a block", ^{ RACDisposable *disposable = [[RACDisposable alloc] init]; expect(disposable).notTo(beNil()); expect(@(disposable.disposed)).to(beFalsy()); [disposable dispose]; expect(@(disposable.disposed)).to(beTruthy()); }); qck_it(@"should execute a block upon disposal", ^{ __block BOOL disposed = NO; RACDisposable *disposable = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; expect(disposable).notTo(beNil()); expect(@(disposed)).to(beFalsy()); expect(@(disposable.disposed)).to(beFalsy()); [disposable dispose]; expect(@(disposed)).to(beTruthy()); expect(@(disposable.disposed)).to(beTruthy()); }); qck_it(@"should not dispose upon deallocation", ^{ __block BOOL disposed = NO; __weak RACDisposable *weakDisposable = nil; @autoreleasepool { RACDisposable *disposable = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; weakDisposable = disposable; expect(weakDisposable).notTo(beNil()); } expect(weakDisposable).to(beNil()); expect(@(disposed)).to(beFalsy()); }); qck_it(@"should create a scoped disposable", ^{ __block BOOL disposed = NO; __weak RACScopedDisposable *weakDisposable = nil; @autoreleasepool { RACScopedDisposable *disposable __attribute__((objc_precise_lifetime)) = [RACScopedDisposable disposableWithBlock:^{ disposed = YES; }]; weakDisposable = disposable; expect(weakDisposable).notTo(beNil()); expect(@(disposed)).to(beFalsy()); } expect(weakDisposable).to(beNil()); expect(@(disposed)).to(beTruthy()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACEventSpec.m ================================================ // // RACEventSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-01-07. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACEvent.h" QuickSpecBegin(RACEventSpec) qck_it(@"should return the singleton completed event", ^{ RACEvent *event = RACEvent.completedEvent; expect(event).notTo(beNil()); expect(event).to(beIdenticalTo(RACEvent.completedEvent)); expect([event copy]).to(beIdenticalTo(event)); expect(@(event.eventType)).to(equal(@(RACEventTypeCompleted))); expect(@(event.finished)).to(beTruthy()); expect(event.error).to(beNil()); expect(event.value).to(beNil()); }); qck_it(@"should return an error event", ^{ NSError *error = [NSError errorWithDomain:@"foo" code:1 userInfo:nil]; RACEvent *event = [RACEvent eventWithError:error]; expect(event).notTo(beNil()); expect(event).to(equal([RACEvent eventWithError:error])); expect([event copy]).to(equal(event)); expect(@(event.eventType)).to(equal(@(RACEventTypeError))); expect(@(event.finished)).to(beTruthy()); expect(event.error).to(equal(error)); expect(event.value).to(beNil()); }); qck_it(@"should return an error event with a nil error", ^{ RACEvent *event = [RACEvent eventWithError:nil]; expect(event).notTo(beNil()); expect(event).to(equal([RACEvent eventWithError:nil])); expect([event copy]).to(equal(event)); expect(@(event.eventType)).to(equal(@(RACEventTypeError))); expect(@(event.finished)).to(beTruthy()); expect(event.error).to(beNil()); expect(event.value).to(beNil()); }); qck_it(@"should return a next event", ^{ NSString *value = @"foo"; RACEvent *event = [RACEvent eventWithValue:value]; expect(event).notTo(beNil()); expect(event).to(equal([RACEvent eventWithValue:value])); expect([event copy]).to(equal(event)); expect(@(event.eventType)).to(equal(@(RACEventTypeNext))); expect(@(event.finished)).to(beFalsy()); expect(event.error).to(beNil()); expect(event.value).to(equal(value)); }); qck_it(@"should return a next event with a nil value", ^{ RACEvent *event = [RACEvent eventWithValue:nil]; expect(event).notTo(beNil()); expect(event).to(equal([RACEvent eventWithValue:nil])); expect([event copy]).to(equal(event)); expect(@(event.eventType)).to(equal(@(RACEventTypeNext))); expect(@(event.finished)).to(beFalsy()); expect(event.error).to(beNil()); expect(event.value).to(beNil()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACKVOChannelSpec.m ================================================ // // RACKVOChannelSpec.m // ReactiveCocoa // // Created by Uri Baghin on 16/12/2012. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" #import "RACChannelExamples.h" #import "RACPropertySignalExamples.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACKVOWrapper.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACKVOChannel.h" #import "RACSignal+Operations.h" QuickSpecBegin(RACKVOChannelSpec) qck_describe(@"RACKVOChannel", ^{ __block RACTestObject *object; __block RACKVOChannel *channel; id value1 = @"test value 1"; id value2 = @"test value 2"; id value3 = @"test value 3"; NSArray *values = @[ value1, value2, value3 ]; qck_beforeEach(^{ object = [[RACTestObject alloc] init]; channel = [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil]; }); id setupBlock = ^(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) { RACKVOChannel *channel = [[RACKVOChannel alloc] initWithTarget:testObject keyPath:keyPath nilValue:nilValue]; [signal subscribe:channel.followingTerminal]; }; qck_itBehavesLike(RACPropertySignalExamples, ^{ return @{ RACPropertySignalExamplesSetupBlock: setupBlock }; }); qck_itBehavesLike(RACChannelExamples, ^{ return @{ RACChannelExampleCreateBlock: [^{ return [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil]; } copy] }; }); qck_it(@"should send the object's current value when subscribed to followingTerminal", ^{ __block id receivedValue = @"received value should not be this"; [[channel.followingTerminal take:1] subscribeNext:^(id x) { receivedValue = x; }]; expect(receivedValue).to(beNil()); object.stringValue = value1; [[channel.followingTerminal take:1] subscribeNext:^(id x) { receivedValue = x; }]; expect(receivedValue).to(equal(value1)); }); qck_it(@"should send the object's new value on followingTerminal when it's changed", ^{ object.stringValue = value1; NSMutableArray *receivedValues = [NSMutableArray array]; [channel.followingTerminal subscribeNext:^(id x) { [receivedValues addObject:x]; }]; object.stringValue = value2; object.stringValue = value3; expect(receivedValues).to(equal(values)); }); qck_it(@"should set the object's value using values sent to the followingTerminal", ^{ expect(object.stringValue).to(beNil()); [channel.followingTerminal sendNext:value1]; expect(object.stringValue).to(equal(value1)); [channel.followingTerminal sendNext:value2]; expect(object.stringValue).to(equal(value2)); }); qck_it(@"should be able to subscribe to signals", ^{ NSMutableArray *receivedValues = [NSMutableArray array]; [object rac_observeKeyPath:@keypath(object.stringValue) options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { [receivedValues addObject:value]; }]; RACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:value1]; [subscriber sendNext:value2]; [subscriber sendNext:value3]; return nil; }]; [signal subscribe:channel.followingTerminal]; expect(receivedValues).to(equal(values)); }); qck_it(@"should complete both terminals when the target deallocates", ^{ __block BOOL leadingCompleted = NO; __block BOOL followingCompleted = NO; __block BOOL deallocated = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocated = YES; }]]; RACKVOChannel *channel = [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil]; [channel.leadingTerminal subscribeCompleted:^{ leadingCompleted = YES; }]; [channel.followingTerminal subscribeCompleted:^{ followingCompleted = YES; }]; expect(@(deallocated)).to(beFalsy()); expect(@(leadingCompleted)).to(beFalsy()); expect(@(followingCompleted)).to(beFalsy()); } expect(@(deallocated)).to(beTruthy()); expect(@(leadingCompleted)).to(beTruthy()); expect(@(followingCompleted)).to(beTruthy()); }); qck_it(@"should deallocate when the target deallocates", ^{ __block BOOL targetDeallocated = NO; __block BOOL channelDeallocated = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ targetDeallocated = YES; }]]; RACKVOChannel *channel = [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil]; [channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ channelDeallocated = YES; }]]; expect(@(targetDeallocated)).to(beFalsy()); expect(@(channelDeallocated)).to(beFalsy()); } expect(@(targetDeallocated)).to(beTruthy()); expect(@(channelDeallocated)).to(beTruthy()); }); }); qck_describe(@"RACChannelTo", ^{ __block RACTestObject *a; __block RACTestObject *b; __block RACTestObject *c; __block NSString *testName1; __block NSString *testName2; __block NSString *testName3; qck_beforeEach(^{ a = [[RACTestObject alloc] init]; b = [[RACTestObject alloc] init]; c = [[RACTestObject alloc] init]; testName1 = @"sync it!"; testName2 = @"sync it again!"; testName3 = @"sync it once more!"; }); qck_it(@"should keep objects' properties in sync", ^{ RACChannelTo(a, stringValue) = RACChannelTo(b, stringValue); expect(a.stringValue).to(beNil()); expect(b.stringValue).to(beNil()); a.stringValue = testName1; expect(a.stringValue).to(equal(testName1)); expect(b.stringValue).to(equal(testName1)); b.stringValue = testName2; expect(a.stringValue).to(equal(testName2)); expect(b.stringValue).to(equal(testName2)); a.stringValue = nil; expect(a.stringValue).to(beNil()); expect(b.stringValue).to(beNil()); }); qck_it(@"should keep properties identified by keypaths in sync", ^{ RACChannelTo(a, strongTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue); a.strongTestObjectValue = [[RACTestObject alloc] init]; b.strongTestObjectValue = [[RACTestObject alloc] init]; a.strongTestObjectValue.stringValue = testName1; expect(a.strongTestObjectValue.stringValue).to(equal(testName1)); expect(b.strongTestObjectValue.stringValue).to(equal(testName1)); expect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue)); b.strongTestObjectValue = nil; expect(a.strongTestObjectValue.stringValue).to(beNil()); c.stringValue = testName2; b.strongTestObjectValue = c; expect(a.strongTestObjectValue.stringValue).to(equal(testName2)); expect(b.strongTestObjectValue.stringValue).to(equal(testName2)); expect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue)); }); qck_it(@"should update properties identified by keypaths when the intermediate values change", ^{ RACChannelTo(a, strongTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue); a.strongTestObjectValue = [[RACTestObject alloc] init]; b.strongTestObjectValue = [[RACTestObject alloc] init]; c.stringValue = testName1; b.strongTestObjectValue = c; expect(a.strongTestObjectValue.stringValue).to(equal(testName1)); expect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue)); }); qck_it(@"should update properties identified by keypaths when the channel was created when one of the two objects had an intermediate nil value", ^{ RACChannelTo(a, strongTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue); b.strongTestObjectValue = [[RACTestObject alloc] init]; c.stringValue = testName1; a.strongTestObjectValue = c; expect(a.strongTestObjectValue.stringValue).to(equal(testName1)); expect(b.strongTestObjectValue.stringValue).to(equal(testName1)); expect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue)); }); qck_it(@"should take the value of the object being bound to at the start", ^{ a.stringValue = testName1; b.stringValue = testName2; RACChannelTo(a, stringValue) = RACChannelTo(b, stringValue); expect(a.stringValue).to(equal(testName2)); expect(b.stringValue).to(equal(testName2)); }); qck_it(@"should update the value even if it's the same value the object had before it was bound", ^{ a.stringValue = testName1; b.stringValue = testName2; RACChannelTo(a, stringValue) = RACChannelTo(b, stringValue); expect(a.stringValue).to(equal(testName2)); expect(b.stringValue).to(equal(testName2)); b.stringValue = testName1; expect(a.stringValue).to(equal(testName1)); expect(b.stringValue).to(equal(testName1)); }); qck_it(@"should bind transitively", ^{ a.stringValue = testName1; b.stringValue = testName2; c.stringValue = testName3; RACChannelTo(a, stringValue) = RACChannelTo(b, stringValue); RACChannelTo(b, stringValue) = RACChannelTo(c, stringValue); expect(a.stringValue).to(equal(testName3)); expect(b.stringValue).to(equal(testName3)); expect(c.stringValue).to(equal(testName3)); c.stringValue = testName1; expect(a.stringValue).to(equal(testName1)); expect(b.stringValue).to(equal(testName1)); expect(c.stringValue).to(equal(testName1)); b.stringValue = testName2; expect(a.stringValue).to(equal(testName2)); expect(b.stringValue).to(equal(testName2)); expect(c.stringValue).to(equal(testName2)); a.stringValue = testName3; expect(a.stringValue).to(equal(testName3)); expect(b.stringValue).to(equal(testName3)); expect(c.stringValue).to(equal(testName3)); }); qck_it(@"should bind changes made by KVC on arrays", ^{ b.arrayValue = @[]; RACChannelTo(a, arrayValue) = RACChannelTo(b, arrayValue); [[b mutableArrayValueForKeyPath:@keypath(b.arrayValue)] addObject:@1]; expect(a.arrayValue).to(equal(b.arrayValue)); }); qck_it(@"should bind changes made by KVC on sets", ^{ b.setValue = [NSSet set]; RACChannelTo(a, setValue) = RACChannelTo(b, setValue); [[b mutableSetValueForKeyPath:@keypath(b.setValue)] addObject:@1]; expect(a.setValue).to(equal(b.setValue)); }); qck_it(@"should bind changes made by KVC on ordered sets", ^{ b.orderedSetValue = [NSOrderedSet orderedSet]; RACChannelTo(a, orderedSetValue) = RACChannelTo(b, orderedSetValue); [[b mutableOrderedSetValueForKeyPath:@keypath(b.orderedSetValue)] addObject:@1]; expect(a.orderedSetValue).to(equal(b.orderedSetValue)); }); qck_it(@"should handle deallocation of intermediate objects correctly even without support from KVO", ^{ __block BOOL wasDisposed = NO; RACChannelTo(a, weakTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue); b.strongTestObjectValue = [[RACTestObject alloc] init]; @autoreleasepool { RACTestObject *object = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ wasDisposed = YES; }]]; a.weakTestObjectValue = object; object.stringValue = testName1; expect(@(wasDisposed)).to(beFalsy()); expect(b.strongTestObjectValue.stringValue).to(equal(testName1)); } expect(@(wasDisposed)).toEventually(beTruthy()); expect(b.strongTestObjectValue.stringValue).to(beNil()); }); qck_it(@"should stop binding when disposed", ^{ RACChannelTerminal *aTerminal = RACChannelTo(a, stringValue); RACChannelTerminal *bTerminal = RACChannelTo(b, stringValue); a.stringValue = testName1; RACDisposable *disposable = [aTerminal subscribe:bTerminal]; expect(a.stringValue).to(equal(testName1)); expect(b.stringValue).to(equal(testName1)); a.stringValue = testName2; expect(a.stringValue).to(equal(testName2)); expect(b.stringValue).to(equal(testName2)); [disposable dispose]; a.stringValue = testName3; expect(a.stringValue).to(equal(testName3)); expect(b.stringValue).to(equal(testName2)); }); qck_it(@"should use the nilValue when sent nil", ^{ RACChannelTerminal *terminal = RACChannelTo(a, integerValue, @5); expect(@(a.integerValue)).to(equal(@0)); [terminal sendNext:@2]; expect(@(a.integerValue)).to(equal(@2)); [terminal sendNext:nil]; expect(@(a.integerValue)).to(equal(@5)); }); qck_it(@"should use the nilValue when an intermediate object is nil", ^{ __block BOOL wasDisposed = NO; RACChannelTo(a, weakTestObjectValue.integerValue, @5) = RACChannelTo(b, strongTestObjectValue.integerValue, @5); b.strongTestObjectValue = [[RACTestObject alloc] init]; @autoreleasepool { RACTestObject *object = [[RACTestObject alloc] init]; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ wasDisposed = YES; }]]; a.weakTestObjectValue = object; object.integerValue = 2; expect(@(wasDisposed)).to(beFalsy()); expect(@(b.strongTestObjectValue.integerValue)).to(equal(@2)); } expect(@(wasDisposed)).toEventually(beTruthy()); expect(@(b.strongTestObjectValue.integerValue)).to(equal(@5)); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACKVOProxySpec.m ================================================ // // RACKVOProxySpec.m // ReactiveCocoa // // Created by Richard Speyer on 4/24/14. // Copyright (c) 2014 GitHub, Inc. All rights reserved. // #import #import #import "RACKVOProxy.h" #import "NSObject+RACKVOWrapper.h" #import "NSObject+RACPropertySubscribing.h" #import "RACSerialDisposable.h" #import "RACSignal+Operations.h" #import "RACScheduler.h" #import "RACSubject.h" @interface TestObject : NSObject { volatile int _testInt; } @property (assign, atomic) int testInt; @end @implementation TestObject - (int)testInt { return _testInt; } // Use manual KVO notifications to avoid any possible race conditions within the // automatic KVO implementation. - (void)setTestInt:(int)value { [self willChangeValueForKey:@keypath(self.testInt)]; _testInt = value; [self didChangeValueForKey:@keypath(self.testInt)]; } + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { return NO; } @end QuickSpecBegin(RACKVOProxySpec) qck_describe(@"RACKVOProxy", ^{ __block TestObject *testObject; __block dispatch_queue_t concurrentQueue; qck_beforeEach(^{ testObject = [[TestObject alloc] init]; concurrentQueue = dispatch_queue_create("org.reactivecocoa.ReactiveCocoa.RACKVOProxySpec.concurrentQueue", DISPATCH_QUEUE_CONCURRENT); }); qck_afterEach(^{ dispatch_barrier_sync(concurrentQueue, ^{ testObject = nil; }); }); qck_describe(@"basic", ^{ qck_it(@"should handle multiple observations on the same value", ^{ __block int observedValue1 = 0; __block int observedValue2 = 0; [[[RACObserve(testObject, testInt) skip:1] take:1] subscribeNext:^(NSNumber *wrappedInt) { observedValue1 = wrappedInt.intValue; }]; [[[RACObserve(testObject, testInt) skip:1] take:1] subscribeNext:^(NSNumber *wrappedInt) { observedValue2 = wrappedInt.intValue; }]; testObject.testInt = 2; expect(@(observedValue1)).toEventually(equal(@2)); expect(@(observedValue2)).toEventually(equal(@2)); }); qck_it(@"can remove individual observation", ^{ __block int observedValue1 = 0; __block int observedValue2 = 0; RACDisposable *disposable1 = [RACObserve(testObject, testInt) subscribeNext:^(NSNumber *wrappedInt) { observedValue1 = wrappedInt.intValue; }]; [RACObserve(testObject, testInt) subscribeNext:^(NSNumber *wrappedInt) { observedValue2 = wrappedInt.intValue; }]; testObject.testInt = 2; expect(@(observedValue1)).toEventually(equal(@2)); expect(@(observedValue2)).toEventually(equal(@2)); [disposable1 dispose]; testObject.testInt = 3; expect(@(observedValue2)).toEventually(equal(@3)); expect(@(observedValue1)).to(equal(@2)); }); }); qck_describe(@"async", ^{ qck_it(@"should handle changes being made on another queue", ^{ __block int observedValue = 0; [[[RACObserve(testObject, testInt) skip:1] take:1] subscribeNext:^(NSNumber *wrappedInt) { observedValue = wrappedInt.intValue; }]; dispatch_async(concurrentQueue, ^{ testObject.testInt = 2; }); dispatch_barrier_sync(concurrentQueue, ^{}); expect(@(observedValue)).toEventually(equal(@2)); }); qck_it(@"should handle changes being made on another queue using deliverOn", ^{ __block int observedValue = 0; [[[[RACObserve(testObject, testInt) skip:1] take:1] deliverOn:[RACScheduler mainThreadScheduler]] subscribeNext:^(NSNumber *wrappedInt) { observedValue = wrappedInt.intValue; }]; dispatch_async(concurrentQueue, ^{ testObject.testInt = 2; }); dispatch_barrier_sync(concurrentQueue, ^{}); expect(@(observedValue)).toEventually(equal(@2)); }); qck_it(@"async disposal of target", ^{ __block int observedValue; [[RACObserve(testObject, testInt) deliverOn:RACScheduler.mainThreadScheduler] subscribeNext:^(NSNumber *wrappedInt) { observedValue = wrappedInt.intValue; }]; dispatch_async(concurrentQueue, ^{ testObject.testInt = 2; testObject = nil; }); dispatch_barrier_sync(concurrentQueue, ^{}); expect(@(observedValue)).toEventually(equal(@2)); }); }); qck_describe(@"stress", ^{ static const size_t numIterations = 5000; __block dispatch_queue_t iterationQueue; beforeEach(^{ iterationQueue = dispatch_queue_create("org.reactivecocoa.ReactiveCocoa.RACKVOProxySpec.iterationQueue", DISPATCH_QUEUE_CONCURRENT); }); // ReactiveCocoa/ReactiveCocoa#1122 qck_it(@"async disposal of observer", ^{ RACSerialDisposable *disposable = [[RACSerialDisposable alloc] init]; dispatch_apply(numIterations, iterationQueue, ^(size_t index) { RACDisposable *newDisposable = [RACObserve(testObject, testInt) subscribeCompleted:^{}]; [[disposable swapInDisposable:newDisposable] dispose]; dispatch_async(concurrentQueue, ^{ testObject.testInt = (int)index; }); }); dispatch_barrier_sync(iterationQueue, ^{ [disposable dispose]; }); }); qck_it(@"async disposal of signal with in-flight changes", ^{ RACSubject *teardown = [RACSubject subject]; RACSignal *isEvenSignal = [[[[RACObserve(testObject, testInt) map:^(NSNumber *wrappedInt) { return @((wrappedInt.intValue % 2) == 0); }] deliverOn:RACScheduler.mainThreadScheduler] takeUntil:teardown] replayLast]; dispatch_apply(numIterations, iterationQueue, ^(size_t index) { testObject.testInt = (int)index; }); dispatch_barrier_async(iterationQueue, ^{ [teardown sendNext:nil]; }); expect(@([isEvenSignal asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); }); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACKVOWrapperSpec.m ================================================ // // RACKVOWrapperSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-08-07. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "NSObject+RACKVOWrapper.h" #import #import "NSObject+RACDeallocating.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACKVOTrampoline.h" #import "RACTestObject.h" @interface RACTestOperation : NSOperation @end // The name of the examples. static NSString * const RACKVOWrapperExamples = @"RACKVOWrapperExamples"; // A block that returns an object to observe in the examples. static NSString * const RACKVOWrapperExamplesTargetBlock = @"RACKVOWrapperExamplesTargetBlock"; // The key path to observe in the examples. // // The key path must have at least one weak property in it. static NSString * const RACKVOWrapperExamplesKeyPath = @"RACKVOWrapperExamplesKeyPath"; // A block that changes the value of a weak property in the observed key path. // The block is passed the object the example is observing and the new value the // weak property should be changed to( static NSString * const RACKVOWrapperExamplesChangeBlock = @"RACKVOWrapperExamplesChangeBlock"; // A block that returns a valid value for the weak property changed by // RACKVOWrapperExamplesChangeBlock. The value must deallocate // normally. static NSString * const RACKVOWrapperExamplesValueBlock = @"RACKVOWrapperExamplesValueBlock"; // Whether RACKVOWrapperExamplesChangeBlock changes the value // of the last key path component in the key path directly. static NSString * const RACKVOWrapperExamplesChangesValueDirectly = @"RACKVOWrapperExamplesChangesValueDirectly"; // The name of the examples. static NSString * const RACKVOWrapperCollectionExamples = @"RACKVOWrapperCollectionExamples"; // A block that returns an object to observe in the examples. static NSString * const RACKVOWrapperCollectionExamplesTargetBlock = @"RACKVOWrapperCollectionExamplesTargetBlock"; // The key path to observe in the examples. // // Must identify a property of type NSOrderedSet. static NSString * const RACKVOWrapperCollectionExamplesKeyPath = @"RACKVOWrapperCollectionExamplesKeyPath"; QuickConfigurationBegin(RACKVOWrapperExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACKVOWrapperExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block NSObject *target = nil; __block NSString *keyPath = nil; __block void (^changeBlock)(NSObject *, id) = nil; __block id (^valueBlock)(void) = nil; __block BOOL changesValueDirectly = NO; __block NSUInteger priorCallCount = 0; __block NSUInteger posteriorCallCount = 0; __block BOOL priorTriggeredByLastKeyPathComponent = NO; __block BOOL posteriorTriggeredByLastKeyPathComponent = NO; __block BOOL posteriorTriggeredByDeallocation = NO; __block void (^callbackBlock)(id, NSDictionary *, BOOL, BOOL) = nil; qck_beforeEach(^{ NSObject * (^targetBlock)(void) = exampleContext()[RACKVOWrapperExamplesTargetBlock]; target = targetBlock(); keyPath = exampleContext()[RACKVOWrapperExamplesKeyPath]; changeBlock = exampleContext()[RACKVOWrapperExamplesChangeBlock]; valueBlock = exampleContext()[RACKVOWrapperExamplesValueBlock]; changesValueDirectly = [exampleContext()[RACKVOWrapperExamplesChangesValueDirectly] boolValue]; priorCallCount = 0; posteriorCallCount = 0; callbackBlock = [^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { if ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) { priorTriggeredByLastKeyPathComponent = affectedOnlyLastComponent; ++priorCallCount; return; } posteriorTriggeredByLastKeyPathComponent = affectedOnlyLastComponent; posteriorTriggeredByDeallocation = causedByDealloc; ++posteriorCallCount; } copy]; }); qck_afterEach(^{ target = nil; keyPath = nil; changeBlock = nil; valueBlock = nil; changesValueDirectly = NO; callbackBlock = nil; }); qck_it(@"should not call the callback block on add if called without NSKeyValueObservingOptionInitial", ^{ [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock]; expect(@(priorCallCount)).to(equal(@0)); expect(@(posteriorCallCount)).to(equal(@0)); }); qck_it(@"should call the callback block on add if called with NSKeyValueObservingOptionInitial", ^{ [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior | NSKeyValueObservingOptionInitial observer:nil block:callbackBlock]; expect(@(priorCallCount)).to(equal(@0)); expect(@(posteriorCallCount)).to(equal(@1)); }); qck_it(@"should call the callback block twice per change, once prior and once posterior", ^{ [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock]; priorCallCount = 0; posteriorCallCount = 0; id value1 = valueBlock(); changeBlock(target, value1); expect(@(priorCallCount)).to(equal(@1)); expect(@(posteriorCallCount)).to(equal(@1)); expect(@(priorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly))); expect(@(posteriorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly))); expect(@(posteriorTriggeredByDeallocation)).to(beFalsy()); id value2 = valueBlock(); changeBlock(target, value2); expect(@(priorCallCount)).to(equal(@2)); expect(@(posteriorCallCount)).to(equal(@2)); expect(@(priorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly))); expect(@(posteriorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly))); expect(@(posteriorTriggeredByDeallocation)).to(beFalsy()); }); qck_it(@"should call the callback block with NSKeyValueChangeNotificationIsPriorKey set before the value is changed, and not set after the value is changed", ^{ __block BOOL priorCalled = NO; __block BOOL posteriorCalled = NO; __block id priorValue = nil; __block id posteriorValue = nil; id value1 = valueBlock(); changeBlock(target, value1); id oldValue = [target valueForKeyPath:keyPath]; [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { if ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) { priorCalled = YES; priorValue = value; expect(@(posteriorCalled)).to(beFalsy()); return; } posteriorCalled = YES; posteriorValue = value; expect(@(priorCalled)).to(beTruthy()); }]; id value2 = valueBlock(); changeBlock(target, value2); id newValue = [target valueForKeyPath:keyPath]; expect(@(priorCalled)).to(beTruthy()); expect(priorValue).to(equal(oldValue)); expect(@(posteriorCalled)).to(beTruthy()); expect(posteriorValue).to(equal(newValue)); }); qck_it(@"should not call the callback block after it's been disposed", ^{ RACDisposable *disposable = [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock]; priorCallCount = 0; posteriorCallCount = 0; [disposable dispose]; expect(@(priorCallCount)).to(equal(@0)); expect(@(posteriorCallCount)).to(equal(@0)); id value = valueBlock(); changeBlock(target, value); expect(@(priorCallCount)).to(equal(@0)); expect(@(posteriorCallCount)).to(equal(@0)); }); qck_it(@"should call the callback block only once with NSKeyValueChangeNotificationIsPriorKey not set when the value is deallocated", ^{ __block BOOL valueDidDealloc = NO; [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock]; @autoreleasepool { NSObject *value __attribute__((objc_precise_lifetime)) = valueBlock(); [value.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ valueDidDealloc = YES; }]]; changeBlock(target, value); priorCallCount = 0; posteriorCallCount = 0; } expect(@(valueDidDealloc)).to(beTruthy()); expect(@(priorCallCount)).to(equal(@0)); expect(@(posteriorCallCount)).to(equal(@1)); expect(@(posteriorTriggeredByDeallocation)).to(beTruthy()); }); }); qck_sharedExamples(RACKVOWrapperCollectionExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block NSObject *target = nil; __block NSString *keyPath = nil; __block NSMutableOrderedSet *mutableKeyPathProxy = nil; __block void (^callbackBlock)(id, NSDictionary *, BOOL, BOOL) = nil; __block id priorValue = nil; __block id posteriorValue = nil; __block NSDictionary *priorChange = nil; __block NSDictionary *posteriorChange = nil; qck_beforeEach(^{ NSObject * (^targetBlock)(void) = exampleContext()[RACKVOWrapperCollectionExamplesTargetBlock]; target = targetBlock(); keyPath = exampleContext()[RACKVOWrapperCollectionExamplesKeyPath]; callbackBlock = [^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { if ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) { priorValue = value; priorChange = change; return; } posteriorValue = value; posteriorChange = change; } copy]; [target setValue:[NSOrderedSet orderedSetWithObject:@0] forKeyPath:keyPath]; [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior observer:nil block:callbackBlock]; mutableKeyPathProxy = [target mutableOrderedSetValueForKeyPath:keyPath]; }); qck_afterEach(^{ target = nil; keyPath = nil; callbackBlock = nil; priorValue = nil; priorChange = nil; posteriorValue = nil; posteriorChange = nil; }); qck_it(@"should support inserting elements into ordered collections", ^{ [mutableKeyPathProxy insertObject:@1 atIndex:0]; expect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]])); expect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:(@[ @1, @0 ])])); expect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion))); expect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion))); expect(priorChange[NSKeyValueChangeOldKey]).to(beNil()); expect(posteriorChange[NSKeyValueChangeNewKey]).to(equal(@[ @1 ])); expect(priorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0])); expect(posteriorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0])); }); qck_it(@"should support removing elements from ordered collections", ^{ [mutableKeyPathProxy removeObjectAtIndex:0]; expect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]])); expect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:@[]])); expect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval))); expect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval))); expect(priorChange[NSKeyValueChangeOldKey]).to(equal(@[ @0 ])); expect(posteriorChange[NSKeyValueChangeNewKey]).to(beNil()); expect(priorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0])); expect(posteriorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0])); }); qck_it(@"should support replacing elements in ordered collections", ^{ [mutableKeyPathProxy replaceObjectAtIndex:0 withObject:@1]; expect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]])); expect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @1 ]])); expect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeReplacement))); expect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeReplacement))); expect(priorChange[NSKeyValueChangeOldKey]).to(equal(@[ @0 ])); expect(posteriorChange[NSKeyValueChangeNewKey]).to(equal(@[ @1 ])); expect(priorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0])); expect(posteriorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0])); }); qck_it(@"should support adding elements to unordered collections", ^{ [mutableKeyPathProxy unionOrderedSet:[NSOrderedSet orderedSetWithObject:@1]]; expect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]])); expect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:(@[ @0, @1 ])])); expect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion))); expect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion))); expect(priorChange[NSKeyValueChangeOldKey]).to(beNil()); expect(posteriorChange[NSKeyValueChangeNewKey]).to(equal(@[ @1 ])); }); qck_it(@"should support removing elements from unordered collections", ^{ [mutableKeyPathProxy minusOrderedSet:[NSOrderedSet orderedSetWithObject:@0]]; expect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]])); expect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:@[]])); expect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval))); expect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval))); expect(priorChange[NSKeyValueChangeOldKey]).to(equal(@[ @0 ])); expect(posteriorChange[NSKeyValueChangeNewKey]).to(beNil()); }); }); } QuickConfigurationEnd QuickSpecBegin(RACKVOWrapperSpec) qck_describe(@"-rac_observeKeyPath:options:observer:block:", ^{ qck_describe(@"on simple keys", ^{ NSObject * (^targetBlock)(void) = ^{ return [[RACTestObject alloc] init]; }; void (^changeBlock)(RACTestObject *, id) = ^(RACTestObject *target, id value) { target.weakTestObjectValue = value; }; id (^valueBlock)(void) = ^{ return [[RACTestObject alloc] init]; }; qck_itBehavesLike(RACKVOWrapperExamples, ^{ return @{ RACKVOWrapperExamplesTargetBlock: targetBlock, RACKVOWrapperExamplesKeyPath: @keypath(RACTestObject.new, weakTestObjectValue), RACKVOWrapperExamplesChangeBlock: changeBlock, RACKVOWrapperExamplesValueBlock: valueBlock, RACKVOWrapperExamplesChangesValueDirectly: @YES }; }); qck_itBehavesLike(RACKVOWrapperCollectionExamples, ^{ return @{ RACKVOWrapperCollectionExamplesTargetBlock: targetBlock, RACKVOWrapperCollectionExamplesKeyPath: @keypath(RACTestObject.new, orderedSetValue) }; }); }); qck_describe(@"on composite key paths'", ^{ qck_describe(@"last key path components", ^{ NSObject *(^targetBlock)(void) = ^{ RACTestObject *object = [[RACTestObject alloc] init]; object.strongTestObjectValue = [[RACTestObject alloc] init]; return object; }; void (^changeBlock)(RACTestObject *, id) = ^(RACTestObject *target, id value) { target.strongTestObjectValue.weakTestObjectValue = value; }; id (^valueBlock)(void) = ^{ return [[RACTestObject alloc] init]; }; qck_itBehavesLike(RACKVOWrapperExamples, ^{ return @{ RACKVOWrapperExamplesTargetBlock: targetBlock, RACKVOWrapperExamplesKeyPath: @keypath(RACTestObject.new, strongTestObjectValue.weakTestObjectValue), RACKVOWrapperExamplesChangeBlock: changeBlock, RACKVOWrapperExamplesValueBlock: valueBlock, RACKVOWrapperExamplesChangesValueDirectly: @YES }; }); qck_itBehavesLike(RACKVOWrapperCollectionExamples, ^{ return @{ RACKVOWrapperCollectionExamplesTargetBlock: targetBlock, RACKVOWrapperCollectionExamplesKeyPath: @keypath(RACTestObject.new, strongTestObjectValue.orderedSetValue) }; }); }); qck_describe(@"intermediate key path components", ^{ NSObject *(^targetBlock)(void) = ^{ return [[RACTestObject alloc] init]; }; void (^changeBlock)(RACTestObject *, id) = ^(RACTestObject *target, id value) { target.weakTestObjectValue = value; }; id (^valueBlock)(void) = ^{ RACTestObject *object = [[RACTestObject alloc] init]; object.strongTestObjectValue = [[RACTestObject alloc] init]; return object; }; qck_itBehavesLike(RACKVOWrapperExamples, ^{ return @{ RACKVOWrapperExamplesTargetBlock: targetBlock, RACKVOWrapperExamplesKeyPath: @keypath([[RACTestObject alloc] init], weakTestObjectValue.strongTestObjectValue), RACKVOWrapperExamplesChangeBlock: changeBlock, RACKVOWrapperExamplesValueBlock: valueBlock, RACKVOWrapperExamplesChangesValueDirectly: @NO }; }); }); qck_it(@"should not notice deallocation of the object returned by a dynamic final property", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id lastValue = nil; @autoreleasepool { [object rac_observeKeyPath:@keypath(object.dynamicObjectProperty) options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { lastValue = value; }]; expect(lastValue).to(beAKindOf(RACTestObject.class)); } expect(lastValue).to(beAKindOf(RACTestObject.class)); }); qck_it(@"should not notice deallocation of the object returned by a dynamic intermediate property", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id lastValue = nil; @autoreleasepool { [object rac_observeKeyPath:@keypath(object.dynamicObjectProperty.integerValue) options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { lastValue = value; }]; expect(lastValue).to(equal(@42)); } expect(lastValue).to(equal(@42)); }); qck_it(@"should not notice deallocation of the object returned by a dynamic method", ^{ RACTestObject *object = [[RACTestObject alloc] init]; __block id lastValue = nil; @autoreleasepool { [object rac_observeKeyPath:@keypath(object.dynamicObjectMethod) options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { lastValue = value; }]; expect(lastValue).to(beAKindOf(RACTestObject.class)); } expect(lastValue).to(beAKindOf(RACTestObject.class)); }); }); qck_it(@"should not call the callback block when the value is the observer", ^{ __block BOOL observerDisposed = NO; __block BOOL observerDeallocationTriggeredChange = NO; __block BOOL targetDisposed = NO; __block BOOL targetDeallocationTriggeredChange = NO; @autoreleasepool { RACTestObject *observer __attribute__((objc_precise_lifetime)) = [RACTestObject new]; [observer.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ observerDisposed = YES; }]]; RACTestObject *target __attribute__((objc_precise_lifetime)) = [RACTestObject new]; [target.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ targetDisposed = YES; }]]; observer.weakTestObjectValue = observer; target.weakTestObjectValue = target; // These observations can only result in dealloc triggered callbacks. [observer rac_observeKeyPath:@keypath(target.weakTestObjectValue) options:0 observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { observerDeallocationTriggeredChange = YES; }]; [target rac_observeKeyPath:@keypath(target.weakTestObjectValue) options:0 observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { targetDeallocationTriggeredChange = YES; }]; } expect(@(observerDisposed)).to(beTruthy()); expect(@(observerDeallocationTriggeredChange)).to(beFalsy()); expect(@(targetDisposed)).to(beTruthy()); expect(@(targetDeallocationTriggeredChange)).to(beTruthy()); }); qck_it(@"should call the callback block for deallocation of the initial value of a single-key key path", ^{ RACTestObject *target = [RACTestObject new]; __block BOOL objectDisposed = NO; __block BOOL objectDeallocationTriggeredChange = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [RACTestObject new]; target.weakTestObjectValue = object; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ objectDisposed = YES; }]]; [target rac_observeKeyPath:@keypath(target.weakTestObjectValue) options:0 observer:target block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { objectDeallocationTriggeredChange = YES; }]; } expect(@(objectDisposed)).to(beTruthy()); expect(@(objectDeallocationTriggeredChange)).to(beTruthy()); }); qck_it(@"should call the callback block for deallocation of an object conforming to protocol property", ^{ RACTestObject *target = [RACTestObject new]; __block BOOL objectDisposed = NO; __block BOOL objectDeallocationTriggeredChange = NO; @autoreleasepool { RACTestObject *object __attribute__((objc_precise_lifetime)) = [RACTestObject new]; target.weakObjectWithProtocol = object; [object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ objectDisposed = YES; }]]; [target rac_observeKeyPath:@keypath(target.weakObjectWithProtocol) options:0 observer:target block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { objectDeallocationTriggeredChange = YES; }]; } expect(@(objectDisposed)).to(beTruthy()); expect(@(objectDeallocationTriggeredChange)).to(beTruthy()); }); }); qck_describe(@"rac_addObserver:forKeyPath:options:block:", ^{ qck_it(@"should add and remove an observer", ^{ NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{}]; expect(operation).notTo(beNil()); __block BOOL notified = NO; RACDisposable *disposable = [operation rac_observeKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { expect([change objectForKey:NSKeyValueChangeNewKey]).to(equal(@YES)); expect(@(notified)).to(beFalsy()); notified = YES; }]; expect(disposable).notTo(beNil()); [operation start]; [operation waitUntilFinished]; expect(@(notified)).toEventually(beTruthy()); }); qck_it(@"should accept a nil observer", ^{ NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{}]; RACDisposable *disposable = [operation rac_observeKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {}]; expect(disposable).notTo(beNil()); }); qck_context(@"automatically stops KVO on subclasses when the target deallocates", ^{ void (^testKVOOnSubclass)(Class targetClass, id observer) = ^(Class targetClass, id observer) { __weak id weakTarget = nil; __weak id identifier = nil; @autoreleasepool { // Create an observable target that we control the memory management of. CFTypeRef target = CFBridgingRetain([[targetClass alloc] init]); expect((__bridge id)target).notTo(beNil()); weakTarget = (__bridge id)target; expect(weakTarget).notTo(beNil()); identifier = [(__bridge id)target rac_observeKeyPath:@"isFinished" options:0 observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {}]; expect(identifier).notTo(beNil()); CFRelease(target); } expect(weakTarget).to(beNil()); expect(identifier).to(beNil()); }; qck_it(@"stops KVO on NSObject subclasses", ^{ testKVOOnSubclass(NSOperation.class, self); }); qck_it(@"stops KVO on subclasses of already-swizzled classes", ^{ testKVOOnSubclass(RACTestOperation.class, self); }); qck_it(@"stops KVO on NSObject subclasses even with a nil observer", ^{ testKVOOnSubclass(NSOperation.class, nil); }); qck_it(@"stops KVO on subclasses of already-swizzled classes even with a nil observer", ^{ testKVOOnSubclass(RACTestOperation.class, nil); }); }); qck_it(@"should automatically stop KVO when the observer deallocates", ^{ __weak id weakObserver = nil; __weak id weakIdentifier = nil; NSOperation *operation = [[NSOperation alloc] init]; @autoreleasepool { // Create an observer that we control the memory management of. CFTypeRef observer = CFBridgingRetain([[NSOperation alloc] init]); expect((__bridge id)observer).notTo(beNil()); weakObserver = (__bridge id)observer; expect(weakObserver).notTo(beNil()); id identifier = [operation rac_observeKeyPath:@"isFinished" options:0 observer:(__bridge id)observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {}]; expect(identifier).notTo(beNil()); weakIdentifier = identifier; expect(weakIdentifier).notTo(beNil()); CFRelease(observer); } expect(weakObserver).to(beNil()); expect(weakIdentifier).to(beNil()); }); qck_it(@"should stop KVO when the observer is disposed", ^{ NSOperationQueue *queue = [[NSOperationQueue alloc] init]; __block NSString *name = nil; RACDisposable *disposable = [queue rac_observeKeyPath:@"name" options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { name = queue.name; }]; queue.name = @"1"; expect(name).to(equal(@"1")); [disposable dispose]; queue.name = @"2"; expect(name).to(equal(@"1")); }); qck_it(@"should distinguish between observers being disposed", ^{ NSOperationQueue *queue = [[NSOperationQueue alloc] init]; __block NSString *name1 = nil; __block NSString *name2 = nil; RACDisposable *disposable = [queue rac_observeKeyPath:@"name" options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { name1 = queue.name; }]; [queue rac_observeKeyPath:@"name" options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { name2 = queue.name; }]; queue.name = @"1"; expect(name1).to(equal(@"1")); expect(name2).to(equal(@"1")); [disposable dispose]; queue.name = @"2"; expect(name1).to(equal(@"1")); expect(name2).to(equal(@"2")); }); }); QuickSpecEnd @implementation RACTestOperation @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACMulticastConnectionSpec.m ================================================ // // RACMulticastConnectionSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 10/8/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACMulticastConnection.h" #import "RACDisposable.h" #import "RACSignal+Operations.h" #import "RACSubscriber.h" #import "RACReplaySubject.h" #import "RACScheduler.h" #import QuickSpecBegin(RACMulticastConnectionSpec) __block NSUInteger subscriptionCount = 0; __block RACMulticastConnection *connection; qck_beforeEach(^{ subscriptionCount = 0; connection = [[RACSignal createSignal:^(id subscriber) { subscriptionCount++; return (RACDisposable *)nil; }] publish]; expect(@(subscriptionCount)).to(equal(@0)); }); qck_describe(@"-connect", ^{ qck_it(@"should subscribe to the underlying signal", ^{ [connection connect]; expect(@(subscriptionCount)).to(equal(@1)); }); qck_it(@"should return the same disposable for each invocation", ^{ RACDisposable *d1 = [connection connect]; RACDisposable *d2 = [connection connect]; expect(d1).to(equal(d2)); expect(@(subscriptionCount)).to(equal(@1)); }); qck_it(@"shouldn't reconnect after disposal", ^{ RACDisposable *disposable1 = [connection connect]; expect(@(subscriptionCount)).to(equal(@1)); [disposable1 dispose]; RACDisposable *disposable2 = [connection connect]; expect(@(subscriptionCount)).to(equal(@1)); expect(disposable1).to(equal(disposable2)); }); qck_it(@"shouldn't race when connecting", ^{ dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); RACMulticastConnection *connection = [[RACSignal defer:^ id { dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); return nil; }] publish]; __block RACDisposable *disposable; [RACScheduler.scheduler schedule:^{ disposable = [connection connect]; dispatch_semaphore_signal(semaphore); }]; expect([connection connect]).notTo(beNil()); dispatch_semaphore_signal(semaphore); expect(disposable).toEventuallyNot(beNil()); }); }); qck_describe(@"-autoconnect", ^{ __block RACSignal *autoconnectedSignal; qck_beforeEach(^{ autoconnectedSignal = [connection autoconnect]; }); qck_it(@"should subscribe to the multicasted signal on the first subscription", ^{ expect(@(subscriptionCount)).to(equal(@0)); [autoconnectedSignal subscribeNext:^(id x) {}]; expect(@(subscriptionCount)).to(equal(@1)); [autoconnectedSignal subscribeNext:^(id x) {}]; expect(@(subscriptionCount)).to(equal(@1)); }); qck_it(@"should dispose of the multicasted subscription when the signal has no subscribers", ^{ __block BOOL disposed = NO; __block id connectionSubscriber = nil; RACSignal *signal = [[[RACSignal createSignal:^(id subscriber) { // Keep the subscriber alive so it doesn't trigger disposal on dealloc connectionSubscriber = subscriber; subscriptionCount++; return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }] publish] autoconnect]; RACDisposable *disposable = [signal subscribeNext:^(id x) {}]; expect(@(disposed)).to(beFalsy()); [disposable dispose]; expect(@(disposed)).to(beTruthy()); }); qck_it(@"shouldn't reconnect after disposal", ^{ RACDisposable *disposable = [autoconnectedSignal subscribeNext:^(id x) {}]; expect(@(subscriptionCount)).to(equal(@1)); [disposable dispose]; disposable = [autoconnectedSignal subscribeNext:^(id x) {}]; expect(@(subscriptionCount)).to(equal(@1)); [disposable dispose]; }); qck_it(@"should replay values after disposal when multicasted to a replay subject", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [[subject multicast:[RACReplaySubject subject]] autoconnect]; NSMutableArray *results1 = [NSMutableArray array]; RACDisposable *disposable = [signal subscribeNext:^(id x) { [results1 addObject:x]; }]; [subject sendNext:@1]; [subject sendNext:@2]; expect(results1).to(equal((@[ @1, @2 ]))); [disposable dispose]; NSMutableArray *results2 = [NSMutableArray array]; [signal subscribeNext:^(id x) { [results2 addObject:x]; }]; expect(results2).toEventually(equal((@[ @1, @2 ]))); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACPropertySignalExamples.h ================================================ // // RACPropertySignalExamples.h // ReactiveCocoa // // Created by Josh Abernathy on 9/28/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // // The name of the shared examples for a signal-driven property. extern NSString * const RACPropertySignalExamples; // The block should have the signature: // // void (^)(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) // // and should tie the value of the key path on testObject to signal. `nilValue` // will be used when the signal sends a `nil` value. extern NSString * const RACPropertySignalExamplesSetupBlock; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACPropertySignalExamples.m ================================================ // // RACPropertySignalExamples.m // ReactiveCocoa // // Created by Josh Abernathy on 9/28/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "NSObject+RACSelectorSignal.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSubject.h" NSString * const RACPropertySignalExamples = @"RACPropertySignalExamples"; NSString * const RACPropertySignalExamplesSetupBlock = @"RACPropertySignalExamplesSetupBlock"; QuickConfigurationBegin(RACPropertySignalExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACPropertySignalExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block RACTestObject *testObject = nil; __block void (^setupBlock)(RACTestObject *, NSString *keyPath, id nilValue, RACSignal *); qck_beforeEach(^{ setupBlock = exampleContext()[RACPropertySignalExamplesSetupBlock]; testObject = [[RACTestObject alloc] init]; }); qck_it(@"should set the value of the property with the latest value from the signal", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.objectValue), nil, subject); expect(testObject.objectValue).to(beNil()); [subject sendNext:@1]; expect(testObject.objectValue).to(equal(@1)); [subject sendNext:@2]; expect(testObject.objectValue).to(equal(@2)); [subject sendNext:nil]; expect(testObject.objectValue).to(beNil()); }); qck_it(@"should set the given nilValue for an object property", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.objectValue), @"foo", subject); expect(testObject.objectValue).to(beNil()); [subject sendNext:@1]; expect(testObject.objectValue).to(equal(@1)); [subject sendNext:@2]; expect(testObject.objectValue).to(equal(@2)); [subject sendNext:nil]; expect(testObject.objectValue).to(equal(@"foo")); }); qck_it(@"should leave the value of the property alone after the signal completes", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.objectValue), nil, subject); expect(testObject.objectValue).to(beNil()); [subject sendNext:@1]; expect(testObject.objectValue).to(equal(@1)); [subject sendCompleted]; expect(testObject.objectValue).to(equal(@1)); }); qck_it(@"should set the value of a non-object property with the latest value from the signal", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.integerValue), nil, subject); expect(@(testObject.integerValue)).to(equal(@0)); [subject sendNext:@1]; expect(@(testObject.integerValue)).to(equal(@1)); [subject sendNext:@2]; expect(@(testObject.integerValue)).to(equal(@2)); [subject sendNext:@0]; expect(@(testObject.integerValue)).to(equal(@0)); }); qck_it(@"should set the given nilValue for a non-object property", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.integerValue), @42, subject); expect(@(testObject.integerValue)).to(equal(@0)); [subject sendNext:@1]; expect(@(testObject.integerValue)).to(equal(@1)); [subject sendNext:@2]; expect(@(testObject.integerValue)).to(equal(@2)); [subject sendNext:nil]; expect(@(testObject.integerValue)).to(equal(@42)); }); qck_it(@"should not invoke -setNilValueForKey: with a nilValue", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.integerValue), @42, subject); __block BOOL setNilValueForKeyInvoked = NO; [[testObject rac_signalForSelector:@selector(setNilValueForKey:)] subscribeNext:^(NSString *key) { setNilValueForKeyInvoked = YES; }]; [subject sendNext:nil]; expect(@(testObject.integerValue)).to(equal(@42)); expect(@(setNilValueForKeyInvoked)).to(beFalsy()); }); qck_it(@"should invoke -setNilValueForKey: without a nilValue", ^{ RACSubject *subject = [RACSubject subject]; setupBlock(testObject, @keypath(testObject.integerValue), nil, subject); [subject sendNext:@1]; expect(@(testObject.integerValue)).to(equal(@1)); testObject.catchSetNilValueForKey = YES; __block BOOL setNilValueForKeyInvoked = NO; [[testObject rac_signalForSelector:@selector(setNilValueForKey:)] subscribeNext:^(NSString *key) { setNilValueForKeyInvoked = YES; }]; [subject sendNext:nil]; expect(@(testObject.integerValue)).to(equal(@1)); expect(@(setNilValueForKeyInvoked)).to(beTruthy()); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSchedulerSpec.m ================================================ // // RACSchedulerSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 11/29/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACScheduler.h" #import "RACScheduler+Private.h" #import "RACQueueScheduler+Subclass.h" #import "RACDisposable.h" #import #import "RACTestExampleScheduler.h" #import // This shouldn't be used directly. Use the `expectCurrentSchedulers` block // below instead. static void expectCurrentSchedulersInner(NSArray *schedulers, NSMutableArray *currentSchedulerArray) { if (schedulers.count > 0) { RACScheduler *topScheduler = schedulers[0]; [topScheduler schedule:^{ RACScheduler *currentScheduler = RACScheduler.currentScheduler; if (currentScheduler != nil) [currentSchedulerArray addObject:currentScheduler]; expectCurrentSchedulersInner([schedulers subarrayWithRange:NSMakeRange(1, schedulers.count - 1)], currentSchedulerArray); }]; } } QuickSpecBegin(RACSchedulerSpec) qck_it(@"should know its current scheduler", ^{ // Recursively schedules a block in each of the given schedulers and records // the +currentScheduler at each step. It then expects the array of // +currentSchedulers and the expected array to be equal. // // schedulers - The array of schedulers to recursively schedule. // expectedCurrentSchedulers - The array of +currentSchedulers to expect. void (^expectCurrentSchedulers)(NSArray *, NSArray *) = ^(NSArray *schedulers, NSArray *expectedCurrentSchedulers) { NSMutableArray *currentSchedulerArray = [NSMutableArray array]; expectCurrentSchedulersInner(schedulers, currentSchedulerArray); expect(currentSchedulerArray).toEventually(equal(expectedCurrentSchedulers)); }; RACScheduler *backgroundScheduler = [RACScheduler scheduler]; expectCurrentSchedulers(@[ backgroundScheduler, RACScheduler.immediateScheduler ], @[ backgroundScheduler, backgroundScheduler ]); expectCurrentSchedulers(@[ backgroundScheduler, RACScheduler.subscriptionScheduler ], @[ backgroundScheduler, backgroundScheduler ]); NSArray *mainThreadJumper = @[ RACScheduler.mainThreadScheduler, backgroundScheduler, RACScheduler.mainThreadScheduler ]; expectCurrentSchedulers(mainThreadJumper, mainThreadJumper); NSArray *backgroundJumper = @[ backgroundScheduler, RACScheduler.mainThreadScheduler, backgroundScheduler ]; expectCurrentSchedulers(backgroundJumper, backgroundJumper); }); qck_describe(@"+mainThreadScheduler", ^{ qck_it(@"should cancel scheduled blocks when disposed", ^{ __block BOOL firstBlockRan = NO; __block BOOL secondBlockRan = NO; RACDisposable *disposable = [RACScheduler.mainThreadScheduler schedule:^{ firstBlockRan = YES; }]; expect(disposable).notTo(beNil()); [RACScheduler.mainThreadScheduler schedule:^{ secondBlockRan = YES; }]; [disposable dispose]; expect(@(secondBlockRan)).to(beFalsy()); expect(@(secondBlockRan)).toEventually(beTruthy()); expect(@(firstBlockRan)).to(beFalsy()); }); qck_it(@"should schedule future blocks", ^{ __block BOOL done = NO; [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{ done = YES; }]; expect(@(done)).to(beFalsy()); expect(@(done)).toEventually(beTruthy()); }); qck_it(@"should cancel future blocks when disposed", ^{ __block BOOL firstBlockRan = NO; __block BOOL secondBlockRan = NO; RACDisposable *disposable = [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{ firstBlockRan = YES; }]; expect(disposable).notTo(beNil()); [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{ secondBlockRan = YES; }]; [disposable dispose]; expect(@(secondBlockRan)).to(beFalsy()); expect(@(secondBlockRan)).toEventually(beTruthy()); expect(@(firstBlockRan)).to(beFalsy()); }); qck_it(@"should schedule recurring blocks", ^{ __block NSUInteger count = 0; RACDisposable *disposable = [RACScheduler.mainThreadScheduler after:[NSDate date] repeatingEvery:0.05 withLeeway:0 schedule:^{ count++; }]; expect(@(count)).to(equal(@0)); expect(@(count)).toEventually(beGreaterThanOrEqualTo(@1)); expect(@(count)).toEventually(beGreaterThanOrEqualTo(@2)); expect(@(count)).toEventually(beGreaterThanOrEqualTo(@3)); [disposable dispose]; [NSRunLoop.mainRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; expect(@(count)).to(beGreaterThanOrEqualTo(@3)); }); }); qck_describe(@"+scheduler", ^{ __block RACScheduler *scheduler; __block NSDate * (^futureDate)(void); qck_beforeEach(^{ scheduler = [RACScheduler scheduler]; futureDate = ^{ return [NSDate dateWithTimeIntervalSinceNow:0.01]; }; }); qck_it(@"should cancel scheduled blocks when disposed", ^{ __block BOOL firstBlockRan = NO; __block BOOL secondBlockRan = NO; // Start off on the scheduler so the enqueued blocks won't run until we // return. [scheduler schedule:^{ RACDisposable *disposable = [scheduler schedule:^{ firstBlockRan = YES; }]; expect(disposable).notTo(beNil()); [scheduler schedule:^{ secondBlockRan = YES; }]; [disposable dispose]; }]; expect(@(secondBlockRan)).toEventually(beTruthy()); expect(@(firstBlockRan)).to(beFalsy()); }); qck_it(@"should schedule future blocks", ^{ __block BOOL done = NO; [scheduler after:futureDate() schedule:^{ done = YES; }]; expect(@(done)).to(beFalsy()); expect(@(done)).toEventually(beTruthy()); }); qck_it(@"should cancel future blocks when disposed", ^{ __block BOOL firstBlockRan = NO; __block BOOL secondBlockRan = NO; NSDate *date = futureDate(); RACDisposable *disposable = [scheduler after:date schedule:^{ firstBlockRan = YES; }]; expect(disposable).notTo(beNil()); [disposable dispose]; [scheduler after:date schedule:^{ secondBlockRan = YES; }]; expect(@(secondBlockRan)).to(beFalsy()); expect(@(secondBlockRan)).toEventually(beTruthy()); expect(@(firstBlockRan)).to(beFalsy()); }); qck_it(@"should schedule recurring blocks", ^{ __block NSUInteger count = 0; RACDisposable *disposable = [scheduler after:[NSDate date] repeatingEvery:0.05 withLeeway:0 schedule:^{ count++; }]; expect(@(count)).to(beGreaterThanOrEqualTo(@0)); expect(@(count)).toEventually(beGreaterThanOrEqualTo(@1)); expect(@(count)).toEventually(beGreaterThanOrEqualTo(@2)); expect(@(count)).toEventually(beGreaterThanOrEqualTo(@3)); [disposable dispose]; [NSThread sleepForTimeInterval:0.1]; expect(@(count)).to(beGreaterThanOrEqualTo(@3)); }); }); qck_describe(@"+subscriptionScheduler", ^{ qck_describe(@"setting +currentScheduler", ^{ __block RACScheduler *currentScheduler; qck_beforeEach(^{ currentScheduler = nil; }); qck_it(@"should be the +mainThreadScheduler when scheduled from the main queue", ^{ dispatch_async(dispatch_get_main_queue(), ^{ [RACScheduler.subscriptionScheduler schedule:^{ currentScheduler = RACScheduler.currentScheduler; }]; }); expect(currentScheduler).toEventually(equal(RACScheduler.mainThreadScheduler)); }); qck_it(@"should be a +scheduler when scheduled from an unknown queue", ^{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [RACScheduler.subscriptionScheduler schedule:^{ currentScheduler = RACScheduler.currentScheduler; }]; }); expect(currentScheduler).toEventuallyNot(beNil()); expect(currentScheduler).notTo(equal(RACScheduler.mainThreadScheduler)); }); qck_it(@"should equal the background scheduler from which the block was scheduled", ^{ RACScheduler *backgroundScheduler = [RACScheduler scheduler]; [backgroundScheduler schedule:^{ [RACScheduler.subscriptionScheduler schedule:^{ currentScheduler = RACScheduler.currentScheduler; }]; }]; expect(currentScheduler).toEventually(equal(backgroundScheduler)); }); }); qck_it(@"should execute scheduled blocks immediately if it's in a scheduler already", ^{ __block BOOL done = NO; __block BOOL executedImmediately = NO; [[RACScheduler scheduler] schedule:^{ [RACScheduler.subscriptionScheduler schedule:^{ executedImmediately = YES; }]; done = YES; }]; expect(@(done)).toEventually(beTruthy()); expect(@(executedImmediately)).to(beTruthy()); }); }); qck_describe(@"+immediateScheduler", ^{ qck_it(@"should immediately execute scheduled blocks", ^{ __block BOOL executed = NO; RACDisposable *disposable = [RACScheduler.immediateScheduler schedule:^{ executed = YES; }]; expect(disposable).to(beNil()); expect(@(executed)).to(beTruthy()); }); qck_it(@"should block for future scheduled blocks", ^{ __block BOOL executed = NO; RACDisposable *disposable = [RACScheduler.immediateScheduler after:[NSDate dateWithTimeIntervalSinceNow:0.01] schedule:^{ executed = YES; }]; expect(@(executed)).to(beTruthy()); expect(disposable).to(beNil()); }); }); qck_describe(@"-scheduleRecursiveBlock:", ^{ qck_describe(@"with a synchronous scheduler", ^{ qck_it(@"should behave like a normal block when it doesn't invoke itself", ^{ __block BOOL executed = NO; [RACScheduler.immediateScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { expect(@(executed)).to(beFalsy()); executed = YES; }]; expect(@(executed)).to(beTruthy()); }); qck_it(@"should reschedule itself after the caller completes", ^{ __block NSUInteger count = 0; [RACScheduler.immediateScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { NSUInteger thisCount = ++count; if (thisCount < 3) { recurse(); // The block shouldn't have been invoked again yet, only // scheduled. expect(@(count)).to(equal(@(thisCount))); } }]; expect(@(count)).to(equal(@3)); }); qck_it(@"should unroll deep recursion", ^{ static const NSUInteger depth = 100000; __block NSUInteger scheduleCount = 0; [RACScheduler.immediateScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { scheduleCount++; if (scheduleCount < depth) recurse(); }]; expect(@(scheduleCount)).to(equal(@(depth))); }); }); qck_describe(@"with an asynchronous scheduler", ^{ qck_it(@"should behave like a normal block when it doesn't invoke itself", ^{ __block BOOL executed = NO; [RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { expect(@(executed)).to(beFalsy()); executed = YES; }]; expect(@(executed)).toEventually(beTruthy()); }); qck_it(@"should reschedule itself after the caller completes", ^{ __block NSUInteger count = 0; [RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { NSUInteger thisCount = ++count; if (thisCount < 3) { recurse(); // The block shouldn't have been invoked again yet, only // scheduled. expect(@(count)).to(equal(@(thisCount))); } }]; expect(@(count)).toEventually(equal(@3)); }); qck_it(@"should reschedule when invoked asynchronously", ^{ __block NSUInteger count = 0; RACScheduler *asynchronousScheduler = [RACScheduler scheduler]; [RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { [asynchronousScheduler after:[NSDate dateWithTimeIntervalSinceNow:0.01] schedule:^{ NSUInteger thisCount = ++count; if (thisCount < 3) { recurse(); // The block shouldn't have been invoked again yet, only // scheduled. expect(@(count)).to(equal(@(thisCount))); } }]; }]; expect(@(count)).toEventually(equal(@3)); }); qck_it(@"shouldn't reschedule itself when disposed", ^{ __block NSUInteger count = 0; __block RACDisposable *disposable = [RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) { ++count; expect(disposable).notTo(beNil()); [disposable dispose]; recurse(); }]; expect(@(count)).toEventually(equal(@1)); }); }); }); qck_describe(@"subclassing", ^{ __block RACTestExampleScheduler *scheduler; qck_beforeEach(^{ scheduler = [[RACTestExampleScheduler alloc] initWithQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)]; }); qck_it(@"should invoke blocks scheduled with -schedule:", ^{ __block BOOL invoked = NO; [scheduler schedule:^{ invoked = YES; }]; expect(@(invoked)).toEventually(beTruthy()); }); qck_it(@"should invoke blocks scheduled with -after:schedule:", ^{ __block BOOL invoked = NO; [scheduler after:[NSDate dateWithTimeIntervalSinceNow:0.01] schedule:^{ invoked = YES; }]; expect(@(invoked)).toEventually(beTruthy()); }); qck_it(@"should set a valid current scheduler", ^{ __block RACScheduler *currentScheduler; [scheduler schedule:^{ currentScheduler = RACScheduler.currentScheduler; }]; expect(currentScheduler).toEventually(equal(scheduler)); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceAdditionsSpec.m ================================================ // // RACSequenceAdditionsSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-01. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACSequenceExamples.h" #import "NSArray+RACSequenceAdditions.h" #import "NSDictionary+RACSequenceAdditions.h" #import "NSOrderedSet+RACSequenceAdditions.h" #import "NSSet+RACSequenceAdditions.h" #import "NSString+RACSequenceAdditions.h" #import "NSIndexSet+RACSequenceAdditions.h" #import "RACSequence.h" #import "RACTuple.h" QuickSpecBegin(RACSequenceAdditionsSpec) __block NSArray *numbers; qck_beforeEach(^{ NSMutableArray *mutableNumbers = [NSMutableArray array]; for (NSUInteger i = 0; i < 100; i++) { [mutableNumbers addObject:@(i)]; } numbers = [mutableNumbers copy]; }); qck_describe(@"NSArray sequences", ^{ __block NSMutableArray *values; __block RACSequence *sequence; qck_beforeEach(^{ values = [numbers mutableCopy]; sequence = values.rac_sequence; expect(sequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: values }; }); qck_describe(@"should be immutable", ^{ __block NSArray *unchangedValues; qck_beforeEach(^{ unchangedValues = [values copy]; [values addObject:@6]; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: unchangedValues }; }); }); qck_it(@"should fast enumerate after zipping", ^{ // This certain list of values causes issues, for some reason. NSArray *values = @[ @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0 ]; RACSequence *zippedSequence = [RACSequence zip:@[ values.rac_sequence, values.rac_sequence ] reduce:^(id obj1, id obj2) { return obj1; }]; NSMutableArray *collectedValues = [NSMutableArray array]; for (id value in zippedSequence) { [collectedValues addObject:value]; } expect(collectedValues).to(equal(values)); }); }); qck_describe(@"NSDictionary sequences", ^{ __block NSMutableDictionary *dict; __block NSMutableArray *tuples; __block RACSequence *tupleSequence; __block NSArray *keys; __block RACSequence *keySequence; __block NSArray *values; __block RACSequence *valueSequence; qck_beforeEach(^{ dict = [@{ @"foo": @"bar", @"baz": @"buzz", @5: NSNull.null } mutableCopy]; tuples = [NSMutableArray array]; for (id key in dict) { RACTuple *tuple = RACTuplePack(key, dict[key]); [tuples addObject:tuple]; } tupleSequence = dict.rac_sequence; expect(tupleSequence).notTo(beNil()); keys = [dict.allKeys copy]; keySequence = dict.rac_keySequence; expect(keySequence).notTo(beNil()); values = [dict.allValues copy]; valueSequence = dict.rac_valueSequence; expect(valueSequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: tupleSequence, RACSequenceExampleExpectedValues: tuples }; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: keySequence, RACSequenceExampleExpectedValues: keys }; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: valueSequence, RACSequenceExampleExpectedValues: values }; }); qck_describe(@"should be immutable", ^{ qck_beforeEach(^{ dict[@"foo"] = @"rab"; dict[@6] = @7; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: tupleSequence, RACSequenceExampleExpectedValues: tuples }; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: keySequence, RACSequenceExampleExpectedValues: keys }; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: valueSequence, RACSequenceExampleExpectedValues: values }; }); }); }); qck_describe(@"NSOrderedSet sequences", ^{ __block NSMutableOrderedSet *values; __block RACSequence *sequence; qck_beforeEach(^{ values = [NSMutableOrderedSet orderedSetWithArray:numbers]; sequence = values.rac_sequence; expect(sequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: values.array }; }); qck_describe(@"should be immutable", ^{ __block NSArray *unchangedValues; qck_beforeEach(^{ unchangedValues = [values.array copy]; [values addObject:@6]; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: unchangedValues }; }); }); }); qck_describe(@"NSSet sequences", ^{ __block NSMutableSet *values; __block RACSequence *sequence; qck_beforeEach(^{ values = [NSMutableSet setWithArray:numbers]; sequence = values.rac_sequence; expect(sequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: values.allObjects }; }); qck_describe(@"should be immutable", ^{ __block NSArray *unchangedValues; qck_beforeEach(^{ unchangedValues = [values.allObjects copy]; [values addObject:@6]; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: unchangedValues }; }); }); }); qck_describe(@"NSString sequences", ^{ __block NSMutableString *string; __block NSArray *values; __block RACSequence *sequence; qck_beforeEach(^{ string = [@"foobar" mutableCopy]; values = @[ @"f", @"o", @"o", @"b", @"a", @"r" ]; sequence = string.rac_sequence; expect(sequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: values }; }); qck_describe(@"should be immutable", ^{ qck_beforeEach(^{ [string appendString:@"buzz"]; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: values }; }); }); qck_it(@"should work with composed characters", ^{ NSString *string = @"\u2665\uFE0F\u2666\uFE0F"; NSArray *expectedSequence = @[ @"\u2665\uFE0F", @"\u2666\uFE0F" ]; expect(string.rac_sequence.array).to(equal(expectedSequence)); }); }); qck_describe(@"RACTuple sequences", ^{ __block RACTuple *tuple; __block RACSequence *sequence; qck_beforeEach(^{ tuple = RACTuplePack(@"foo", nil, @"bar", NSNull.null, RACTupleNil.tupleNil); sequence = tuple.rac_sequence; expect(sequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: @[ @"foo", NSNull.null, @"bar", NSNull.null, NSNull.null ] }; }); }); qck_describe(@"NSIndexSet sequences", ^{ __block NSMutableIndexSet *values; __block RACSequence *sequence; NSArray * (^valuesFromIndexSet)(NSIndexSet *indexSet) = ^NSArray *(NSIndexSet *indexSet) { NSMutableArray *arr = [NSMutableArray array]; [indexSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { [arr addObject:@(idx)]; }]; return [arr copy]; }; qck_beforeEach(^{ values = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 10)]; sequence = values.rac_sequence; expect(sequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: valuesFromIndexSet(values) }; }); qck_describe(@"should be immutable", ^{ __block NSArray *unchangedValues; qck_beforeEach(^{ unchangedValues = valuesFromIndexSet(values); [values addIndex:20]; }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: unchangedValues }; }); }); qck_describe(@"should not fire if empty", ^{ __block NSIndexSet *emptyIndexSet; __block RACSequence *emptySequence; qck_beforeEach(^{ emptyIndexSet = [NSIndexSet indexSet]; emptySequence = emptyIndexSet.rac_sequence; expect(emptySequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: emptySequence, RACSequenceExampleExpectedValues: valuesFromIndexSet(emptyIndexSet) }; }); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceExamples.h ================================================ // // RACSequenceExamples.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-01. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // // The name of the shared examples for RACSequence instances. extern NSString * const RACSequenceExamples; // RACSequence * extern NSString * const RACSequenceExampleSequence; // NSArray * extern NSString * const RACSequenceExampleExpectedValues; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceExamples.m ================================================ // // RACSequenceExamples.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-01. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACSequenceExamples.h" #import "RACScheduler.h" #import "RACSequence.h" #import "RACSignal+Operations.h" NSString * const RACSequenceExamples = @"RACSequenceExamples"; NSString * const RACSequenceExampleSequence = @"RACSequenceExampleSequence"; NSString * const RACSequenceExampleExpectedValues = @"RACSequenceExampleExpectedValues"; QuickConfigurationBegin(RACSequenceExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACSequenceExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block RACSequence *sequence; __block NSArray *values; qck_beforeEach(^{ sequence = exampleContext()[RACSequenceExampleSequence]; values = [exampleContext()[RACSequenceExampleExpectedValues] copy]; }); qck_it(@"should implement ", ^{ NSMutableArray *collectedValues = [NSMutableArray array]; for (id value in sequence) { [collectedValues addObject:value]; } expect(collectedValues).to(equal(values)); }); qck_it(@"should return an array", ^{ expect(sequence.array).to(equal(values)); }); qck_describe(@"-signalWithScheduler:", ^{ qck_it(@"should return an immediately scheduled signal", ^{ RACSignal *signal = [sequence signalWithScheduler:RACScheduler.immediateScheduler]; expect(signal.toArray).to(equal(values)); }); qck_it(@"should return a background scheduled signal", ^{ RACSignal *signal = [sequence signalWithScheduler:[RACScheduler scheduler]]; expect(signal.toArray).to(equal(values)); }); qck_it(@"should only evaluate one value per scheduling", ^{ RACScheduler* scheduler = [RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh]; RACSignal *signal = [sequence signalWithScheduler:scheduler]; __block BOOL flag = YES; __block BOOL completed = NO; [signal subscribeNext:^(id x) { expect(@(flag)).to(beTruthy()); flag = NO; [scheduler schedule:^{ // This should get executed before the next value (which // verifies that it's YES). flag = YES; }]; } completed:^{ completed = YES; }]; expect(@(completed)).toEventually(beTruthy()); }); }); qck_it(@"should be equal to itself", ^{ expect(sequence).to(equal(sequence)); }); qck_it(@"should be equal to the same sequence of values", ^{ RACSequence *newSequence = RACSequence.empty; for (id value in values) { RACSequence *valueSeq = [RACSequence return:value]; expect(valueSeq).notTo(beNil()); newSequence = [newSequence concat:valueSeq]; } expect(sequence).to(equal(newSequence)); expect(@(sequence.hash)).to(equal(@(newSequence.hash))); }); qck_it(@"should not be equal to a different sequence of values", ^{ RACSequence *anotherSequence = [RACSequence return:@(-1)]; expect(sequence).notTo(equal(anotherSequence)); }); qck_it(@"should return an identical object for -copy", ^{ expect([sequence copy]).to(beIdenticalTo(sequence)); }); qck_it(@"should archive", ^{ NSData *data = [NSKeyedArchiver archivedDataWithRootObject:sequence]; expect(data).notTo(beNil()); RACSequence *unarchived = [NSKeyedUnarchiver unarchiveObjectWithData:data]; expect(unarchived).to(equal(sequence)); }); qck_it(@"should fold right", ^{ RACSequence *result = [sequence foldRightWithStart:[RACSequence empty] reduce:^(id first, RACSequence *rest) { return [rest.head startWith:first]; }]; expect(result.array).to(equal(values)); }); qck_it(@"should fold left", ^{ RACSequence *result = [sequence foldLeftWithStart:[RACSequence empty] reduce:^(RACSequence *first, id rest) { return [first concat:[RACSequence return:rest]]; }]; expect(result.array).to(equal(values)); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceSpec.m ================================================ // // RACSequenceSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-01. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACSequenceExamples.h" #import "RACStreamExamples.h" #import "NSArray+RACSequenceAdditions.h" #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSequence.h" #import "RACUnit.h" QuickSpecBegin(RACSequenceSpec) qck_describe(@"RACStream", ^{ id verifyValues = ^(RACSequence *sequence, NSArray *expectedValues) { NSMutableArray *collectedValues = [NSMutableArray array]; while (sequence.head != nil) { [collectedValues addObject:sequence.head]; sequence = sequence.tail; } expect(collectedValues).to(equal(expectedValues)); }; __block RACSequence *infiniteSequence = [RACSequence sequenceWithHeadBlock:^{ return RACUnit.defaultUnit; } tailBlock:^{ return infiniteSequence; }]; qck_itBehavesLike(RACStreamExamples, ^{ return @{ RACStreamExamplesClass: RACSequence.class, RACStreamExamplesVerifyValuesBlock: verifyValues, RACStreamExamplesInfiniteStream: infiniteSequence }; }); }); qck_describe(@"+sequenceWithHeadBlock:tailBlock:", ^{ __block RACSequence *sequence; __block BOOL headInvoked; __block BOOL tailInvoked; qck_beforeEach(^{ headInvoked = NO; tailInvoked = NO; sequence = [RACSequence sequenceWithHeadBlock:^{ headInvoked = YES; return @0; } tailBlock:^{ tailInvoked = YES; return [RACSequence return:@1]; }]; expect(sequence).notTo(beNil()); }); qck_it(@"should use the values from the head and tail blocks", ^{ expect(sequence.head).to(equal(@0)); expect(sequence.tail.head).to(equal(@1)); expect(sequence.tail.tail).to(beNil()); }); qck_it(@"should lazily invoke head and tail blocks", ^{ expect(@(headInvoked)).to(beFalsy()); expect(@(tailInvoked)).to(beFalsy()); expect(sequence.head).to(equal(@0)); expect(@(headInvoked)).to(beTruthy()); expect(@(tailInvoked)).to(beFalsy()); expect(sequence.tail).notTo(beNil()); expect(@(tailInvoked)).to(beTruthy()); }); qck_context(@"behaves like a sequence", ^{ qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: sequence, RACSequenceExampleExpectedValues: @[ @0, @1 ] }; }); }); }); qck_describe(@"empty sequences", ^{ qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: [RACSequence empty], RACSequenceExampleExpectedValues: @[] }; }); }); qck_describe(@"non-empty sequences", ^{ qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]], RACSequenceExampleExpectedValues: @[ @0, @1, @2 ] }; }); }); qck_describe(@"eager sequences", ^{ __block RACSequence *lazySequence; __block BOOL headInvoked; __block BOOL tailInvoked; NSArray *values = @[ @0, @1 ]; qck_beforeEach(^{ headInvoked = NO; tailInvoked = NO; lazySequence = [RACSequence sequenceWithHeadBlock:^{ headInvoked = YES; return @0; } tailBlock:^{ tailInvoked = YES; return [RACSequence return:@1]; }]; expect(lazySequence).notTo(beNil()); }); qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: lazySequence.eagerSequence, RACSequenceExampleExpectedValues: values }; }); qck_it(@"should evaluate all values immediately", ^{ RACSequence *eagerSequence = lazySequence.eagerSequence; expect(@(headInvoked)).to(beTruthy()); expect(@(tailInvoked)).to(beTruthy()); expect(eagerSequence.array).to(equal(values)); }); }); qck_describe(@"-take:", ^{ qck_it(@"should complete take: without needing the head of the second item in the sequence", ^{ __block NSUInteger valuesTaken = 0; __block RACSequence *sequence = [RACSequence sequenceWithHeadBlock:^{ ++valuesTaken; return RACUnit.defaultUnit; } tailBlock:^{ return sequence; }]; NSArray *values = [sequence take:1].array; expect(values).to(equal(@[ RACUnit.defaultUnit ])); expect(@(valuesTaken)).to(equal(@1)); }); }); qck_describe(@"-bind:", ^{ qck_it(@"should only evaluate head when the resulting sequence is evaluated", ^{ __block BOOL headInvoked = NO; RACSequence *original = [RACSequence sequenceWithHeadBlock:^{ headInvoked = YES; return RACUnit.defaultUnit; } tailBlock:^ id { return nil; }]; RACSequence *bound = [original bind:^{ return ^(id value, BOOL *stop) { return [RACSequence return:value]; }; }]; expect(bound).notTo(beNil()); expect(@(headInvoked)).to(beFalsy()); expect(bound.head).to(equal(RACUnit.defaultUnit)); expect(@(headInvoked)).to(beTruthy()); }); }); qck_describe(@"-objectEnumerator", ^{ qck_it(@"should only evaluate head as it's enumerated", ^{ __block BOOL firstHeadInvoked = NO; __block BOOL secondHeadInvoked = NO; __block BOOL thirdHeadInvoked = NO; RACSequence *sequence = [RACSequence sequenceWithHeadBlock:^id{ firstHeadInvoked = YES; return @1; } tailBlock:^RACSequence *{ return [RACSequence sequenceWithHeadBlock:^id{ secondHeadInvoked = YES; return @2; } tailBlock:^RACSequence *{ return [RACSequence sequenceWithHeadBlock:^id{ thirdHeadInvoked = YES; return @3; } tailBlock:^RACSequence *{ return RACSequence.empty; }]; }]; }]; NSEnumerator *enumerator = sequence.objectEnumerator; expect(@(firstHeadInvoked)).to(beFalsy()); expect(@(secondHeadInvoked)).to(beFalsy()); expect(@(thirdHeadInvoked)).to(beFalsy()); expect([enumerator nextObject]).to(equal(@1)); expect(@(firstHeadInvoked)).to(beTruthy()); expect(@(secondHeadInvoked)).to(beFalsy()); expect(@(thirdHeadInvoked)).to(beFalsy()); expect([enumerator nextObject]).to(equal(@2)); expect(@(secondHeadInvoked)).to(beTruthy()); expect(@(thirdHeadInvoked)).to(beFalsy()); expect([enumerator nextObject]).to(equal(@3)); expect(@(thirdHeadInvoked)).to(beTruthy()); expect([enumerator nextObject]).to(beNil()); }); qck_it(@"should let the sequence dealloc as it's enumerated", ^{ __block BOOL firstSequenceDeallocd = NO; __block BOOL secondSequenceDeallocd = NO; __block BOOL thirdSequenceDeallocd = NO; NSEnumerator *enumerator = nil; @autoreleasepool { RACSequence *thirdSequence __attribute__((objc_precise_lifetime)) = [RACSequence sequenceWithHeadBlock:^id{ return @3; } tailBlock:^RACSequence *{ return RACSequence.empty; }]; [thirdSequence.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ thirdSequenceDeallocd = YES; }]]; RACSequence *secondSequence __attribute__((objc_precise_lifetime)) = [RACSequence sequenceWithHeadBlock:^id{ return @2; } tailBlock:^RACSequence *{ return thirdSequence; }]; [secondSequence.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ secondSequenceDeallocd = YES; }]]; RACSequence *firstSequence __attribute__((objc_precise_lifetime)) = [RACSequence sequenceWithHeadBlock:^id{ return @1; } tailBlock:^RACSequence *{ return secondSequence; }]; [firstSequence.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ firstSequenceDeallocd = YES; }]]; enumerator = firstSequence.objectEnumerator; } @autoreleasepool { expect([enumerator nextObject]).to(equal(@1)); } @autoreleasepool { expect([enumerator nextObject]).to(equal(@2)); } expect(@(firstSequenceDeallocd)).toEventually(beTruthy()); @autoreleasepool { expect([enumerator nextObject]).to(equal(@3)); } expect(@(secondSequenceDeallocd)).toEventually(beTruthy()); @autoreleasepool { expect([enumerator nextObject]).to(beNil()); } expect(@(thirdSequenceDeallocd)).toEventually(beTruthy()); }); }); qck_it(@"shouldn't overflow the stack when deallocated on a background queue", ^{ NSUInteger length = 10000; NSMutableArray *values = [NSMutableArray arrayWithCapacity:length]; for (NSUInteger i = 0; i < length; ++i) { [values addObject:@(i)]; } __block BOOL finished = NO; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @autoreleasepool { (void)[[values.rac_sequence map:^(id value) { return value; }] array]; } finished = YES; }); expect(@(finished)).toEventually(beTruthy()); }); qck_describe(@"-foldLeftWithStart:reduce:", ^{ qck_it(@"should reduce with start first", ^{ RACSequence *sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]]; NSNumber *result = [sequence foldLeftWithStart:@3 reduce:^(NSNumber *first, NSNumber *rest) { return first; }]; expect(result).to(equal(@3)); }); qck_it(@"should be left associative", ^{ RACSequence *sequence = [[[RACSequence return:@1] concat:[RACSequence return:@2]] concat:[RACSequence return:@3]]; NSNumber *result = [sequence foldLeftWithStart:@0 reduce:^(NSNumber *first, NSNumber *rest) { int difference = first.intValue - rest.intValue; return @(difference); }]; expect(result).to(equal(@-6)); }); }); qck_describe(@"-foldRightWithStart:reduce:", ^{ qck_it(@"should be lazy", ^{ __block BOOL headInvoked = NO; __block BOOL tailInvoked = NO; RACSequence *sequence = [RACSequence sequenceWithHeadBlock:^{ headInvoked = YES; return @0; } tailBlock:^{ tailInvoked = YES; return [RACSequence return:@1]; }]; NSNumber *result = [sequence foldRightWithStart:@2 reduce:^(NSNumber *first, RACSequence *rest) { return first; }]; expect(result).to(equal(@0)); expect(@(headInvoked)).to(beTruthy()); expect(@(tailInvoked)).to(beFalsy()); }); qck_it(@"should reduce with start last", ^{ RACSequence *sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]]; NSNumber *result = [sequence foldRightWithStart:@3 reduce:^(NSNumber *first, RACSequence *rest) { return rest.head; }]; expect(result).to(equal(@3)); }); qck_it(@"should be right associative", ^{ RACSequence *sequence = [[[RACSequence return:@1] concat:[RACSequence return:@2]] concat:[RACSequence return:@3]]; NSNumber *result = [sequence foldRightWithStart:@0 reduce:^(NSNumber *first, RACSequence *rest) { int difference = first.intValue - [rest.head intValue]; return @(difference); }]; expect(result).to(equal(@2)); }); }); qck_describe(@"-any", ^{ __block RACSequence *sequence; qck_beforeEach(^{ sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]]; }); qck_it(@"should return true when at least one exists", ^{ BOOL result = [sequence any:^ BOOL (NSNumber *value) { return value.integerValue > 0; }]; expect(@(result)).to(beTruthy()); }); qck_it(@"should return false when no such thing exists", ^{ BOOL result = [sequence any:^ BOOL (NSNumber *value) { return value.integerValue == 3; }]; expect(@(result)).to(beFalsy()); }); }); qck_describe(@"-all", ^{ __block RACSequence *sequence; qck_beforeEach(^{ sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]]; }); qck_it(@"should return true when all values pass", ^{ BOOL result = [sequence all:^ BOOL (NSNumber *value) { return value.integerValue >= 0; }]; expect(@(result)).to(beTruthy()); }); qck_it(@"should return false when at least one value fails", ^{ BOOL result = [sequence all:^ BOOL (NSNumber *value) { return value.integerValue < 2; }]; expect(@(result)).to(beFalsy()); }); }); qck_describe(@"-objectPassingTest:", ^{ __block RACSequence *sequence; qck_beforeEach(^{ sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]]; }); qck_it(@"should return leftmost object that passes the test", ^{ NSNumber *result = [sequence objectPassingTest:^ BOOL (NSNumber *value) { return value.intValue > 0; }]; expect(result).to(equal(@1)); }); qck_it(@"should return nil if no objects pass the test", ^{ NSNumber *result = [sequence objectPassingTest:^ BOOL (NSNumber *value) { return value.intValue < 0; }]; expect(result).to(beNil()); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSerialDisposableSpec.m ================================================ // // RACSerialDisposableSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACSerialDisposable.h" QuickSpecBegin(RACSerialDisposableSpec) qck_it(@"should initialize with -init", ^{ RACSerialDisposable *serial = [[RACSerialDisposable alloc] init]; expect(serial).notTo(beNil()); expect(serial.disposable).to(beNil()); }); qck_it(@"should initialize an inner disposable with -initWithBlock:", ^{ __block BOOL disposed = NO; RACSerialDisposable *serial = [RACSerialDisposable disposableWithBlock:^{ disposed = YES; }]; expect(serial).notTo(beNil()); expect(serial.disposable).notTo(beNil()); [serial.disposable dispose]; expect(@(serial.disposed)).to(beFalsy()); expect(@(disposed)).to(beTruthy()); }); qck_it(@"should initialize with a disposable", ^{ RACDisposable *inner = [[RACDisposable alloc] init]; RACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:inner]; expect(serial).notTo(beNil()); expect(serial.disposable).to(equal(inner)); }); qck_it(@"should dispose of the inner disposable", ^{ __block BOOL disposed = NO; RACDisposable *inner = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; RACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:inner]; expect(@(serial.disposed)).to(beFalsy()); expect(@(disposed)).to(beFalsy()); [serial dispose]; expect(@(serial.disposed)).to(beTruthy()); expect(serial.disposable).to(beNil()); expect(@(disposed)).to(beTruthy()); }); qck_it(@"should dispose of a new inner disposable if it's already been disposed", ^{ __block BOOL disposed = NO; RACDisposable *inner = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; RACSerialDisposable *serial = [[RACSerialDisposable alloc] init]; expect(@(serial.disposed)).to(beFalsy()); [serial dispose]; expect(@(serial.disposed)).to(beTruthy()); expect(@(disposed)).to(beFalsy()); serial.disposable = inner; expect(@(disposed)).to(beTruthy()); expect(serial.disposable).to(beNil()); }); qck_it(@"should allow the inner disposable to be set to nil", ^{ __block BOOL disposed = NO; RACDisposable *inner = [RACDisposable disposableWithBlock:^{ disposed = YES; }]; RACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:inner]; expect(@(disposed)).to(beFalsy()); serial.disposable = nil; expect(serial.disposable).to(beNil()); serial.disposable = inner; expect(serial.disposable).to(equal(inner)); [serial dispose]; expect(@(disposed)).to(beTruthy()); expect(serial.disposable).to(beNil()); }); qck_it(@"should swap inner disposables", ^{ __block BOOL firstDisposed = NO; RACDisposable *first = [RACDisposable disposableWithBlock:^{ firstDisposed = YES; }]; __block BOOL secondDisposed = NO; RACDisposable *second = [RACDisposable disposableWithBlock:^{ secondDisposed = YES; }]; RACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:first]; expect([serial swapInDisposable:second]).to(equal(first)); expect(@(serial.disposed)).to(beFalsy()); expect(@(firstDisposed)).to(beFalsy()); expect(@(secondDisposed)).to(beFalsy()); [serial dispose]; expect(@(serial.disposed)).to(beTruthy()); expect(serial.disposable).to(beNil()); expect(@(firstDisposed)).to(beFalsy()); expect(@(secondDisposed)).to(beTruthy()); }); qck_it(@"should release the inner disposable upon deallocation", ^{ __weak RACDisposable *weakInnerDisposable; __weak RACSerialDisposable *weakSerialDisposable; @autoreleasepool { RACDisposable *innerDisposable __attribute__((objc_precise_lifetime)) = [[RACDisposable alloc] init]; weakInnerDisposable = innerDisposable; RACSerialDisposable *serialDisposable __attribute__((objc_precise_lifetime)) = [[RACSerialDisposable alloc] init]; serialDisposable.disposable = innerDisposable; weakSerialDisposable = serialDisposable; } expect(weakSerialDisposable).to(beNil()); expect(weakInnerDisposable).to(beNil()); }); qck_it(@"should not crash when racing between swapInDisposable and disposable", ^{ __block BOOL stop = NO; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (long long)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ stop = YES; }); RACSerialDisposable *serialDisposable = [[RACSerialDisposable alloc] init]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ while (!stop) { [serialDisposable swapInDisposable:[RACDisposable disposableWithBlock:^{}]]; } }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ while (!stop) { (void)[serialDisposable disposable]; } }); expect(@(stop)).toEventually(beTruthy()); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSignalSpec.m ================================================ // // RACSignalSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 3/2/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACPropertySignalExamples.h" #import "RACSequenceExamples.h" #import "RACStreamExamples.h" #import "RACTestObject.h" #import #import "NSObject+RACDeallocating.h" #import "NSObject+RACPropertySubscribing.h" #import "RACBehaviorSubject.h" #import "RACCommand.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACEvent.h" #import "RACGroupedSignal.h" #import "RACMulticastConnection.h" #import "RACReplaySubject.h" #import "RACScheduler.h" #import "RACSignal+Operations.h" #import "RACSubject.h" #import "RACSubscriber+Private.h" #import "RACSubscriber.h" #import "RACTestScheduler.h" #import "RACTuple.h" #import "RACUnit.h" #import // Set in a beforeAll below. static NSError *RACSignalTestError; static NSString * const RACSignalMergeConcurrentCompletionExampleGroup = @"RACSignalMergeConcurrentCompletionExampleGroup"; static NSString * const RACSignalMaxConcurrent = @"RACSignalMaxConcurrent"; QuickConfigurationBegin(mergeConcurrentCompletionName) + (void)configure:(Configuration *)configuration { sharedExamples(RACSignalMergeConcurrentCompletionExampleGroup, ^(QCKDSLSharedExampleContext exampleContext) { qck_it(@"should complete only after the source and all its signals have completed", ^{ RACSubject *subject1 = [RACSubject subject]; RACSubject *subject2 = [RACSubject subject]; RACSubject *subject3 = [RACSubject subject]; RACSubject *signalsSubject = [RACSubject subject]; __block BOOL completed = NO; [[signalsSubject flatten:[exampleContext()[RACSignalMaxConcurrent] unsignedIntegerValue]] subscribeCompleted:^{ completed = YES; }]; [signalsSubject sendNext:subject1]; [subject1 sendCompleted]; expect(@(completed)).to(beFalsy()); [signalsSubject sendNext:subject2]; [signalsSubject sendNext:subject3]; [signalsSubject sendCompleted]; expect(@(completed)).to(beFalsy()); [subject2 sendCompleted]; expect(@(completed)).to(beFalsy()); [subject3 sendCompleted]; expect(@(completed)).to(beTruthy()); }); }); } QuickConfigurationEnd QuickSpecBegin(RACSignalSpec) qck_beforeSuite(^{ // We do this instead of a macro to ensure that to(equal() will work // correctly (by matching identity), even if -[NSError isEqual:] is broken. RACSignalTestError = [NSError errorWithDomain:@"foo" code:100 userInfo:nil]; }); qck_describe(@"RACStream", ^{ id verifyValues = ^(RACSignal *signal, NSArray *expectedValues) { expect(signal).notTo(beNil()); NSMutableArray *collectedValues = [NSMutableArray array]; __block BOOL success = NO; __block NSError *error = nil; [signal subscribeNext:^(id value) { [collectedValues addObject:value]; } error:^(NSError *receivedError) { error = receivedError; } completed:^{ success = YES; }]; expect(@(success)).toEventually(beTruthy()); expect(error).to(beNil()); expect(collectedValues).to(equal(expectedValues)); }; RACSignal *infiniteSignal = [RACSignal createSignal:^(id subscriber) { __block volatile int32_t done = 0; [RACScheduler.mainThreadScheduler schedule:^{ while (!done) { [subscriber sendNext:RACUnit.defaultUnit]; } }]; return [RACDisposable disposableWithBlock:^{ OSAtomicIncrement32Barrier(&done); }]; }]; qck_itBehavesLike(RACStreamExamples, ^{ return @{ RACStreamExamplesClass: RACSignal.class, RACStreamExamplesVerifyValuesBlock: verifyValues, RACStreamExamplesInfiniteStream: infiniteSignal }; }); }); qck_describe(@"-bind:", ^{ __block RACSubject *signals; __block BOOL disposed; __block id lastValue; __block RACSubject *values; qck_beforeEach(^{ // Tests send a (RACSignal, BOOL) pair that are used below in -bind:. signals = [RACSubject subject]; disposed = NO; RACSignal *source = [RACSignal createSignal:^(id subscriber) { [signals subscribe:subscriber]; return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; RACSignal *bind = [source bind:^{ return ^(RACTuple *x, BOOL *stop) { RACTupleUnpack(RACSignal *signal, NSNumber *stopValue) = x; *stop = stopValue.boolValue; return signal; }; }]; lastValue = nil; [bind subscribeNext:^(id x) { lastValue = x; }]; // Send `bind` an open ended subject to subscribe to( These tests make // use of this in two ways: // 1. Used to test a regression bug where -bind: would not actually // stop when instructed to. This bug manifested itself only when // there were subscriptions that lived on past the point at which // -bind: was stopped. This subject represents such a subscription. // 2. Test that values sent by this subject are received by `bind`'s // subscriber, even *after* -bind: has been instructed to stop. values = [RACSubject subject]; [signals sendNext:RACTuplePack(values, @NO)]; expect(@(disposed)).to(beFalsy()); }); qck_it(@"should dispose source signal when stopped with nil signal", ^{ // Tell -bind: to stop by sending it a `nil` signal. [signals sendNext:RACTuplePack(nil, @NO)]; expect(@(disposed)).to(beTruthy()); // Should still receive values sent after stopping. expect(lastValue).to(beNil()); [values sendNext:RACUnit.defaultUnit]; expect(lastValue).to(equal(RACUnit.defaultUnit)); }); qck_it(@"should dispose source signal when stop flag set to YES", ^{ // Tell -bind: to stop by setting the stop flag to YES. [signals sendNext:RACTuplePack([RACSignal return:@1], @YES)]; expect(@(disposed)).to(beTruthy()); // Should still recieve last signal sent at the time of setting stop to YES. expect(lastValue).to(equal(@1)); // Should still receive values sent after stopping. [values sendNext:@2]; expect(lastValue).to(equal(@2)); }); qck_it(@"should properly stop subscribing to new signals after error", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@0]; [subscriber sendNext:@1]; return nil; }]; __block BOOL subscribedAfterError = NO; RACSignal *bind = [signal bind:^{ return ^(NSNumber *x, BOOL *stop) { if (x.integerValue == 0) return [RACSignal error:nil]; return [RACSignal defer:^{ subscribedAfterError = YES; return [RACSignal empty]; }]; }; }]; [bind subscribeCompleted:^{}]; expect(@(subscribedAfterError)).to(beFalsy()); }); qck_it(@"should not subscribe to signals following error in +merge:", ^{ __block BOOL firstSubscribed = NO; __block BOOL secondSubscribed = NO; __block BOOL errored = NO; RACSignal *signal = [[RACSignal merge:@[ [RACSignal defer:^{ firstSubscribed = YES; return [RACSignal error:nil]; }], [RACSignal defer:^{ secondSubscribed = YES; return [RACSignal return:nil]; }] ]] doError:^(NSError *error) { errored = YES; }]; [signal subscribeCompleted:^{}]; expect(@(firstSubscribed)).to(beTruthy()); expect(@(secondSubscribed)).to(beFalsy()); expect(@(errored)).to(beTruthy()); }); qck_it(@"should not retain signals that are subscribed", ^{ __weak RACSignal *weakSignal; @autoreleasepool { RACSignal *delaySignal = [[RACSignal return:@123] delay:1]; [[delaySignal map:^id(id value) { return @456; }] subscribeNext:^(id x) { }]; weakSignal = delaySignal; } expect(weakSignal).to(beNil()); }); }); qck_describe(@"subscribing", ^{ __block RACSignal *signal = nil; id nextValueSent = @"1"; qck_beforeEach(^{ signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:nextValueSent]; [subscriber sendCompleted]; return nil; }]; }); qck_it(@"should get next values", ^{ __block id nextValueReceived = nil; [signal subscribeNext:^(id x) { nextValueReceived = x; } error:^(NSError *error) { } completed:^{ }]; expect(nextValueReceived).to(equal(nextValueSent)); }); qck_it(@"should get completed", ^{ __block BOOL didGetCompleted = NO; [signal subscribeNext:^(id x) { } error:^(NSError *error) { } completed:^{ didGetCompleted = YES; }]; expect(@(didGetCompleted)).to(beTruthy()); }); qck_it(@"should not get an error", ^{ __block BOOL didGetError = NO; [signal subscribeNext:^(id x) { } error:^(NSError *error) { didGetError = YES; } completed:^{ }]; expect(@(didGetError)).to(beFalsy()); }); qck_it(@"shouldn't get anything after dispose", ^{ RACTestScheduler *scheduler = [[RACTestScheduler alloc] init]; NSMutableArray *receivedValues = [NSMutableArray array]; RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@0]; [scheduler afterDelay:0 schedule:^{ [subscriber sendNext:@1]; }]; return nil; }]; RACDisposable *disposable = [signal subscribeNext:^(id x) { [receivedValues addObject:x]; }]; NSArray *expectedValues = @[ @0 ]; expect(receivedValues).to(equal(expectedValues)); [disposable dispose]; [scheduler stepAll]; expect(receivedValues).to(equal(expectedValues)); }); qck_it(@"should have a current scheduler in didSubscribe block", ^{ __block RACScheduler *currentScheduler; RACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { currentScheduler = RACScheduler.currentScheduler; [subscriber sendCompleted]; return nil; }]; [signal subscribeNext:^(id x) {}]; expect(currentScheduler).notTo(beNil()); currentScheduler = nil; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [signal subscribeNext:^(id x) {}]; }); expect(currentScheduler).toEventuallyNot(beNil()); }); qck_it(@"should automatically dispose of other subscriptions from +createSignal:", ^{ __block BOOL innerDisposed = NO; __block id innerSubscriber = nil; RACSignal *innerSignal = [RACSignal createSignal:^(id subscriber) { // Keep the subscriber alive so it doesn't trigger disposal on dealloc innerSubscriber = subscriber; return [RACDisposable disposableWithBlock:^{ innerDisposed = YES; }]; }]; RACSignal *outerSignal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [innerSignal subscribe:subscriber]; return nil; }]; RACDisposable *disposable = [outerSignal subscribeCompleted:^{}]; expect(disposable).notTo(beNil()); expect(@(innerDisposed)).to(beFalsy()); [disposable dispose]; expect(@(innerDisposed)).to(beTruthy()); }); }); qck_describe(@"-takeUntil:", ^{ qck_it(@"should support value as trigger", ^{ __block BOOL shouldBeGettingItems = YES; RACSubject *subject = [RACSubject subject]; RACSubject *cutOffSubject = [RACSubject subject]; [[subject takeUntil:cutOffSubject] subscribeNext:^(id x) { expect(@(shouldBeGettingItems)).to(beTruthy()); }]; shouldBeGettingItems = YES; [subject sendNext:@"test 1"]; [subject sendNext:@"test 2"]; [cutOffSubject sendNext:[RACUnit defaultUnit]]; shouldBeGettingItems = NO; [subject sendNext:@"test 3"]; }); qck_it(@"should support completion as trigger", ^{ __block BOOL shouldBeGettingItems = YES; RACSubject *subject = [RACSubject subject]; RACSubject *cutOffSubject = [RACSubject subject]; [[subject takeUntil:cutOffSubject] subscribeNext:^(id x) { expect(@(shouldBeGettingItems)).to(beTruthy()); }]; [cutOffSubject sendCompleted]; shouldBeGettingItems = NO; [subject sendNext:@"should not go through"]; }); qck_it(@"should squelch any values sent immediately upon subscription", ^{ RACSignal *valueSignal = [RACSignal return:RACUnit.defaultUnit]; RACSignal *cutOffSignal = [RACSignal empty]; __block BOOL gotNext = NO; __block BOOL completed = NO; [[valueSignal takeUntil:cutOffSignal] subscribeNext:^(id _) { gotNext = YES; } completed:^{ completed = YES; }]; expect(@(gotNext)).to(beFalsy()); expect(@(completed)).to(beTruthy()); }); }); qck_describe(@"-takeUntilReplacement:", ^{ qck_it(@"should forward values from the receiver until it's replaced", ^{ RACSubject *receiver = [RACSubject subject]; RACSubject *replacement = [RACSubject subject]; NSMutableArray *receivedValues = [NSMutableArray array]; [[receiver takeUntilReplacement:replacement] subscribeNext:^(id x) { [receivedValues addObject:x]; }]; expect(receivedValues).to(equal(@[])); [receiver sendNext:@1]; expect(receivedValues).to(equal(@[ @1 ])); [receiver sendNext:@2]; expect(receivedValues).to(equal((@[ @1, @2 ]))); [replacement sendNext:@3]; expect(receivedValues).to(equal((@[ @1, @2, @3 ]))); [receiver sendNext:@4]; expect(receivedValues).to(equal((@[ @1, @2, @3 ]))); [replacement sendNext:@5]; expect(receivedValues).to(equal((@[ @1, @2, @3, @5 ]))); }); qck_it(@"should forward error from the receiver", ^{ RACSubject *receiver = [RACSubject subject]; __block BOOL receivedError = NO; [[receiver takeUntilReplacement:RACSignal.never] subscribeError:^(NSError *error) { receivedError = YES; }]; [receiver sendError:nil]; expect(@(receivedError)).to(beTruthy()); }); qck_it(@"should not forward completed from the receiver", ^{ RACSubject *receiver = [RACSubject subject]; __block BOOL receivedCompleted = NO; [[receiver takeUntilReplacement:RACSignal.never] subscribeCompleted: ^{ receivedCompleted = YES; }]; [receiver sendCompleted]; expect(@(receivedCompleted)).to(beFalsy()); }); qck_it(@"should forward error from the replacement signal", ^{ RACSubject *replacement = [RACSubject subject]; __block BOOL receivedError = NO; [[RACSignal.never takeUntilReplacement:replacement] subscribeError:^(NSError *error) { receivedError = YES; }]; [replacement sendError:nil]; expect(@(receivedError)).to(beTruthy()); }); qck_it(@"should forward completed from the replacement signal", ^{ RACSubject *replacement = [RACSubject subject]; __block BOOL receivedCompleted = NO; [[RACSignal.never takeUntilReplacement:replacement] subscribeCompleted: ^{ receivedCompleted = YES; }]; [replacement sendCompleted]; expect(@(receivedCompleted)).to(beTruthy()); }); qck_it(@"should not forward values from the receiver if both send synchronously", ^{ RACSignal *receiver = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; [subscriber sendNext:@3]; return nil; }]; RACSignal *replacement = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@4]; [subscriber sendNext:@5]; [subscriber sendNext:@6]; return nil; }]; NSMutableArray *receivedValues = [NSMutableArray array]; [[receiver takeUntilReplacement:replacement] subscribeNext:^(id x) { [receivedValues addObject:x]; }]; expect(receivedValues).to(equal((@[ @4, @5, @6 ]))); }); qck_it(@"should dispose of the receiver when it's disposed of", ^{ __block BOOL receiverDisposed = NO; RACSignal *receiver = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ receiverDisposed = YES; }]; }]; [[[receiver takeUntilReplacement:RACSignal.never] subscribeCompleted:^{}] dispose]; expect(@(receiverDisposed)).to(beTruthy()); }); qck_it(@"should dispose of the replacement signal when it's disposed of", ^{ __block BOOL replacementDisposed = NO; RACSignal *replacement = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ replacementDisposed = YES; }]; }]; [[[RACSignal.never takeUntilReplacement:replacement] subscribeCompleted:^{}] dispose]; expect(@(replacementDisposed)).to(beTruthy()); }); qck_it(@"should dispose of the receiver when the replacement signal sends an event", ^{ __block BOOL receiverDisposed = NO; __block id receiverSubscriber = nil; RACSignal *receiver = [RACSignal createSignal:^(id subscriber) { // Keep the subscriber alive so it doesn't trigger disposal on dealloc receiverSubscriber = subscriber; return [RACDisposable disposableWithBlock:^{ receiverDisposed = YES; }]; }]; RACSubject *replacement = [RACSubject subject]; [[receiver takeUntilReplacement:replacement] subscribeCompleted:^{}]; expect(@(receiverDisposed)).to(beFalsy()); [replacement sendNext:nil]; expect(@(receiverDisposed)).to(beTruthy()); }); }); qck_describe(@"disposal", ^{ qck_it(@"should dispose of the didSubscribe disposable", ^{ __block BOOL innerDisposed = NO; RACSignal *signal = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ innerDisposed = YES; }]; }]; expect(@(innerDisposed)).to(beFalsy()); RACDisposable *disposable = [signal subscribeNext:^(id x) {}]; expect(disposable).notTo(beNil()); [disposable dispose]; expect(@(innerDisposed)).to(beTruthy()); }); qck_it(@"should dispose of the didSubscribe disposable asynchronously", ^{ __block BOOL innerDisposed = NO; RACSignal *signal = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ innerDisposed = YES; }]; }]; [[RACScheduler scheduler] schedule:^{ RACDisposable *disposable = [signal subscribeNext:^(id x) {}]; [disposable dispose]; }]; expect(@(innerDisposed)).toEventually(beTruthy()); }); }); qck_describe(@"querying", ^{ __block RACSignal *signal = nil; id nextValueSent = @"1"; qck_beforeEach(^{ signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:nextValueSent]; [subscriber sendNext:@"other value"]; [subscriber sendCompleted]; return nil; }]; }); qck_it(@"should return first 'next' value with -firstOrDefault:success:error:", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; [subscriber sendNext:@3]; [subscriber sendCompleted]; return nil; }]; expect(signal).notTo(beNil()); __block BOOL success = NO; __block NSError *error = nil; expect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@1)); expect(@(success)).to(beTruthy()); expect(error).to(beNil()); }); qck_it(@"should return first default value with -firstOrDefault:success:error:", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendCompleted]; return nil; }]; expect(signal).notTo(beNil()); __block BOOL success = NO; __block NSError *error = nil; expect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@5)); expect(@(success)).to(beTruthy()); expect(error).to(beNil()); }); qck_it(@"should return error with -firstOrDefault:success:error:", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendError:RACSignalTestError]; return nil; }]; expect(signal).notTo(beNil()); __block BOOL success = NO; __block NSError *error = nil; expect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@5)); expect(@(success)).to(beFalsy()); expect(error).to(equal(RACSignalTestError)); }); qck_it(@"shouldn't crash when returning an error from a background scheduler", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [[RACScheduler scheduler] schedule:^{ [subscriber sendError:RACSignalTestError]; }]; return nil; }]; expect(signal).notTo(beNil()); __block BOOL success = NO; __block NSError *error = nil; expect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@5)); expect(@(success)).to(beFalsy()); expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should terminate the subscription after returning from -firstOrDefault:success:error:", ^{ __block BOOL disposed = NO; RACSignal *signal = [RACSignal createSignal:^(id subscriber) { [subscriber sendNext:RACUnit.defaultUnit]; return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; expect(signal).notTo(beNil()); expect(@(disposed)).to(beFalsy()); expect([signal firstOrDefault:nil success:NULL error:NULL]).to(equal(RACUnit.defaultUnit)); expect(@(disposed)).to(beTruthy()); }); qck_it(@"should return YES from -waitUntilCompleted: when successful", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:RACUnit.defaultUnit]; [subscriber sendCompleted]; return nil; }]; __block NSError *error = nil; expect(@([signal waitUntilCompleted:&error])).to(beTruthy()); expect(error).to(beNil()); }); qck_it(@"should return NO from -waitUntilCompleted: upon error", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:RACUnit.defaultUnit]; [subscriber sendError:RACSignalTestError]; return nil; }]; __block NSError *error = nil; expect(@([signal waitUntilCompleted:&error])).to(beFalsy()); expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should return a delayed value from -asynchronousFirstOrDefault:success:error:", ^{ RACSignal *signal = [[RACSignal return:RACUnit.defaultUnit] delay:0]; __block BOOL scheduledBlockRan = NO; [RACScheduler.mainThreadScheduler schedule:^{ scheduledBlockRan = YES; }]; expect(@(scheduledBlockRan)).to(beFalsy()); BOOL success = NO; NSError *error = nil; id value = [signal asynchronousFirstOrDefault:nil success:&success error:&error]; expect(@(scheduledBlockRan)).to(beTruthy()); expect(value).to(equal(RACUnit.defaultUnit)); expect(@(success)).to(beTruthy()); expect(error).to(beNil()); }); qck_it(@"should return a default value from -asynchronousFirstOrDefault:success:error:", ^{ RACSignal *signal = [[RACSignal error:RACSignalTestError] delay:0]; __block BOOL scheduledBlockRan = NO; [RACScheduler.mainThreadScheduler schedule:^{ scheduledBlockRan = YES; }]; expect(@(scheduledBlockRan)).to(beFalsy()); BOOL success = NO; NSError *error = nil; id value = [signal asynchronousFirstOrDefault:RACUnit.defaultUnit success:&success error:&error]; expect(@(scheduledBlockRan)).to(beTruthy()); expect(value).to(equal(RACUnit.defaultUnit)); expect(@(success)).to(beFalsy()); expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should return a delayed error from -asynchronousFirstOrDefault:success:error:", ^{ RACSignal *signal = [[RACSignal createSignal:^(id subscriber) { return [[RACScheduler scheduler] schedule:^{ [subscriber sendError:RACSignalTestError]; }]; }] deliverOn:RACScheduler.mainThreadScheduler]; __block NSError *error = nil; __block BOOL success = NO; expect([signal asynchronousFirstOrDefault:nil success:&success error:&error]).to(beNil()); expect(@(success)).to(beFalsy()); expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should terminate the subscription after returning from -asynchronousFirstOrDefault:success:error:", ^{ __block BOOL disposed = NO; RACSignal *signal = [RACSignal createSignal:^(id subscriber) { [[RACScheduler scheduler] schedule:^{ [subscriber sendNext:RACUnit.defaultUnit]; }]; return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; expect(signal).notTo(beNil()); expect(@(disposed)).to(beFalsy()); expect([signal asynchronousFirstOrDefault:nil success:NULL error:NULL]).to(equal(RACUnit.defaultUnit)); expect(@(disposed)).toEventually(beTruthy()); }); qck_it(@"should return a delayed success from -asynchronouslyWaitUntilCompleted:", ^{ RACSignal *signal = [[RACSignal return:RACUnit.defaultUnit] delay:0]; __block BOOL scheduledBlockRan = NO; [RACScheduler.mainThreadScheduler schedule:^{ scheduledBlockRan = YES; }]; expect(@(scheduledBlockRan)).to(beFalsy()); NSError *error = nil; BOOL success = [signal asynchronouslyWaitUntilCompleted:&error]; expect(@(scheduledBlockRan)).to(beTruthy()); expect(@(success)).to(beTruthy()); expect(error).to(beNil()); }); }); qck_describe(@"continuation", ^{ qck_it(@"should repeat after completion", ^{ __block NSUInteger numberOfSubscriptions = 0; RACScheduler *scheduler = [RACScheduler scheduler]; RACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { return [scheduler schedule:^{ if (numberOfSubscriptions == 3) { [subscriber sendError:RACSignalTestError]; return; } numberOfSubscriptions++; [subscriber sendNext:@"1"]; [subscriber sendCompleted]; [subscriber sendError:RACSignalTestError]; }]; }]; __block NSUInteger nextCount = 0; __block BOOL gotCompleted = NO; [[signal repeat] subscribeNext:^(id x) { nextCount++; } error:^(NSError *error) { } completed:^{ gotCompleted = YES; }]; expect(@(nextCount)).toEventually(equal(@3)); expect(@(gotCompleted)).to(beFalsy()); }); qck_it(@"should stop repeating when disposed", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }]; NSMutableArray *values = [NSMutableArray array]; __block BOOL completed = NO; __block RACDisposable *disposable = [[[signal repeat] subscribeOn:RACScheduler.mainThreadScheduler] subscribeNext:^(id x) { [values addObject:x]; [disposable dispose]; } completed:^{ completed = YES; }]; expect(values).toEventually(equal(@[ @1 ])); expect(@(completed)).to(beFalsy()); }); qck_it(@"should stop repeating when disposed by -take:", ^{ RACSignal *signal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }]; NSMutableArray *values = [NSMutableArray array]; __block BOOL completed = NO; [[[signal repeat] take:1] subscribeNext:^(id x) { [values addObject:x]; } completed:^{ completed = YES; }]; expect(values).toEventually(equal(@[ @1 ])); expect(@(completed)).to(beTruthy()); }); }); qck_describe(@"+combineLatestWith:", ^{ __block RACSubject *subject1 = nil; __block RACSubject *subject2 = nil; __block RACSignal *combined = nil; qck_beforeEach(^{ subject1 = [RACSubject subject]; subject2 = [RACSubject subject]; combined = [RACSignal combineLatest:@[ subject1, subject2 ]]; }); qck_it(@"should send next only once both signals send next", ^{ __block RACTuple *tuple; [combined subscribeNext:^(id x) { tuple = x; }]; expect(tuple).to(beNil()); [subject1 sendNext:@"1"]; expect(tuple).to(beNil()); [subject2 sendNext:@"2"]; expect(tuple).to(equal(RACTuplePack(@"1", @"2"))); }); qck_it(@"should send nexts when either signal sends multiple times", ^{ NSMutableArray *results = [NSMutableArray array]; [combined subscribeNext:^(id x) { [results addObject:x]; }]; [subject1 sendNext:@"1"]; [subject2 sendNext:@"2"]; [subject1 sendNext:@"3"]; [subject2 sendNext:@"4"]; expect(results[0]).to(equal(RACTuplePack(@"1", @"2"))); expect(results[1]).to(equal(RACTuplePack(@"3", @"2"))); expect(results[2]).to(equal(RACTuplePack(@"3", @"4"))); }); qck_it(@"should complete when only both signals complete", ^{ __block BOOL completed = NO; [combined subscribeCompleted:^{ completed = YES; }]; expect(@(completed)).to(beFalsy()); [subject1 sendCompleted]; expect(@(completed)).to(beFalsy()); [subject2 sendCompleted]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should error when either signal errors", ^{ __block NSError *receivedError = nil; [combined subscribeError:^(NSError *error) { receivedError = error; }]; [subject1 sendError:RACSignalTestError]; expect(receivedError).to(equal(RACSignalTestError)); }); qck_it(@"shouldn't create a retain cycle", ^{ __block BOOL subjectDeallocd = NO; __block BOOL signalDeallocd = NO; @autoreleasepool { RACSubject *subject __attribute__((objc_precise_lifetime)) = [RACSubject subject]; [subject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ subjectDeallocd = YES; }]]; RACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal combineLatest:@[ subject ]]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ signalDeallocd = YES; }]]; [signal subscribeCompleted:^{}]; [subject sendCompleted]; } expect(@(subjectDeallocd)).toEventually(beTruthy()); expect(@(signalDeallocd)).toEventually(beTruthy()); }); qck_it(@"should combine the same signal", ^{ RACSignal *combined = [subject1 combineLatestWith:subject1]; __block RACTuple *tuple; [combined subscribeNext:^(id x) { tuple = x; }]; [subject1 sendNext:@"foo"]; expect(tuple).to(equal(RACTuplePack(@"foo", @"foo"))); [subject1 sendNext:@"bar"]; expect(tuple).to(equal(RACTuplePack(@"bar", @"bar"))); }); qck_it(@"should combine the same side-effecting signal", ^{ __block NSUInteger counter = 0; RACSignal *sideEffectingSignal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@(++counter)]; [subscriber sendCompleted]; return nil; }]; RACSignal *combined = [sideEffectingSignal combineLatestWith:sideEffectingSignal]; expect(@(counter)).to(equal(@0)); NSMutableArray *receivedValues = [NSMutableArray array]; [combined subscribeNext:^(id x) { [receivedValues addObject:x]; }]; expect(@(counter)).to(equal(@2)); NSArray *expected = @[ RACTuplePack(@1, @2) ]; expect(receivedValues).to(equal(expected)); }); }); qck_describe(@"+combineLatest:", ^{ qck_it(@"should return tuples even when only combining one signal", ^{ RACSubject *subject = [RACSubject subject]; __block RACTuple *tuple; [[RACSignal combineLatest:@[ subject ]] subscribeNext:^(id x) { tuple = x; }]; [subject sendNext:@"foo"]; expect(tuple).to(equal(RACTuplePack(@"foo"))); }); qck_it(@"should complete immediately when not given any signals", ^{ RACSignal *signal = [RACSignal combineLatest:@[]]; __block BOOL completed = NO; [signal subscribeCompleted:^{ completed = YES; }]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should only complete after all its signals complete", ^{ RACSubject *subject1 = [RACSubject subject]; RACSubject *subject2 = [RACSubject subject]; RACSubject *subject3 = [RACSubject subject]; RACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject3 ]]; __block BOOL completed = NO; [combined subscribeCompleted:^{ completed = YES; }]; expect(@(completed)).to(beFalsy()); [subject1 sendCompleted]; expect(@(completed)).to(beFalsy()); [subject2 sendCompleted]; expect(@(completed)).to(beFalsy()); [subject3 sendCompleted]; expect(@(completed)).to(beTruthy()); }); }); qck_describe(@"+combineLatest:reduce:", ^{ __block RACSubject *subject1; __block RACSubject *subject2; __block RACSubject *subject3; qck_beforeEach(^{ subject1 = [RACSubject subject]; subject2 = [RACSubject subject]; subject3 = [RACSubject subject]; }); qck_it(@"should send nils for nil values", ^{ __block id receivedVal1; __block id receivedVal2; __block id receivedVal3; RACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject3 ] reduce:^ id (id val1, id val2, id val3) { receivedVal1 = val1; receivedVal2 = val2; receivedVal3 = val3; return nil; }]; __block BOOL gotValue = NO; [combined subscribeNext:^(id x) { gotValue = YES; }]; [subject1 sendNext:nil]; [subject2 sendNext:nil]; [subject3 sendNext:nil]; expect(@(gotValue)).to(beTruthy()); expect(receivedVal1).to(beNil()); expect(receivedVal2).to(beNil()); expect(receivedVal3).to(beNil()); }); qck_it(@"should send the return result of the reduce block", ^{ RACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject3 ] reduce:^(NSString *string1, NSString *string2, NSString *string3) { return [NSString stringWithFormat:@"%@: %@%@", string1, string2, string3]; }]; __block id received; [combined subscribeNext:^(id x) { received = x; }]; [subject1 sendNext:@"hello"]; [subject2 sendNext:@"world"]; [subject3 sendNext:@"!!1"]; expect(received).to(equal(@"hello: world!!1")); }); qck_it(@"should handle multiples of the same signals", ^{ RACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject1, subject3 ] reduce:^(NSString *string1, NSString *string2, NSString *string3, NSString *string4) { return [NSString stringWithFormat:@"%@ : %@ = %@ : %@", string1, string2, string3, string4]; }]; NSMutableArray *receivedValues = NSMutableArray.array; [combined subscribeNext:^(id x) { [receivedValues addObject:x]; }]; [subject1 sendNext:@"apples"]; expect(receivedValues.lastObject).to(beNil()); [subject2 sendNext:@"oranges"]; expect(receivedValues.lastObject).to(beNil()); [subject3 sendNext:@"cattle"]; expect(receivedValues.lastObject).to(equal(@"apples : oranges = apples : cattle")); [subject1 sendNext:@"horses"]; expect(receivedValues.lastObject).to(equal(@"horses : oranges = horses : cattle")); }); qck_it(@"should handle multiples of the same side-effecting signal", ^{ __block NSUInteger counter = 0; RACSignal *sideEffectingSignal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@(++counter)]; [subscriber sendCompleted]; return nil; }]; RACSignal *combined = [RACSignal combineLatest:@[ sideEffectingSignal, sideEffectingSignal, sideEffectingSignal ] reduce:^(id x, id y, id z) { return [NSString stringWithFormat:@"%@%@%@", x, y, z]; }]; NSMutableArray *receivedValues = [NSMutableArray array]; expect(@(counter)).to(equal(@0)); [combined subscribeNext:^(id x) { [receivedValues addObject:x]; }]; expect(@(counter)).to(equal(@3)); expect(receivedValues).to(equal(@[ @"123" ])); }); }); qck_describe(@"distinctUntilChanged", ^{ qck_it(@"should only send values that are distinct from the previous value", ^{ RACSignal *sub = [[RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; [subscriber sendNext:@2]; [subscriber sendNext:@1]; [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }] distinctUntilChanged]; NSArray *values = sub.toArray; NSArray *expected = @[ @1, @2, @1 ]; expect(values).to(equal(expected)); }); qck_it(@"shouldn't consider nils to always be distinct", ^{ RACSignal *sub = [[RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:nil]; [subscriber sendNext:nil]; [subscriber sendNext:nil]; [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }] distinctUntilChanged]; NSArray *values = sub.toArray; NSArray *expected = @[ @1, [NSNull null], @1 ]; expect(values).to(equal(expected)); }); qck_it(@"should consider initial nil to be distinct", ^{ RACSignal *sub = [[RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:nil]; [subscriber sendNext:nil]; [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }] distinctUntilChanged]; NSArray *values = sub.toArray; NSArray *expected = @[ [NSNull null], @1 ]; expect(values).to(equal(expected)); }); }); qck_describe(@"RACObserve", ^{ __block RACTestObject *testObject; qck_beforeEach(^{ testObject = [[RACTestObject alloc] init]; }); qck_it(@"should work with object properties", ^{ NSArray *expected = @[ @"hello", @"world" ]; testObject.objectValue = expected[0]; NSMutableArray *valuesReceived = [NSMutableArray array]; [RACObserve(testObject, objectValue) subscribeNext:^(id x) { [valuesReceived addObject:x]; }]; testObject.objectValue = expected[1]; expect(valuesReceived).to(equal(expected)); }); qck_it(@"should work with non-object properties", ^{ NSArray *expected = @[ @42, @43 ]; testObject.integerValue = [expected[0] integerValue]; NSMutableArray *valuesReceived = [NSMutableArray array]; [RACObserve(testObject, integerValue) subscribeNext:^(id x) { [valuesReceived addObject:x]; }]; testObject.integerValue = [expected[1] integerValue]; expect(valuesReceived).to(equal(expected)); }); qck_it(@"should read the initial value upon subscription", ^{ testObject.objectValue = @"foo"; RACSignal *signal = RACObserve(testObject, objectValue); testObject.objectValue = @"bar"; expect([signal first]).to(equal(@"bar")); }); }); qck_describe(@"-setKeyPath:onObject:", ^{ id setupBlock = ^(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) { [signal setKeyPath:keyPath onObject:testObject nilValue:nilValue]; }; qck_itBehavesLike(RACPropertySignalExamples, ^{ return @{ RACPropertySignalExamplesSetupBlock: setupBlock }; }); qck_it(@"shouldn't send values to dealloc'd objects", ^{ RACSubject *subject = [RACSubject subject]; @autoreleasepool { RACTestObject *testObject __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init]; [subject setKeyPath:@keypath(testObject.objectValue) onObject:testObject]; expect(testObject.objectValue).to(beNil()); [subject sendNext:@1]; expect(testObject.objectValue).to(equal(@1)); [subject sendNext:@2]; expect(testObject.objectValue).to(equal(@2)); } // This shouldn't do anything. [subject sendNext:@3]; }); qck_it(@"should allow a new derivation after the signal's completed", ^{ RACSubject *subject1 = [RACSubject subject]; RACTestObject *testObject = [[RACTestObject alloc] init]; [subject1 setKeyPath:@keypath(testObject.objectValue) onObject:testObject]; [subject1 sendCompleted]; RACSubject *subject2 = [RACSubject subject]; // This will assert if the previous completion didn't dispose of the // subscription. [subject2 setKeyPath:@keypath(testObject.objectValue) onObject:testObject]; }); qck_it(@"should set the given value when nil is received", ^{ RACSubject *subject = [RACSubject subject]; RACTestObject *testObject = [[RACTestObject alloc] init]; [subject setKeyPath:@keypath(testObject.integerValue) onObject:testObject nilValue:@5]; [subject sendNext:@1]; expect(@(testObject.integerValue)).to(equal(@1)); [subject sendNext:nil]; expect(@(testObject.integerValue)).to(equal(@5)); [subject sendCompleted]; expect(@(testObject.integerValue)).to(equal(@5)); }); qck_it(@"should keep object alive over -sendNext:", ^{ RACSubject *subject = [RACSubject subject]; __block RACTestObject *testObject = [[RACTestObject alloc] init]; __block id deallocValue; __unsafe_unretained RACTestObject *unsafeTestObject = testObject; [testObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocValue = unsafeTestObject.slowObjectValue; }]]; [subject setKeyPath:@keypath(testObject.slowObjectValue) onObject:testObject]; expect(testObject.slowObjectValue).to(beNil()); // Attempt to deallocate concurrently. [[RACScheduler scheduler] afterDelay:0.01 schedule:^{ testObject = nil; }]; expect(deallocValue).to(beNil()); [subject sendNext:@1]; expect(deallocValue).to(equal(@1)); }); }); qck_describe(@"memory management", ^{ qck_it(@"should dealloc signals if the signal does nothing", ^{ __block BOOL deallocd = NO; @autoreleasepool { RACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id subscriber) { return nil; }]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocd = YES; }]]; } expect(@(deallocd)).toEventually(beTruthy()); }); qck_it(@"should dealloc signals if the signal immediately completes", ^{ __block BOOL deallocd = NO; @autoreleasepool { __block BOOL done = NO; RACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendCompleted]; return nil; }]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocd = YES; }]]; [signal subscribeCompleted:^{ done = YES; }]; expect(@(done)).toEventually(beTruthy()); } expect(@(deallocd)).toEventually(beTruthy()); }); qck_it(@"should dealloc a replay subject if it completes immediately", ^{ __block BOOL completed = NO; __block BOOL deallocd = NO; @autoreleasepool { RACReplaySubject *subject __attribute__((objc_precise_lifetime)) = [RACReplaySubject subject]; [subject sendCompleted]; [subject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocd = YES; }]]; [subject subscribeCompleted:^{ completed = YES; }]; } expect(@(completed)).toEventually(beTruthy()); expect(@(deallocd)).toEventually(beTruthy()); }); qck_it(@"should dealloc if the signal was created on a background queue", ^{ __block BOOL completed = NO; __block BOOL deallocd = NO; @autoreleasepool { [[RACScheduler scheduler] schedule:^{ RACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendCompleted]; return nil; }]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocd = YES; }]]; [signal subscribeCompleted:^{ completed = YES; }]; }]; } expect(@(completed)).toEventually(beTruthy()); expect(@(deallocd)).toEventually(beTruthy()); }); qck_it(@"should dealloc if the signal was created on a background queue, never gets any subscribers, and the background queue gets delayed", ^{ __block BOOL deallocd = NO; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); @autoreleasepool { [[RACScheduler scheduler] schedule:^{ RACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id subscriber) { return nil; }]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ deallocd = YES; dispatch_semaphore_signal(semaphore); }]]; [NSThread sleepForTimeInterval:1]; expect(@(deallocd)).to(beFalsy()); }]; } dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); expect(@(deallocd)).to(beTruthy()); }); qck_it(@"should retain intermediate signals when subscribing", ^{ RACSubject *subject = [RACSubject subject]; expect(subject).notTo(beNil()); __block BOOL gotNext = NO; __block BOOL completed = NO; RACDisposable *disposable; @autoreleasepool { RACSignal *intermediateSignal = [subject doNext:^(id _) { gotNext = YES; }]; expect(intermediateSignal).notTo(beNil()); disposable = [intermediateSignal subscribeCompleted:^{ completed = YES; }]; } [subject sendNext:@5]; expect(@(gotNext)).to(beTruthy()); [subject sendCompleted]; expect(@(completed)).to(beTruthy()); [disposable dispose]; }); }); qck_describe(@"-merge:", ^{ __block RACSubject *sub1; __block RACSubject *sub2; __block RACSignal *merged; qck_beforeEach(^{ sub1 = [RACSubject subject]; sub2 = [RACSubject subject]; merged = [sub1 merge:sub2]; }); qck_it(@"should send all values from both signals", ^{ NSMutableArray *values = [NSMutableArray array]; [merged subscribeNext:^(id x) { [values addObject:x]; }]; [sub1 sendNext:@1]; [sub2 sendNext:@2]; [sub2 sendNext:@3]; [sub1 sendNext:@4]; NSArray *expected = @[ @1, @2, @3, @4 ]; expect(values).to(equal(expected)); }); qck_it(@"should send an error if one occurs", ^{ __block NSError *errorReceived; [merged subscribeError:^(NSError *error) { errorReceived = error; }]; [sub1 sendError:RACSignalTestError]; expect(errorReceived).to(equal(RACSignalTestError)); }); qck_it(@"should complete only after both signals complete", ^{ NSMutableArray *values = [NSMutableArray array]; __block BOOL completed = NO; [merged subscribeNext:^(id x) { [values addObject:x]; } completed:^{ completed = YES; }]; [sub1 sendNext:@1]; [sub2 sendNext:@2]; [sub2 sendNext:@3]; [sub2 sendCompleted]; expect(@(completed)).to(beFalsy()); [sub1 sendNext:@4]; [sub1 sendCompleted]; expect(@(completed)).to(beTruthy()); NSArray *expected = @[ @1, @2, @3, @4 ]; expect(values).to(equal(expected)); }); qck_it(@"should complete only after both signals complete for any number of subscribers", ^{ __block BOOL completed1 = NO; __block BOOL completed2 = NO; [merged subscribeCompleted:^{ completed1 = YES; }]; [merged subscribeCompleted:^{ completed2 = YES; }]; expect(@(completed1)).to(beFalsy()); expect(@(completed2)).to(beFalsy()); [sub1 sendCompleted]; [sub2 sendCompleted]; expect(@(completed1)).to(beTruthy()); expect(@(completed2)).to(beTruthy()); }); }); qck_describe(@"+merge:", ^{ __block RACSubject *sub1; __block RACSubject *sub2; __block RACSignal *merged; qck_beforeEach(^{ sub1 = [RACSubject subject]; sub2 = [RACSubject subject]; merged = [RACSignal merge:@[ sub1, sub2 ].objectEnumerator]; }); qck_it(@"should send all values from both signals", ^{ NSMutableArray *values = [NSMutableArray array]; [merged subscribeNext:^(id x) { [values addObject:x]; }]; [sub1 sendNext:@1]; [sub2 sendNext:@2]; [sub2 sendNext:@3]; [sub1 sendNext:@4]; NSArray *expected = @[ @1, @2, @3, @4 ]; expect(values).to(equal(expected)); }); qck_it(@"should send an error if one occurs", ^{ __block NSError *errorReceived; [merged subscribeError:^(NSError *error) { errorReceived = error; }]; [sub1 sendError:RACSignalTestError]; expect(errorReceived).to(equal(RACSignalTestError)); }); qck_it(@"should complete only after both signals complete", ^{ NSMutableArray *values = [NSMutableArray array]; __block BOOL completed = NO; [merged subscribeNext:^(id x) { [values addObject:x]; } completed:^{ completed = YES; }]; [sub1 sendNext:@1]; [sub2 sendNext:@2]; [sub2 sendNext:@3]; [sub2 sendCompleted]; expect(@(completed)).to(beFalsy()); [sub1 sendNext:@4]; [sub1 sendCompleted]; expect(@(completed)).to(beTruthy()); NSArray *expected = @[ @1, @2, @3, @4 ]; expect(values).to(equal(expected)); }); qck_it(@"should complete immediately when not given any signals", ^{ RACSignal *signal = [RACSignal merge:@[].objectEnumerator]; __block BOOL completed = NO; [signal subscribeCompleted:^{ completed = YES; }]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should complete only after both signals complete for any number of subscribers", ^{ __block BOOL completed1 = NO; __block BOOL completed2 = NO; [merged subscribeCompleted:^{ completed1 = YES; }]; [merged subscribeCompleted:^{ completed2 = YES; }]; expect(@(completed1)).to(beFalsy()); expect(@(completed2)).to(beFalsy()); [sub1 sendCompleted]; [sub2 sendCompleted]; expect(@(completed1)).to(beTruthy()); expect(@(completed2)).to(beTruthy()); }); }); qck_describe(@"-flatten:", ^{ __block BOOL subscribedTo1 = NO; __block BOOL subscribedTo2 = NO; __block BOOL subscribedTo3 = NO; __block RACSignal *sub1; __block RACSignal *sub2; __block RACSignal *sub3; __block RACSubject *subject1; __block RACSubject *subject2; __block RACSubject *subject3; __block RACSubject *signalsSubject; __block NSMutableArray *values; qck_beforeEach(^{ subscribedTo1 = NO; subject1 = [RACSubject subject]; sub1 = [RACSignal defer:^{ subscribedTo1 = YES; return subject1; }]; subscribedTo2 = NO; subject2 = [RACSubject subject]; sub2 = [RACSignal defer:^{ subscribedTo2 = YES; return subject2; }]; subscribedTo3 = NO; subject3 = [RACSubject subject]; sub3 = [RACSignal defer:^{ subscribedTo3 = YES; return subject3; }]; signalsSubject = [RACSubject subject]; values = [NSMutableArray array]; }); qck_describe(@"when its max is 0", ^{ qck_it(@"should merge all the signals concurrently", ^{ [[signalsSubject flatten:0] subscribeNext:^(id x) { [values addObject:x]; }]; expect(@(subscribedTo1)).to(beFalsy()); expect(@(subscribedTo2)).to(beFalsy()); expect(@(subscribedTo3)).to(beFalsy()); [signalsSubject sendNext:sub1]; [signalsSubject sendNext:sub2]; expect(@(subscribedTo1)).to(beTruthy()); expect(@(subscribedTo2)).to(beTruthy()); expect(@(subscribedTo3)).to(beFalsy()); [subject1 sendNext:@1]; [signalsSubject sendNext:sub3]; expect(@(subscribedTo1)).to(beTruthy()); expect(@(subscribedTo2)).to(beTruthy()); expect(@(subscribedTo3)).to(beTruthy()); [subject1 sendCompleted]; [subject2 sendNext:@2]; [subject2 sendCompleted]; [subject3 sendNext:@3]; [subject3 sendCompleted]; NSArray *expected = @[ @1, @2, @3 ]; expect(values).to(equal(expected)); }); qck_itBehavesLike(RACSignalMergeConcurrentCompletionExampleGroup, ^{ return @{ RACSignalMaxConcurrent: @0 }; }); }); qck_describe(@"when its max is > 0", ^{ qck_it(@"should merge only the given number at a time", ^{ [[signalsSubject flatten:1] subscribeNext:^(id x) { [values addObject:x]; }]; expect(@(subscribedTo1)).to(beFalsy()); expect(@(subscribedTo2)).to(beFalsy()); expect(@(subscribedTo3)).to(beFalsy()); [signalsSubject sendNext:sub1]; [signalsSubject sendNext:sub2]; expect(@(subscribedTo1)).to(beTruthy()); expect(@(subscribedTo2)).to(beFalsy()); expect(@(subscribedTo3)).to(beFalsy()); [subject1 sendNext:@1]; [signalsSubject sendNext:sub3]; expect(@(subscribedTo1)).to(beTruthy()); expect(@(subscribedTo2)).to(beFalsy()); expect(@(subscribedTo3)).to(beFalsy()); [signalsSubject sendCompleted]; expect(@(subscribedTo1)).to(beTruthy()); expect(@(subscribedTo2)).to(beFalsy()); expect(@(subscribedTo3)).to(beFalsy()); [subject1 sendCompleted]; expect(@(subscribedTo2)).to(beTruthy()); expect(@(subscribedTo3)).to(beFalsy()); [subject2 sendNext:@2]; [subject2 sendCompleted]; expect(@(subscribedTo3)).to(beTruthy()); [subject3 sendNext:@3]; [subject3 sendCompleted]; NSArray *expected = @[ @1, @2, @3 ]; expect(values).to(equal(expected)); }); qck_itBehavesLike(RACSignalMergeConcurrentCompletionExampleGroup, ^{ return @{ RACSignalMaxConcurrent: @1 }; }); }); qck_it(@"shouldn't create a retain cycle", ^{ __block BOOL subjectDeallocd = NO; __block BOOL signalDeallocd = NO; @autoreleasepool { RACSubject *subject __attribute__((objc_precise_lifetime)) = [RACSubject subject]; [subject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ subjectDeallocd = YES; }]]; RACSignal *signal __attribute__((objc_precise_lifetime)) = [subject flatten]; [signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ signalDeallocd = YES; }]]; [signal subscribeCompleted:^{}]; [subject sendCompleted]; } expect(@(subjectDeallocd)).toEventually(beTruthy()); expect(@(signalDeallocd)).toEventually(beTruthy()); }); qck_it(@"should not crash when disposing while subscribing", ^{ RACDisposable *disposable = [[signalsSubject flatten:0] subscribeCompleted:^{ }]; [signalsSubject sendNext:[RACSignal createSignal:^ RACDisposable * (id subscriber) { [disposable dispose]; [subscriber sendCompleted]; return nil; }]]; [signalsSubject sendCompleted]; }); qck_it(@"should dispose after last synchronous signal subscription and should not crash", ^{ RACSignal *flattened = [signalsSubject flatten:1]; RACDisposable *flattenDisposable = [flattened subscribeCompleted:^{}]; RACSignal *syncSignal = [RACSignal createSignal:^ RACDisposable *(id subscriber) { expect(@(flattenDisposable.disposed)).to(beFalsy()); [subscriber sendCompleted]; expect(@(flattenDisposable.disposed)).to(beTruthy()); return nil; }]; RACSignal *asyncSignal = [sub1 delay:0]; [signalsSubject sendNext:asyncSignal]; [signalsSubject sendNext:syncSignal]; [signalsSubject sendCompleted]; [subject1 sendCompleted]; expect(@(flattenDisposable.disposed)).toEventually(beTruthy()); }); qck_it(@"should not crash when disposed because of takeUntil:", ^{ for (int i = 0; i < 100; i++) { RACSubject *flattenedReceiver = [RACSubject subject]; RACSignal *done = [flattenedReceiver map:^(NSNumber *n) { return @(n.integerValue == 1); }]; RACSignal *flattened = [signalsSubject flatten:1]; RACDisposable *flattenDisposable = [[flattened takeUntil:[done ignore:@NO]] subscribe:flattenedReceiver]; RACSignal *syncSignal = [RACSignal createSignal:^ RACDisposable *(id subscriber) { expect(@(flattenDisposable.disposed)).to(beFalsy()); [subscriber sendNext:@1]; expect(@(flattenDisposable.disposed)).to(beTruthy()); [subscriber sendCompleted]; return nil; }]; RACSignal *asyncSignal = [sub1 delay:0]; [subject1 sendNext:@0]; [signalsSubject sendNext:asyncSignal]; [signalsSubject sendNext:syncSignal]; [signalsSubject sendCompleted]; [subject1 sendCompleted]; expect(@(flattenDisposable.disposed)).toEventually(beTruthy()); } }); }); qck_describe(@"-switchToLatest", ^{ __block RACSubject *subject; __block NSMutableArray *values; __block NSError *lastError = nil; __block BOOL completed = NO; qck_beforeEach(^{ subject = [RACSubject subject]; values = [NSMutableArray array]; lastError = nil; completed = NO; [[subject switchToLatest] subscribeNext:^(id x) { expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); [values addObject:x]; } error:^(NSError *error) { expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); lastError = error; } completed:^{ expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); completed = YES; }]; }); qck_it(@"should send values from the most recent signal", ^{ [subject sendNext:[RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; return nil; }]]; [subject sendNext:[RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@3]; [subscriber sendNext:@4]; return nil; }]]; NSArray *expected = @[ @1, @2, @3, @4 ]; expect(values).to(equal(expected)); }); qck_it(@"should send errors from the most recent signal", ^{ [subject sendNext:[RACSignal createSignal:^ id (id subscriber) { [subscriber sendError:[NSError errorWithDomain:@"" code:-1 userInfo:nil]]; return nil; }]]; expect(lastError).notTo(beNil()); }); qck_it(@"should not send completed if only the switching signal completes", ^{ [subject sendNext:RACSignal.never]; expect(@(completed)).to(beFalsy()); [subject sendCompleted]; expect(@(completed)).to(beFalsy()); }); qck_it(@"should send completed when the switching signal completes and the last sent signal does", ^{ [subject sendNext:RACSignal.empty]; expect(@(completed)).to(beFalsy()); [subject sendCompleted]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should accept nil signals", ^{ [subject sendNext:nil]; [subject sendNext:[RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; return nil; }]]; NSArray *expected = @[ @1, @2 ]; expect(values).to(equal(expected)); }); qck_it(@"should return a cold signal", ^{ __block NSUInteger subscriptions = 0; RACSignal *signalOfSignals = [RACSignal createSignal:^ RACDisposable * (id subscriber) { subscriptions++; [subscriber sendNext:[RACSignal empty]]; return nil; }]; RACSignal *switched = [signalOfSignals switchToLatest]; [[switched publish] connect]; expect(@(subscriptions)).to(equal(@1)); [[switched publish] connect]; expect(@(subscriptions)).to(equal(@2)); }); }); qck_describe(@"+switch:cases:default:", ^{ __block RACSubject *keySubject; __block RACSubject *subjectZero; __block RACSubject *subjectOne; __block RACSubject *subjectTwo; __block RACSubject *defaultSubject; __block NSMutableArray *values; __block NSError *lastError = nil; __block BOOL completed = NO; qck_beforeEach(^{ keySubject = [RACSubject subject]; subjectZero = [RACSubject subject]; subjectOne = [RACSubject subject]; subjectTwo = [RACSubject subject]; defaultSubject = [RACSubject subject]; values = [NSMutableArray array]; lastError = nil; completed = NO; }); qck_describe(@"switching between values with a default", ^{ __block RACSignal *switchSignal; qck_beforeEach(^{ switchSignal = [RACSignal switch:keySubject cases:@{ @0: subjectZero, @1: subjectOne, @2: subjectTwo, } default:[RACSignal never]]; [switchSignal subscribeNext:^(id x) { expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); [values addObject:x]; } error:^(NSError *error) { expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); lastError = error; } completed:^{ expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); completed = YES; }]; }); qck_it(@"should not send any values before a key is sent", ^{ [subjectZero sendNext:RACUnit.defaultUnit]; [subjectOne sendNext:RACUnit.defaultUnit]; [subjectTwo sendNext:RACUnit.defaultUnit]; expect(values).to(equal(@[])); expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); }); qck_it(@"should send events based on the latest key", ^{ [keySubject sendNext:@0]; [subjectZero sendNext:@"zero"]; [subjectZero sendNext:@"zero"]; [subjectOne sendNext:@"one"]; [subjectTwo sendNext:@"two"]; NSArray *expected = @[ @"zero", @"zero" ]; expect(values).to(equal(expected)); [keySubject sendNext:@1]; [subjectZero sendNext:@"zero"]; [subjectOne sendNext:@"one"]; [subjectTwo sendNext:@"two"]; expected = @[ @"zero", @"zero", @"one" ]; expect(values).to(equal(expected)); expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); [keySubject sendNext:@2]; [subjectZero sendError:[NSError errorWithDomain:@"" code:-1 userInfo:nil]]; [subjectOne sendError:[NSError errorWithDomain:@"" code:-1 userInfo:nil]]; expect(lastError).to(beNil()); [subjectTwo sendError:[NSError errorWithDomain:@"" code:-1 userInfo:nil]]; expect(lastError).notTo(beNil()); }); qck_it(@"should not send completed when only the key signal completes", ^{ [keySubject sendNext:@0]; [subjectZero sendNext:@"zero"]; [keySubject sendCompleted]; expect(values).to(equal(@[ @"zero" ])); expect(@(completed)).to(beFalsy()); }); qck_it(@"should send completed when the key signal and the latest sent signal complete", ^{ [keySubject sendNext:@0]; [subjectZero sendNext:@"zero"]; [keySubject sendCompleted]; [subjectZero sendCompleted]; expect(values).to(equal(@[ @"zero" ])); expect(@(completed)).to(beTruthy()); }); }); qck_it(@"should use the default signal if key that was sent does not have an associated signal", ^{ [[RACSignal switch:keySubject cases:@{ @0: subjectZero, @1: subjectOne, } default:defaultSubject] subscribeNext:^(id x) { [values addObject:x]; }]; [keySubject sendNext:@"not a valid key"]; [defaultSubject sendNext:@"default"]; expect(values).to(equal(@[ @"default" ])); [keySubject sendNext:nil]; [defaultSubject sendNext:@"default"]; expect(values).to(equal((@[ @"default", @"default" ]))); }); qck_it(@"should send an error if key that was sent does not have an associated signal and there's no default", ^{ [[RACSignal switch:keySubject cases:@{ @0: subjectZero, @1: subjectOne, } default:nil] subscribeNext:^(id x) { [values addObject:x]; } error:^(NSError *error) { lastError = error; }]; [keySubject sendNext:@0]; [subjectZero sendNext:@"zero"]; expect(values).to(equal(@[ @"zero" ])); expect(lastError).to(beNil()); [keySubject sendNext:nil]; expect(values).to(equal(@[ @"zero" ])); expect(lastError).notTo(beNil()); expect(lastError.domain).to(equal(RACSignalErrorDomain)); expect(@(lastError.code)).to(equal(@(RACSignalErrorNoMatchingCase))); }); qck_it(@"should match RACTupleNil case when a nil value is sent", ^{ [[RACSignal switch:keySubject cases:@{ RACTupleNil.tupleNil: subjectZero, } default:defaultSubject] subscribeNext:^(id x) { [values addObject:x]; }]; [keySubject sendNext:nil]; [subjectZero sendNext:@"zero"]; expect(values).to(equal(@[ @"zero" ])); }); }); qck_describe(@"+if:then:else", ^{ __block RACSubject *boolSubject; __block RACSubject *trueSubject; __block RACSubject *falseSubject; __block NSMutableArray *values; __block NSError *lastError = nil; __block BOOL completed = NO; qck_beforeEach(^{ boolSubject = [RACSubject subject]; trueSubject = [RACSubject subject]; falseSubject = [RACSubject subject]; values = [NSMutableArray array]; lastError = nil; completed = NO; [[RACSignal if:boolSubject then:trueSubject else:falseSubject] subscribeNext:^(id x) { expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); [values addObject:x]; } error:^(NSError *error) { expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); lastError = error; } completed:^{ expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); completed = YES; }]; }); qck_it(@"should not send any values before a boolean is sent", ^{ [trueSubject sendNext:RACUnit.defaultUnit]; [falseSubject sendNext:RACUnit.defaultUnit]; expect(values).to(equal(@[])); expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); }); qck_it(@"should send events based on the latest boolean", ^{ [boolSubject sendNext:@YES]; [trueSubject sendNext:@"foo"]; [falseSubject sendNext:@"buzz"]; [trueSubject sendNext:@"bar"]; NSArray *expected = @[ @"foo", @"bar" ]; expect(values).to(equal(expected)); expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); [boolSubject sendNext:@NO]; [trueSubject sendNext:@"baz"]; [falseSubject sendNext:@"buzz"]; [trueSubject sendNext:@"barfoo"]; expected = @[ @"foo", @"bar", @"buzz" ]; expect(values).to(equal(expected)); expect(lastError).to(beNil()); expect(@(completed)).to(beFalsy()); [trueSubject sendError:[NSError errorWithDomain:@"" code:-1 userInfo:nil]]; expect(lastError).to(beNil()); [falseSubject sendError:[NSError errorWithDomain:@"" code:-1 userInfo:nil]]; expect(lastError).notTo(beNil()); }); qck_it(@"should not send completed when only the BOOL signal completes", ^{ [boolSubject sendNext:@YES]; [trueSubject sendNext:@"foo"]; [boolSubject sendCompleted]; expect(values).to(equal(@[ @"foo" ])); expect(@(completed)).to(beFalsy()); }); qck_it(@"should send completed when the BOOL signal and the latest sent signal complete", ^{ [boolSubject sendNext:@YES]; [trueSubject sendNext:@"foo"]; [trueSubject sendCompleted]; [boolSubject sendCompleted]; expect(values).to(equal(@[ @"foo" ])); expect(@(completed)).to(beTruthy()); }); }); qck_describe(@"+interval:onScheduler: and +interval:onScheduler:withLeeway:", ^{ static const NSTimeInterval interval = 0.1; static const NSTimeInterval leeway = 0.2; __block void (^testTimer)(RACSignal *, NSNumber *, NSNumber *) = nil; qck_beforeEach(^{ testTimer = [^(RACSignal *timer, NSNumber *minInterval, NSNumber *leeway) { __block NSUInteger nextsReceived = 0; NSTimeInterval startTime = NSDate.timeIntervalSinceReferenceDate; [[timer take:3] subscribeNext:^(NSDate *date) { ++nextsReceived; NSTimeInterval currentTime = date.timeIntervalSinceReferenceDate; // Uniformly distribute the expected interval for all // received values. We do this instead of saving a timestamp // because a delayed interval may cause the _next_ value to // send sooner than the interval. NSTimeInterval expectedMinInterval = minInterval.doubleValue * nextsReceived; NSTimeInterval expectedMaxInterval = expectedMinInterval + leeway.doubleValue * 3 + 0.1; expect(@(currentTime - startTime)).to(beGreaterThanOrEqualTo(@(expectedMinInterval))); expect(@(currentTime - startTime)).to(beLessThanOrEqualTo(@(expectedMaxInterval))); }]; expect(@(nextsReceived)).toEventually(equal(@3)); } copy]; }); qck_describe(@"+interval:onScheduler:", ^{ qck_it(@"should work on the main thread scheduler", ^{ testTimer([RACSignal interval:interval onScheduler:RACScheduler.mainThreadScheduler], @(interval), @0); }); qck_it(@"should work on a background scheduler", ^{ testTimer([RACSignal interval:interval onScheduler:[RACScheduler scheduler]], @(interval), @0); }); }); qck_describe(@"+interval:onScheduler:withLeeway:", ^{ qck_it(@"should work on the main thread scheduler", ^{ testTimer([RACSignal interval:interval onScheduler:RACScheduler.mainThreadScheduler withLeeway:leeway], @(interval), @(leeway)); }); qck_it(@"should work on a background scheduler", ^{ testTimer([RACSignal interval:interval onScheduler:[RACScheduler scheduler] withLeeway:leeway], @(interval), @(leeway)); }); }); }); qck_describe(@"-timeout:onScheduler:", ^{ __block RACSubject *subject; qck_beforeEach(^{ subject = [RACSubject subject]; }); qck_it(@"should time out", ^{ RACTestScheduler *scheduler = [[RACTestScheduler alloc] init]; __block NSError *receivedError = nil; [[subject timeout:1 onScheduler:scheduler] subscribeError:^(NSError *e) { receivedError = e; }]; expect(receivedError).to(beNil()); [scheduler stepAll]; expect(receivedError).toEventuallyNot(beNil()); expect(receivedError.domain).to(equal(RACSignalErrorDomain)); expect(@(receivedError.code)).to(equal(@(RACSignalErrorTimedOut))); }); qck_it(@"should pass through events while not timed out", ^{ __block id next = nil; __block BOOL completed = NO; [[subject timeout:1 onScheduler:RACScheduler.mainThreadScheduler] subscribeNext:^(id x) { next = x; } completed:^{ completed = YES; }]; [subject sendNext:RACUnit.defaultUnit]; expect(next).to(equal(RACUnit.defaultUnit)); [subject sendCompleted]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should not time out after disposal", ^{ RACTestScheduler *scheduler = [[RACTestScheduler alloc] init]; __block NSError *receivedError = nil; RACDisposable *disposable = [[subject timeout:1 onScheduler:scheduler] subscribeError:^(NSError *e) { receivedError = e; }]; [disposable dispose]; [scheduler stepAll]; expect(receivedError).to(beNil()); }); }); qck_describe(@"-delay:", ^{ __block RACSubject *subject; __block RACSignal *delayedSignal; qck_beforeEach(^{ subject = [RACSubject subject]; delayedSignal = [subject delay:0]; }); qck_it(@"should delay nexts", ^{ __block id next = nil; [delayedSignal subscribeNext:^(id x) { next = x; }]; [subject sendNext:@"foo"]; expect(next).to(beNil()); expect(next).toEventually(equal(@"foo")); }); qck_it(@"should delay completed", ^{ __block BOOL completed = NO; [delayedSignal subscribeCompleted:^{ completed = YES; }]; [subject sendCompleted]; expect(@(completed)).to(beFalsy()); expect(@(completed)).toEventually(beTruthy()); }); qck_it(@"should not delay errors", ^{ __block NSError *error = nil; [delayedSignal subscribeError:^(NSError *e) { error = e; }]; [subject sendError:RACSignalTestError]; expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should cancel delayed events when disposed", ^{ __block id next = nil; RACDisposable *disposable = [delayedSignal subscribeNext:^(id x) { next = x; }]; [subject sendNext:@"foo"]; __block BOOL done = NO; [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{ done = YES; }]; [disposable dispose]; expect(@(done)).toEventually(beTruthy()); expect(next).to(beNil()); }); }); qck_describe(@"-catch:", ^{ qck_it(@"should subscribe to ensuing signal on error", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [subject catch:^(NSError *error) { return [RACSignal return:@41]; }]; __block id value = nil; [signal subscribeNext:^(id x) { value = x; }]; [subject sendError:RACSignalTestError]; expect(value).to(equal(@41)); }); qck_it(@"should prevent source error from propagating", ^{ RACSubject *subject = [RACSubject subject]; RACSignal *signal = [subject catch:^(NSError *error) { return [RACSignal empty]; }]; __block BOOL errorReceived = NO; [signal subscribeError:^(NSError *error) { errorReceived = YES; }]; [subject sendError:RACSignalTestError]; expect(@(errorReceived)).to(beFalsy()); }); qck_it(@"should propagate error from ensuing signal", ^{ RACSubject *subject = [RACSubject subject]; NSError *secondaryError = [NSError errorWithDomain:@"bubs" code:41 userInfo:nil]; RACSignal *signal = [subject catch:^(NSError *error) { return [RACSignal error:secondaryError]; }]; __block NSError *errorReceived = nil; [signal subscribeError:^(NSError *error) { errorReceived = error; }]; [subject sendError:RACSignalTestError]; expect(errorReceived).to(equal(secondaryError)); }); qck_it(@"should dispose ensuing signal", ^{ RACSubject *subject = [RACSubject subject]; __block BOOL disposed = NO; RACSignal *signal = [subject catch:^(NSError *error) { return [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; }]; RACDisposable *disposable = [signal subscribeCompleted:^{}]; [subject sendError:RACSignalTestError]; [disposable dispose]; expect(@(disposed)).toEventually(beTruthy()); }); }); qck_describe(@"+try:", ^{ __block id value; __block NSError *receivedError; qck_beforeEach(^{ value = nil; receivedError = nil; }); qck_it(@"should pass the value if it is non-nil", ^{ RACSignal *signal = [RACSignal try:^(NSError **error) { return @"foo"; }]; [signal subscribeNext:^(id x) { value = x; } error:^(NSError *error) { receivedError = error; }]; expect(value).to(equal(@"foo")); expect(receivedError).to(beNil()); }); qck_it(@"should ignore the error if the value is non-nil", ^{ RACSignal *signal = [RACSignal try:^(NSError **error) { if (error != nil) *error = RACSignalTestError; return @"foo"; }]; [signal subscribeNext:^(id x) { value = x; } error:^(NSError *error) { receivedError = error; }]; expect(receivedError).to(beNil()); expect(value).to(equal(@"foo")); }); qck_it(@"should send the error if the return value is nil", ^{ RACSignal *signal = [RACSignal try:^id(NSError **error) { if (error) *error = RACSignalTestError; return nil; }]; [signal subscribeNext:^(id x) { value = x; } error:^(NSError *error) { receivedError = error; }]; expect(value).to(beNil()); expect(receivedError).to(equal(RACSignalTestError)); }); }); qck_describe(@"-try:", ^{ __block RACSubject *subject; __block NSError *receivedError; __block NSMutableArray *nextValues; __block BOOL completed; qck_beforeEach(^{ subject = [RACSubject subject]; nextValues = [NSMutableArray array]; completed = NO; receivedError = nil; [[subject try:^(NSString *value, NSError **error) { if (value != nil) return YES; if (error != nil) *error = RACSignalTestError; return NO; }] subscribeNext:^(id x) { [nextValues addObject:x]; } error:^(NSError *error) { receivedError = error; } completed:^{ completed = YES; }]; }); qck_it(@"should pass values while YES is returned from the tryBlock", ^{ [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; [subject sendNext:@"baz"]; [subject sendNext:@"buzz"]; [subject sendCompleted]; NSArray *receivedValues = [nextValues copy]; NSArray *expectedValues = @[ @"foo", @"bar", @"baz", @"buzz" ]; expect(receivedError).to(beNil()); expect(receivedValues).to(equal(expectedValues)); expect(@(completed)).to(beTruthy()); }); qck_it(@"should pass values until NO is returned from the tryBlock", ^{ [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; [subject sendNext:nil]; [subject sendNext:@"buzz"]; [subject sendCompleted]; NSArray *receivedValues = [nextValues copy]; NSArray *expectedValues = @[ @"foo", @"bar" ]; expect(receivedError).to(equal(RACSignalTestError)); expect(receivedValues).to(equal(expectedValues)); expect(@(completed)).to(beFalsy()); }); }); qck_describe(@"-tryMap:", ^{ __block RACSubject *subject; __block NSError *receivedError; __block NSMutableArray *nextValues; __block BOOL completed; qck_beforeEach(^{ subject = [RACSubject subject]; nextValues = [NSMutableArray array]; completed = NO; receivedError = nil; [[subject tryMap:^ id (NSString *value, NSError **error) { if (value != nil) return [NSString stringWithFormat:@"%@_a", value]; if (error != nil) *error = RACSignalTestError; return nil; }] subscribeNext:^(id x) { [nextValues addObject:x]; } error:^(NSError *error) { receivedError = error; } completed:^{ completed = YES; }]; }); qck_it(@"should map values with the mapBlock", ^{ [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; [subject sendNext:@"baz"]; [subject sendNext:@"buzz"]; [subject sendCompleted]; NSArray *receivedValues = [nextValues copy]; NSArray *expectedValues = @[ @"foo_a", @"bar_a", @"baz_a", @"buzz_a" ]; expect(receivedError).to(beNil()); expect(receivedValues).to(equal(expectedValues)); expect(@(completed)).to(beTruthy()); }); qck_it(@"should map values with the mapBlock, until the mapBlock returns nil", ^{ [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; [subject sendNext:nil]; [subject sendNext:@"buzz"]; [subject sendCompleted]; NSArray *receivedValues = [nextValues copy]; NSArray *expectedValues = @[ @"foo_a", @"bar_a" ]; expect(receivedError).to(equal(RACSignalTestError)); expect(receivedValues).to(equal(expectedValues)); expect(@(completed)).to(beFalsy()); }); }); qck_describe(@"throttling", ^{ __block RACSubject *subject; qck_beforeEach(^{ subject = [RACSubject subject]; }); qck_describe(@"-throttle:", ^{ __block RACSignal *throttledSignal; qck_beforeEach(^{ throttledSignal = [subject throttle:0]; }); qck_it(@"should throttle nexts", ^{ NSMutableArray *valuesReceived = [NSMutableArray array]; [throttledSignal subscribeNext:^(id x) { [valuesReceived addObject:x]; }]; [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; expect(valuesReceived).to(equal(@[])); NSArray *expected = @[ @"bar" ]; expect(valuesReceived).toEventually(equal(expected)); [subject sendNext:@"buzz"]; expect(valuesReceived).to(equal(expected)); expected = @[ @"bar", @"buzz" ]; expect(valuesReceived).toEventually(equal(expected)); }); qck_it(@"should forward completed immediately", ^{ __block BOOL completed = NO; [throttledSignal subscribeCompleted:^{ completed = YES; }]; [subject sendCompleted]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should forward errors immediately", ^{ __block NSError *error = nil; [throttledSignal subscribeError:^(NSError *e) { error = e; }]; [subject sendError:RACSignalTestError]; expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should cancel future nexts when disposed", ^{ __block id next = nil; RACDisposable *disposable = [throttledSignal subscribeNext:^(id x) { next = x; }]; [subject sendNext:@"foo"]; __block BOOL done = NO; [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{ done = YES; }]; [disposable dispose]; expect(@(done)).toEventually(beTruthy()); expect(next).to(beNil()); }); }); qck_describe(@"-throttle:valuesPassingTest:", ^{ __block RACSignal *throttledSignal; __block BOOL shouldThrottle; qck_beforeEach(^{ shouldThrottle = YES; __block id value = nil; throttledSignal = [[subject doNext:^(id x) { value = x; }] throttle:0 valuesPassingTest:^(id x) { // Make sure that we're given the latest value. expect(x).to(beIdenticalTo(value)); return shouldThrottle; }]; expect(throttledSignal).notTo(beNil()); }); qck_describe(@"nexts", ^{ __block NSMutableArray *valuesReceived; __block NSMutableArray *expected; qck_beforeEach(^{ expected = [[NSMutableArray alloc] init]; valuesReceived = [[NSMutableArray alloc] init]; [throttledSignal subscribeNext:^(id x) { [valuesReceived addObject:x]; }]; }); qck_it(@"should forward unthrottled values immediately", ^{ shouldThrottle = NO; [subject sendNext:@"foo"]; [expected addObject:@"foo"]; expect(valuesReceived).to(equal(expected)); }); qck_it(@"should delay throttled values", ^{ [subject sendNext:@"bar"]; expect(valuesReceived).to(equal(expected)); [expected addObject:@"bar"]; expect(valuesReceived).toEventually(equal(expected)); }); qck_it(@"should drop buffered values when a throttled value arrives", ^{ [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; [subject sendNext:@"buzz"]; expect(valuesReceived).to(equal(expected)); [expected addObject:@"buzz"]; expect(valuesReceived).toEventually(equal(expected)); }); qck_it(@"should drop buffered values when an immediate value arrives", ^{ [subject sendNext:@"foo"]; [subject sendNext:@"bar"]; shouldThrottle = NO; [subject sendNext:@"buzz"]; [expected addObject:@"buzz"]; expect(valuesReceived).to(equal(expected)); // Make sure that nothing weird happens when sending another // throttled value. shouldThrottle = YES; [subject sendNext:@"baz"]; expect(valuesReceived).to(equal(expected)); [expected addObject:@"baz"]; expect(valuesReceived).toEventually(equal(expected)); }); qck_it(@"should not be resent upon completion", ^{ [subject sendNext:@"bar"]; [expected addObject:@"bar"]; expect(valuesReceived).toEventually(equal(expected)); [subject sendCompleted]; expect(valuesReceived).to(equal(expected)); }); }); qck_it(@"should forward completed immediately", ^{ __block BOOL completed = NO; [throttledSignal subscribeCompleted:^{ completed = YES; }]; [subject sendCompleted]; expect(@(completed)).to(beTruthy()); }); qck_it(@"should forward errors immediately", ^{ __block NSError *error = nil; [throttledSignal subscribeError:^(NSError *e) { error = e; }]; [subject sendError:RACSignalTestError]; expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should cancel future nexts when disposed", ^{ __block id next = nil; RACDisposable *disposable = [throttledSignal subscribeNext:^(id x) { next = x; }]; [subject sendNext:@"foo"]; __block BOOL done = NO; [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{ done = YES; }]; [disposable dispose]; expect(@(done)).toEventually(beTruthy()); expect(next).to(beNil()); }); }); }); qck_describe(@"-then:", ^{ qck_it(@"should continue onto returned signal", ^{ RACSubject *subject = [RACSubject subject]; __block id value = nil; [[subject then:^{ return [RACSignal return:@2]; }] subscribeNext:^(id x) { value = x; }]; [subject sendNext:@1]; // The value shouldn't change until the first signal completes. expect(value).to(beNil()); [subject sendCompleted]; expect(value).to(equal(@2)); }); qck_it(@"should sequence even if no next value is sent", ^{ RACSubject *subject = [RACSubject subject]; __block id value = nil; [[subject then:^{ return [RACSignal return:RACUnit.defaultUnit]; }] subscribeNext:^(id x) { value = x; }]; [subject sendCompleted]; expect(value).to(equal(RACUnit.defaultUnit)); }); }); qck_describe(@"-sequence", ^{ RACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; [subscriber sendNext:@3]; [subscriber sendNext:@4]; [subscriber sendCompleted]; return nil; }]; qck_itBehavesLike(RACSequenceExamples, ^{ return @{ RACSequenceExampleSequence: signal.sequence, RACSequenceExampleExpectedValues: @[ @1, @2, @3, @4 ] }; }); }); qck_it(@"should complete take: even if the original signal doesn't", ^{ RACSignal *sendOne = [RACSignal createSignal:^ RACDisposable * (id subscriber) { [subscriber sendNext:RACUnit.defaultUnit]; return nil; }]; __block id value = nil; __block BOOL completed = NO; [[sendOne take:1] subscribeNext:^(id received) { value = received; } completed:^{ completed = YES; }]; expect(value).to(equal(RACUnit.defaultUnit)); expect(@(completed)).to(beTruthy()); }); qck_it(@"should complete take: even if the signal is recursive", ^{ RACSubject *subject = [RACSubject subject]; const NSUInteger number = 3; const NSUInteger guard = number + 1; NSMutableArray *values = NSMutableArray.array; __block BOOL completed = NO; [[subject take:number] subscribeNext:^(NSNumber* received) { [values addObject:received]; if (values.count >= guard) { [subject sendError:RACSignalTestError]; } [subject sendNext:@(received.integerValue + 1)]; } completed:^{ completed = YES; }]; [subject sendNext:@0]; NSMutableArray* expectedValues = [NSMutableArray arrayWithCapacity:number]; for (NSUInteger i = 0 ; i < number ; ++i) { [expectedValues addObject:@(i)]; } expect(values).to(equal(expectedValues)); expect(@(completed)).to(beTruthy()); }); qck_describe(@"+zip:", ^{ __block RACSubject *subject1 = nil; __block RACSubject *subject2 = nil; __block BOOL hasSentError = NO; __block BOOL hasSentCompleted = NO; __block RACDisposable *disposable = nil; __block void (^send2NextAndErrorTo1)(void) = nil; __block void (^send3NextAndErrorTo1)(void) = nil; __block void (^send2NextAndCompletedTo2)(void) = nil; __block void (^send3NextAndCompletedTo2)(void) = nil; qck_beforeEach(^{ send2NextAndErrorTo1 = [^{ [subject1 sendNext:@1]; [subject1 sendNext:@2]; [subject1 sendError:RACSignalTestError]; } copy]; send3NextAndErrorTo1 = [^{ [subject1 sendNext:@1]; [subject1 sendNext:@2]; [subject1 sendNext:@3]; [subject1 sendError:RACSignalTestError]; } copy]; send2NextAndCompletedTo2 = [^{ [subject2 sendNext:@1]; [subject2 sendNext:@2]; [subject2 sendCompleted]; } copy]; send3NextAndCompletedTo2 = [^{ [subject2 sendNext:@1]; [subject2 sendNext:@2]; [subject2 sendNext:@3]; [subject2 sendCompleted]; } copy]; subject1 = [RACSubject subject]; subject2 = [RACSubject subject]; hasSentError = NO; hasSentCompleted = NO; disposable = [[RACSignal zip:@[ subject1, subject2 ]] subscribeError:^(NSError *error) { hasSentError = YES; } completed:^{ hasSentCompleted = YES; }]; }); qck_afterEach(^{ [disposable dispose]; }); qck_it(@"should complete as soon as no new zipped values are possible", ^{ [subject1 sendNext:@1]; [subject2 sendNext:@1]; expect(@(hasSentCompleted)).to(beFalsy()); [subject1 sendNext:@2]; [subject1 sendCompleted]; expect(@(hasSentCompleted)).to(beFalsy()); [subject2 sendNext:@2]; expect(@(hasSentCompleted)).to(beTruthy()); }); qck_it(@"outcome should not be dependent on order of signals", ^{ [subject2 sendCompleted]; expect(@(hasSentCompleted)).to(beTruthy()); }); qck_it(@"should forward errors sent earlier than (time-wise) and before (position-wise) a complete", ^{ send2NextAndErrorTo1(); send3NextAndCompletedTo2(); expect(@(hasSentError)).to(beTruthy()); expect(@(hasSentCompleted)).to(beFalsy()); }); qck_it(@"should forward errors sent earlier than (time-wise) and after (position-wise) a complete", ^{ send3NextAndErrorTo1(); send2NextAndCompletedTo2(); expect(@(hasSentError)).to(beTruthy()); expect(@(hasSentCompleted)).to(beFalsy()); }); qck_it(@"should forward errors sent later than (time-wise) and before (position-wise) a complete", ^{ send3NextAndCompletedTo2(); send2NextAndErrorTo1(); expect(@(hasSentError)).to(beTruthy()); expect(@(hasSentCompleted)).to(beFalsy()); }); qck_it(@"should ignore errors sent later than (time-wise) and after (position-wise) a complete", ^{ send2NextAndCompletedTo2(); send3NextAndErrorTo1(); expect(@(hasSentError)).to(beFalsy()); expect(@(hasSentCompleted)).to(beTruthy()); }); qck_it(@"should handle signals sending values unevenly", ^{ __block NSError *receivedError = nil; __block BOOL hasCompleted = NO; RACSubject *a = [RACSubject subject]; RACSubject *b = [RACSubject subject]; RACSubject *c = [RACSubject subject]; NSMutableArray *receivedValues = NSMutableArray.array; NSArray *expectedValues = nil; [[RACSignal zip:@[ a, b, c ] reduce:^(NSNumber *a, NSNumber *b, NSNumber *c) { return [NSString stringWithFormat:@"%@%@%@", a, b, c]; }] subscribeNext:^(id x) { [receivedValues addObject:x]; } error:^(NSError *error) { receivedError = error; } completed:^{ hasCompleted = YES; }]; [a sendNext:@1]; [a sendNext:@2]; [a sendNext:@3]; [b sendNext:@1]; [c sendNext:@1]; [c sendNext:@2]; // a: [===......] // b: [=........] // c: [==.......] expectedValues = @[ @"111" ]; expect(receivedValues).to(equal(expectedValues)); expect(receivedError).to(beNil()); expect(@(hasCompleted)).to(beFalsy()); [b sendNext:@2]; [b sendNext:@3]; [b sendNext:@4]; [b sendCompleted]; // a: [===......] // b: [====C....] // c: [==.......] expectedValues = @[ @"111", @"222" ]; expect(receivedValues).to(equal(expectedValues)); expect(receivedError).to(beNil()); expect(@(hasCompleted)).to(beFalsy()); [c sendNext:@3]; [c sendNext:@4]; [c sendNext:@5]; [c sendError:RACSignalTestError]; // a: [===......] // b: [====C....] // c: [=====E...] expectedValues = @[ @"111", @"222", @"333" ]; expect(receivedValues).to(equal(expectedValues)); expect(receivedError).to(equal(RACSignalTestError)); expect(@(hasCompleted)).to(beFalsy()); [a sendNext:@4]; [a sendNext:@5]; [a sendNext:@6]; [a sendNext:@7]; // a: [=======..] // b: [====C....] // c: [=====E...] expectedValues = @[ @"111", @"222", @"333" ]; expect(receivedValues).to(equal(expectedValues)); expect(receivedError).to(equal(RACSignalTestError)); expect(@(hasCompleted)).to(beFalsy()); }); qck_it(@"should handle multiples of the same side-effecting signal", ^{ __block NSUInteger counter = 0; RACSignal *sideEffectingSignal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { ++counter; [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }]; RACSignal *combined = [RACSignal zip:@[ sideEffectingSignal, sideEffectingSignal ] reduce:^ NSString * (id x, id y) { return [NSString stringWithFormat:@"%@%@", x, y]; }]; NSMutableArray *receivedValues = NSMutableArray.array; expect(@(counter)).to(equal(@0)); [combined subscribeNext:^(id x) { [receivedValues addObject:x]; }]; expect(@(counter)).to(equal(@2)); expect(receivedValues).to(equal(@[ @"11" ])); }); }); qck_describe(@"-sample:", ^{ qck_it(@"should send the latest value when the sampler signal fires", ^{ RACSubject *subject = [RACSubject subject]; RACSubject *sampleSubject = [RACSubject subject]; RACSignal *sampled = [subject sample:sampleSubject]; NSMutableArray *values = [NSMutableArray array]; [sampled subscribeNext:^(id x) { [values addObject:x]; }]; [sampleSubject sendNext:RACUnit.defaultUnit]; expect(values).to(equal(@[])); [subject sendNext:@1]; [subject sendNext:@2]; expect(values).to(equal(@[])); [sampleSubject sendNext:RACUnit.defaultUnit]; NSArray *expected = @[ @2 ]; expect(values).to(equal(expected)); [subject sendNext:@3]; expect(values).to(equal(expected)); [sampleSubject sendNext:RACUnit.defaultUnit]; expected = @[ @2, @3 ]; expect(values).to(equal(expected)); [sampleSubject sendNext:RACUnit.defaultUnit]; expected = @[ @2, @3, @3 ]; expect(values).to(equal(expected)); }); }); qck_describe(@"-collect", ^{ __block RACSubject *subject; __block RACSignal *collected; __block id value; __block BOOL hasCompleted; qck_beforeEach(^{ subject = [RACSubject subject]; collected = [subject collect]; value = nil; hasCompleted = NO; [collected subscribeNext:^(id x) { value = x; } completed:^{ hasCompleted = YES; }]; }); qck_it(@"should send a single array when the original signal completes", ^{ NSArray *expected = @[ @1, @2, @3 ]; [subject sendNext:@1]; [subject sendNext:@2]; [subject sendNext:@3]; expect(value).to(beNil()); [subject sendCompleted]; expect(value).to(equal(expected)); expect(@(hasCompleted)).to(beTruthy()); }); qck_it(@"should add NSNull to an array for nil values", ^{ NSArray *expected = @[ NSNull.null, @1, NSNull.null ]; [subject sendNext:nil]; [subject sendNext:@1]; [subject sendNext:nil]; expect(value).to(beNil()); [subject sendCompleted]; expect(value).to(equal(expected)); expect(@(hasCompleted)).to(beTruthy()); }); }); qck_describe(@"-bufferWithTime:onScheduler:", ^{ __block RACTestScheduler *scheduler; __block RACSubject *input; __block RACSignal *bufferedInput; __block RACTuple *latestValue; qck_beforeEach(^{ scheduler = [[RACTestScheduler alloc] init]; input = [RACSubject subject]; bufferedInput = [input bufferWithTime:1 onScheduler:scheduler]; latestValue = nil; [bufferedInput subscribeNext:^(RACTuple *x) { latestValue = x; }]; }); qck_it(@"should buffer nexts", ^{ [input sendNext:@1]; [input sendNext:@2]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(@1, @2))); [input sendNext:@3]; [input sendNext:@4]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(@3, @4))); }); qck_it(@"should not perform buffering until a value is sent", ^{ [input sendNext:@1]; [input sendNext:@2]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(@1, @2))); [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(@1, @2))); [input sendNext:@3]; [input sendNext:@4]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(@3, @4))); }); qck_it(@"should flush any buffered nexts upon completion", ^{ [input sendNext:@1]; [input sendCompleted]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(@1))); }); qck_it(@"should support NSNull values", ^{ [input sendNext:NSNull.null]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(NSNull.null))); }); qck_it(@"should buffer nil values", ^{ [input sendNext:nil]; [scheduler stepAll]; expect(latestValue).to(equal(RACTuplePack(nil))); }); }); qck_describe(@"-concat", ^{ __block RACSubject *subject; __block RACSignal *oneSignal; __block RACSignal *twoSignal; __block RACSignal *threeSignal; __block RACSignal *errorSignal; __block RACSignal *completedSignal; qck_beforeEach(^{ subject = [RACReplaySubject subject]; oneSignal = [RACSignal return:@1]; twoSignal = [RACSignal return:@2]; threeSignal = [RACSignal return:@3]; errorSignal = [RACSignal error:RACSignalTestError]; completedSignal = RACSignal.empty; }); qck_it(@"should concatenate the values of inner signals", ^{ [subject sendNext:oneSignal]; [subject sendNext:twoSignal]; [subject sendNext:completedSignal]; [subject sendNext:threeSignal]; NSMutableArray *values = [NSMutableArray array]; [[subject concat] subscribeNext:^(id x) { [values addObject:x]; }]; NSArray *expected = @[ @1, @2, @3 ]; expect(values).to(equal(expected)); }); qck_it(@"should complete only after all signals complete", ^{ RACReplaySubject *valuesSubject = [RACReplaySubject subject]; [subject sendNext:valuesSubject]; [subject sendCompleted]; [valuesSubject sendNext:@1]; [valuesSubject sendNext:@2]; [valuesSubject sendCompleted]; NSArray *expected = @[ @1, @2 ]; expect([[subject concat] toArray]).to(equal(expected)); }); qck_it(@"should pass through errors", ^{ [subject sendNext:errorSignal]; NSError *error = nil; [[subject concat] firstOrDefault:nil success:NULL error:&error]; expect(error).to(equal(RACSignalTestError)); }); qck_it(@"should concat signals sent later", ^{ [subject sendNext:oneSignal]; NSMutableArray *values = [NSMutableArray array]; [[subject concat] subscribeNext:^(id x) { [values addObject:x]; }]; NSArray *expected = @[ @1 ]; expect(values).to(equal(expected)); [subject sendNext:[twoSignal delay:0]]; expected = @[ @1, @2 ]; expect(values).toEventually(equal(expected)); [subject sendNext:threeSignal]; expected = @[ @1, @2, @3 ]; expect(values).to(equal(expected)); }); qck_it(@"should dispose the current signal", ^{ __block BOOL disposed = NO; __block id innerSubscriber = nil; RACSignal *innerSignal = [RACSignal createSignal:^(id subscriber) { // Keep the subscriber alive so it doesn't trigger disposal on dealloc innerSubscriber = subscriber; return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; RACDisposable *concatDisposable = [[subject concat] subscribeCompleted:^{}]; [subject sendNext:innerSignal]; expect(@(disposed)).notTo(beTruthy()); [concatDisposable dispose]; expect(@(disposed)).to(beTruthy()); }); qck_it(@"should dispose later signals", ^{ __block BOOL disposed = NO; __block id laterSubscriber = nil; RACSignal *laterSignal = [RACSignal createSignal:^(id subscriber) { // Keep the subscriber alive so it doesn't trigger disposal on dealloc laterSubscriber = subscriber; return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; RACSubject *firstSignal = [RACSubject subject]; RACSignal *outerSignal = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:firstSignal]; [subscriber sendNext:laterSignal]; return nil; }]; RACDisposable *concatDisposable = [[outerSignal concat] subscribeCompleted:^{}]; [firstSignal sendCompleted]; expect(@(disposed)).notTo(beTruthy()); [concatDisposable dispose]; expect(@(disposed)).to(beTruthy()); }); }); qck_describe(@"-initially:", ^{ __block RACSubject *subject; __block NSUInteger initiallyInvokedCount; __block RACSignal *signal; qck_beforeEach(^{ subject = [RACSubject subject]; initiallyInvokedCount = 0; signal = [subject initially:^{ ++initiallyInvokedCount; }]; }); qck_it(@"should not run without a subscription", ^{ [subject sendCompleted]; expect(@(initiallyInvokedCount)).to(equal(@0)); }); qck_it(@"should run on subscription", ^{ [signal subscribe:[RACSubscriber new]]; expect(@(initiallyInvokedCount)).to(equal(@1)); }); qck_it(@"should re-run for each subscription", ^{ [signal subscribe:[RACSubscriber new]]; [signal subscribe:[RACSubscriber new]]; expect(@(initiallyInvokedCount)).to(equal(@2)); }); }); qck_describe(@"-finally:", ^{ __block RACSubject *subject; __block BOOL finallyInvoked; __block RACSignal *signal; qck_beforeEach(^{ subject = [RACSubject subject]; finallyInvoked = NO; signal = [subject finally:^{ finallyInvoked = YES; }]; }); qck_it(@"should not run finally without a subscription", ^{ [subject sendCompleted]; expect(@(finallyInvoked)).to(beFalsy()); }); qck_describe(@"with a subscription", ^{ __block RACDisposable *disposable; qck_beforeEach(^{ disposable = [signal subscribeCompleted:^{}]; }); qck_afterEach(^{ [disposable dispose]; }); qck_it(@"should not run finally upon next", ^{ [subject sendNext:RACUnit.defaultUnit]; expect(@(finallyInvoked)).to(beFalsy()); }); qck_it(@"should run finally upon completed", ^{ [subject sendCompleted]; expect(@(finallyInvoked)).to(beTruthy()); }); qck_it(@"should run finally upon error", ^{ [subject sendError:nil]; expect(@(finallyInvoked)).to(beTruthy()); }); }); }); qck_describe(@"-ignoreValues", ^{ __block RACSubject *subject; __block BOOL gotNext; __block BOOL gotCompleted; __block NSError *receivedError; qck_beforeEach(^{ subject = [RACSubject subject]; gotNext = NO; gotCompleted = NO; receivedError = nil; [[subject ignoreValues] subscribeNext:^(id _) { gotNext = YES; } error:^(NSError *error) { receivedError = error; } completed:^{ gotCompleted = YES; }]; }); qck_it(@"should skip nexts and pass through completed", ^{ [subject sendNext:RACUnit.defaultUnit]; [subject sendCompleted]; expect(@(gotNext)).to(beFalsy()); expect(@(gotCompleted)).to(beTruthy()); expect(receivedError).to(beNil()); }); qck_it(@"should skip nexts and pass through errors", ^{ [subject sendNext:RACUnit.defaultUnit]; [subject sendError:RACSignalTestError]; expect(@(gotNext)).to(beFalsy()); expect(@(gotCompleted)).to(beFalsy()); expect(receivedError).to(equal(RACSignalTestError)); }); }); qck_describe(@"-materialize", ^{ qck_it(@"should convert nexts and completed into RACEvents", ^{ NSArray *events = [[[RACSignal return:RACUnit.defaultUnit] materialize] toArray]; NSArray *expected = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], RACEvent.completedEvent ]; expect(events).to(equal(expected)); }); qck_it(@"should convert errors into RACEvents and complete", ^{ NSArray *events = [[[RACSignal error:RACSignalTestError] materialize] toArray]; NSArray *expected = @[ [RACEvent eventWithError:RACSignalTestError] ]; expect(events).to(equal(expected)); }); }); qck_describe(@"-dematerialize", ^{ qck_it(@"should convert nexts from RACEvents", ^{ RACSignal *events = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:[RACEvent eventWithValue:@1]]; [subscriber sendNext:[RACEvent eventWithValue:@2]]; [subscriber sendCompleted]; return nil; }]; NSArray *expected = @[ @1, @2 ]; expect([[events dematerialize] toArray]).to(equal(expected)); }); qck_it(@"should convert completed from a RACEvent", ^{ RACSignal *events = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:[RACEvent eventWithValue:@1]]; [subscriber sendNext:RACEvent.completedEvent]; [subscriber sendNext:[RACEvent eventWithValue:@2]]; [subscriber sendCompleted]; return nil; }]; NSArray *expected = @[ @1 ]; expect([[events dematerialize] toArray]).to(equal(expected)); }); qck_it(@"should convert error from a RACEvent", ^{ RACSignal *events = [RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:[RACEvent eventWithError:RACSignalTestError]]; [subscriber sendNext:[RACEvent eventWithValue:@1]]; [subscriber sendCompleted]; return nil; }]; __block NSError *error = nil; expect([[events dematerialize] firstOrDefault:nil success:NULL error:&error]).to(beNil()); expect(error).to(equal(RACSignalTestError)); }); }); qck_describe(@"-not", ^{ qck_it(@"should invert every BOOL sent", ^{ RACSubject *subject = [RACReplaySubject subject]; [subject sendNext:@NO]; [subject sendNext:@YES]; [subject sendCompleted]; NSArray *results = [[subject not] toArray]; NSArray *expected = @[ @YES, @NO ]; expect(results).to(equal(expected)); }); }); qck_describe(@"-and", ^{ qck_it(@"should return YES if all YES values are sent", ^{ RACSubject *subject = [RACReplaySubject subject]; [subject sendNext:RACTuplePack(@YES, @NO, @YES)]; [subject sendNext:RACTuplePack(@NO, @NO, @NO)]; [subject sendNext:RACTuplePack(@YES, @YES, @YES)]; [subject sendCompleted]; NSArray *results = [[subject and] toArray]; NSArray *expected = @[ @NO, @NO, @YES ]; expect(results).to(equal(expected)); }); }); qck_describe(@"-or", ^{ qck_it(@"should return YES for any YES values sent", ^{ RACSubject *subject = [RACReplaySubject subject]; [subject sendNext:RACTuplePack(@YES, @NO, @YES)]; [subject sendNext:RACTuplePack(@NO, @NO, @NO)]; [subject sendCompleted]; NSArray *results = [[subject or] toArray]; NSArray *expected = @[ @YES, @NO ]; expect(results).to(equal(expected)); }); }); qck_describe(@"-groupBy:", ^{ qck_it(@"should send completed to all grouped signals.", ^{ RACSubject *subject = [RACReplaySubject subject]; __block NSUInteger groupedSignalCount = 0; __block NSUInteger completedGroupedSignalCount = 0; [[subject groupBy:^(NSNumber *number) { return @(floorf(number.floatValue)); }] subscribeNext:^(RACGroupedSignal *groupedSignal) { ++groupedSignalCount; [groupedSignal subscribeCompleted:^{ ++completedGroupedSignalCount; }]; }]; [subject sendNext:@1]; [subject sendNext:@2]; [subject sendCompleted]; expect(@(completedGroupedSignalCount)).to(equal(@(groupedSignalCount))); }); qck_it(@"should send error to all grouped signals.", ^{ RACSubject *subject = [RACReplaySubject subject]; __block NSUInteger groupedSignalCount = 0; __block NSUInteger erroneousGroupedSignalCount = 0; [[subject groupBy:^(NSNumber *number) { return @(floorf(number.floatValue)); }] subscribeNext:^(RACGroupedSignal *groupedSignal) { ++groupedSignalCount; [groupedSignal subscribeError:^(NSError *error) { ++erroneousGroupedSignalCount; expect(error.domain).to(equal(@"TestDomain")); expect(@(error.code)).to(equal(@123)); }]; }]; [subject sendNext:@1]; [subject sendNext:@2]; [subject sendError:[NSError errorWithDomain:@"TestDomain" code:123 userInfo:nil]]; expect(@(erroneousGroupedSignalCount)).to(equal(@(groupedSignalCount))); }); qck_it(@"should send completed in the order grouped signals were created.", ^{ RACSubject *subject = [RACReplaySubject subject]; NSMutableArray *startedSignals = [NSMutableArray array]; NSMutableArray *completedSignals = [NSMutableArray array]; [[subject groupBy:^(NSNumber *number) { return @(number.integerValue % 4); }] subscribeNext:^(RACGroupedSignal *groupedSignal) { [startedSignals addObject:groupedSignal]; [groupedSignal subscribeCompleted:^{ [completedSignals addObject:groupedSignal]; }]; }]; for (NSInteger i = 0; i < 20; i++) { [subject sendNext:@(i)]; } [subject sendCompleted]; expect(completedSignals).to(equal(startedSignals)); }); }); qck_describe(@"starting signals", ^{ qck_describe(@"+startLazilyWithScheduler:block:", ^{ __block NSUInteger invokedCount = 0; __block void (^subscribe)(void); qck_beforeEach(^{ invokedCount = 0; RACSignal *signal = [RACSignal startLazilyWithScheduler:RACScheduler.immediateScheduler block:^(id subscriber) { invokedCount++; [subscriber sendNext:@42]; [subscriber sendCompleted]; }]; subscribe = [^{ [signal subscribe:[RACSubscriber subscriberWithNext:nil error:nil completed:nil]]; } copy]; }); qck_it(@"should only invoke the block on subscription", ^{ expect(@(invokedCount)).to(equal(@0)); subscribe(); expect(@(invokedCount)).to(equal(@1)); }); qck_it(@"should only invoke the block once", ^{ expect(@(invokedCount)).to(equal(@0)); subscribe(); expect(@(invokedCount)).to(equal(@1)); subscribe(); expect(@(invokedCount)).to(equal(@1)); subscribe(); expect(@(invokedCount)).to(equal(@1)); }); qck_it(@"should invoke the block on the given scheduler", ^{ RACScheduler *scheduler = [RACScheduler scheduler]; __block RACScheduler *currentScheduler; [[[RACSignal startLazilyWithScheduler:scheduler block:^(id subscriber) { currentScheduler = RACScheduler.currentScheduler; }] publish] connect]; expect(currentScheduler).toEventually(equal(scheduler)); }); }); qck_describe(@"+startEagerlyWithScheduler:block:", ^{ qck_it(@"should immediately invoke the block", ^{ __block BOOL blockInvoked = NO; [RACSignal startEagerlyWithScheduler:[RACScheduler scheduler] block:^(id subscriber) { blockInvoked = YES; }]; expect(@(blockInvoked)).toEventually(beTruthy()); }); qck_it(@"should only invoke the block once", ^{ __block NSUInteger invokedCount = 0; RACSignal *signal = [RACSignal startEagerlyWithScheduler:RACScheduler.immediateScheduler block:^(id subscriber) { invokedCount++; }]; expect(@(invokedCount)).to(equal(@1)); [[signal publish] connect]; expect(@(invokedCount)).to(equal(@1)); [[signal publish] connect]; expect(@(invokedCount)).to(equal(@1)); }); qck_it(@"should invoke the block on the given scheduler", ^{ RACScheduler *scheduler = [RACScheduler scheduler]; __block RACScheduler *currentScheduler; [RACSignal startEagerlyWithScheduler:scheduler block:^(id subscriber) { currentScheduler = RACScheduler.currentScheduler; }]; expect(currentScheduler).toEventually(equal(scheduler)); }); }); }); qck_describe(@"-toArray", ^{ __block RACSubject *subject; qck_beforeEach(^{ subject = [RACReplaySubject subject]; }); qck_it(@"should return an array which contains NSNulls for nil values", ^{ NSArray *expected = @[ NSNull.null, @1, NSNull.null ]; [subject sendNext:nil]; [subject sendNext:@1]; [subject sendNext:nil]; [subject sendCompleted]; expect([subject toArray]).to(equal(expected)); }); qck_it(@"should return nil upon error", ^{ [subject sendError:nil]; expect([subject toArray]).to(beNil()); }); qck_it(@"should return nil upon error even if some nexts were sent", ^{ [subject sendNext:@1]; [subject sendNext:@2]; [subject sendError:nil]; expect([subject toArray]).to(beNil()); }); }); qck_describe(@"-ignore:", ^{ qck_it(@"should ignore nil", ^{ RACSignal *signal = [[RACSignal createSignal:^ id (id subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:nil]; [subscriber sendNext:@3]; [subscriber sendNext:@4]; [subscriber sendNext:nil]; [subscriber sendCompleted]; return nil; }] ignore:nil]; NSArray *expected = @[ @1, @3, @4 ]; expect([signal toArray]).to(equal(expected)); }); }); qck_describe(@"-replayLazily", ^{ __block NSUInteger subscriptionCount; __block BOOL disposed; __block RACSignal *signal; __block RACSubject *disposeSubject; __block RACSignal *replayedSignal; qck_beforeEach(^{ subscriptionCount = 0; disposed = NO; signal = [RACSignal createSignal:^ RACDisposable * (id subscriber) { subscriptionCount++; [subscriber sendNext:RACUnit.defaultUnit]; RACDisposable *schedulingDisposable = [RACScheduler.mainThreadScheduler schedule:^{ [subscriber sendNext:RACUnit.defaultUnit]; [subscriber sendCompleted]; }]; return [RACDisposable disposableWithBlock:^{ [schedulingDisposable dispose]; disposed = YES; }]; }]; disposeSubject = [RACSubject subject]; replayedSignal = [[signal takeUntil:disposeSubject] replayLazily]; }); qck_it(@"should forward the input signal upon subscription", ^{ expect(@(subscriptionCount)).to(equal(@0)); expect(@([replayedSignal asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy()); expect(@(subscriptionCount)).to(equal(@1)); }); qck_it(@"should replay the input signal for future subscriptions", ^{ NSArray *events = [[[replayedSignal materialize] collect] asynchronousFirstOrDefault:nil success:NULL error:NULL]; expect(events).notTo(beNil()); expect([[[replayedSignal materialize] collect] asynchronousFirstOrDefault:nil success:NULL error:NULL]).to(equal(events)); expect(@(subscriptionCount)).to(equal(@1)); }); qck_it(@"should replay even after disposal", ^{ __block NSUInteger valueCount = 0; [replayedSignal subscribeNext:^(id x) { valueCount++; }]; [disposeSubject sendCompleted]; expect(@(valueCount)).to(equal(@1)); expect(@([[replayedSignal toArray] count])).to(equal(@(valueCount))); }); }); qck_describe(@"-reduceApply", ^{ qck_it(@"should apply a block to the rest of a tuple", ^{ RACSubject *subject = [RACReplaySubject subject]; id sum = ^(NSNumber *a, NSNumber *b) { return @(a.intValue + b.intValue); }; id madd = ^(NSNumber *a, NSNumber *b, NSNumber *c) { return @(a.intValue * b.intValue + c.intValue); }; [subject sendNext:RACTuplePack(sum, @1, @2)]; [subject sendNext:RACTuplePack(madd, @2, @3, @1)]; [subject sendCompleted]; NSArray *results = [[subject reduceApply] toArray]; NSArray *expected = @[ @3, @7 ]; expect(results).to(equal(expected)); }); }); describe(@"-deliverOnMainThread", ^{ void (^dispatchSyncInBackground)(dispatch_block_t) = ^(dispatch_block_t block) { dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), block); dispatch_group_wait(group, DISPATCH_TIME_FOREVER); }; beforeEach(^{ expect(@(NSThread.isMainThread)).to(beTruthy()); }); it(@"should deliver events immediately when on the main thread", ^{ RACSubject *subject = [RACSubject subject]; NSMutableArray *values = [NSMutableArray array]; [[subject deliverOnMainThread] subscribeNext:^(id value) { [values addObject:value]; }]; [subject sendNext:@0]; expect(values).to(equal(@[ @0 ])); [subject sendNext:@1]; [subject sendNext:@2]; expect(values).to(equal(@[ @0, @1, @2 ])); }); it(@"should enqueue events sent from the background", ^{ RACSubject *subject = [RACSubject subject]; NSMutableArray *values = [NSMutableArray array]; [[subject deliverOnMainThread] subscribeNext:^(id value) { [values addObject:value]; }]; dispatchSyncInBackground(^{ [subject sendNext:@0]; }); expect(values).to(equal(@[])); expect(values).toEventually(equal(@[ @0 ])); dispatchSyncInBackground(^{ [subject sendNext:@1]; [subject sendNext:@2]; }); expect(values).to(equal(@[ @0 ])); expect(values).toEventually(equal(@[ @0, @1, @2 ])); }); it(@"should enqueue events sent from the main thread after events from the background", ^{ RACSubject *subject = [RACSubject subject]; NSMutableArray *values = [NSMutableArray array]; [[subject deliverOnMainThread] subscribeNext:^(id value) { [values addObject:value]; }]; dispatchSyncInBackground(^{ [subject sendNext:@0]; }); [subject sendNext:@1]; [subject sendNext:@2]; expect(values).to(equal(@[])); expect(values).toEventually(equal(@[ @0, @1, @2 ])); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACStreamExamples.h ================================================ // // RACStreamExamples.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-01. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // // The name of the shared examples for a RACStream subclass. extern NSString * const RACStreamExamples; // The RACStream subclass to test. extern NSString * const RACStreamExamplesClass; // An infinite RACStream to test, making sure that certain operations // terminate. // // The stream should contain infinite RACUnit values. extern NSString * const RACStreamExamplesInfiniteStream; // A block with the signature: // // void (^)(RACStream *stream, NSArray *expectedValues) // // … used to verify that a stream contains the expected values. extern NSString * const RACStreamExamplesVerifyValuesBlock; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACStreamExamples.m ================================================ // // RACStreamExamples.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-01. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACStreamExamples.h" #import "RACStream.h" #import "RACUnit.h" #import "RACTuple.h" NSString * const RACStreamExamples = @"RACStreamExamples"; NSString * const RACStreamExamplesClass = @"RACStreamExamplesClass"; NSString * const RACStreamExamplesInfiniteStream = @"RACStreamExamplesInfiniteStream"; NSString * const RACStreamExamplesVerifyValuesBlock = @"RACStreamExamplesVerifyValuesBlock"; QuickConfigurationBegin(RACStreamExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACStreamExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block Class streamClass; __block void (^verifyValues)(RACStream *, NSArray *); __block RACStream *infiniteStream; __block RACStream *(^streamWithValues)(NSArray *); qck_beforeEach(^{ streamClass = exampleContext()[RACStreamExamplesClass]; verifyValues = exampleContext()[RACStreamExamplesVerifyValuesBlock]; infiniteStream = exampleContext()[RACStreamExamplesInfiniteStream]; streamWithValues = [^(NSArray *values) { RACStream *stream = [streamClass empty]; for (id value in values) { stream = [stream concat:[streamClass return:value]]; } return stream; } copy]; }); qck_it(@"should return an empty stream", ^{ RACStream *stream = [streamClass empty]; verifyValues(stream, @[]); }); qck_it(@"should lift a value into a stream", ^{ RACStream *stream = [streamClass return:RACUnit.defaultUnit]; verifyValues(stream, @[ RACUnit.defaultUnit ]); }); qck_describe(@"-concat:", ^{ qck_it(@"should concatenate two streams", ^{ RACStream *stream = [[streamClass return:@0] concat:[streamClass return:@1]]; verifyValues(stream, @[ @0, @1 ]); }); qck_it(@"should concatenate three streams", ^{ RACStream *stream = [[[streamClass return:@0] concat:[streamClass return:@1]] concat:[streamClass return:@2]]; verifyValues(stream, @[ @0, @1, @2 ]); }); qck_it(@"should concatenate around an empty stream", ^{ RACStream *stream = [[[streamClass return:@0] concat:[streamClass empty]] concat:[streamClass return:@2]]; verifyValues(stream, @[ @0, @2 ]); }); }); qck_it(@"should flatten", ^{ RACStream *stream = [[streamClass return:[streamClass return:RACUnit.defaultUnit]] flatten]; verifyValues(stream, @[ RACUnit.defaultUnit ]); }); qck_describe(@"-bind:", ^{ qck_it(@"should return the result of binding a single value", ^{ RACStream *stream = [[streamClass return:@0] bind:^{ return ^(NSNumber *value, BOOL *stop) { NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }; }]; verifyValues(stream, @[ @1 ]); }); qck_it(@"should concatenate the result of binding multiple values", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1 ]); RACStream *stream = [baseStream bind:^{ return ^(NSNumber *value, BOOL *stop) { NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }; }]; verifyValues(stream, @[ @1, @2 ]); }); qck_it(@"should concatenate with an empty result from binding a value", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]); RACStream *stream = [baseStream bind:^{ return ^(NSNumber *value, BOOL *stop) { if (value.integerValue == 1) return [streamClass empty]; NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }; }]; verifyValues(stream, @[ @1, @3 ]); }); qck_it(@"should terminate immediately when returning nil", ^{ RACStream *stream = [infiniteStream bind:^{ return ^ id (id _, BOOL *stop) { return nil; }; }]; verifyValues(stream, @[]); }); qck_it(@"should terminate after one value when setting 'stop'", ^{ RACStream *stream = [infiniteStream bind:^{ return ^ id (id value, BOOL *stop) { *stop = YES; return [streamClass return:value]; }; }]; verifyValues(stream, @[ RACUnit.defaultUnit ]); }); qck_it(@"should terminate immediately when returning nil and setting 'stop'", ^{ RACStream *stream = [infiniteStream bind:^{ return ^ id (id _, BOOL *stop) { *stop = YES; return nil; }; }]; verifyValues(stream, @[]); }); qck_it(@"should be restartable even with block state", ^{ NSArray *values = @[ @0, @1, @2 ]; RACStream *baseStream = streamWithValues(values); RACStream *countingStream = [baseStream bind:^{ __block NSUInteger counter = 0; return ^(id x, BOOL *stop) { return [streamClass return:@(counter++)]; }; }]; verifyValues(countingStream, @[ @0, @1, @2 ]); verifyValues(countingStream, @[ @0, @1, @2 ]); }); qck_it(@"should be interleavable even with block state", ^{ NSArray *values = @[ @0, @1, @2 ]; RACStream *baseStream = streamWithValues(values); RACStream *countingStream = [baseStream bind:^{ __block NSUInteger counter = 0; return ^(id x, BOOL *stop) { return [streamClass return:@(counter++)]; }; }]; // Just so +zip:reduce: thinks this is a unique stream. RACStream *anotherStream = [[streamClass empty] concat:countingStream]; RACStream *zipped = [streamClass zip:@[ countingStream, anotherStream ] reduce:^(NSNumber *v1, NSNumber *v2) { return @(v1.integerValue + v2.integerValue); }]; verifyValues(zipped, @[ @0, @2, @4 ]); }); }); qck_describe(@"-flattenMap:", ^{ qck_it(@"should return a single mapped result", ^{ RACStream *stream = [[streamClass return:@0] flattenMap:^(NSNumber *value) { NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }]; verifyValues(stream, @[ @1 ]); }); qck_it(@"should concatenate the results of mapping multiple values", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1 ]); RACStream *stream = [baseStream flattenMap:^(NSNumber *value) { NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }]; verifyValues(stream, @[ @1, @2 ]); }); qck_it(@"should concatenate with an empty result from mapping a value", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]); RACStream *stream = [baseStream flattenMap:^(NSNumber *value) { if (value.integerValue == 1) return [streamClass empty]; NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }]; verifyValues(stream, @[ @1, @3 ]); }); qck_it(@"should treat nil streams like empty streams", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]); RACStream *stream = [baseStream flattenMap:^ RACStream * (NSNumber *value) { if (value.integerValue == 1) return nil; NSNumber *newValue = @(value.integerValue + 1); return [streamClass return:newValue]; }]; verifyValues(stream, @[ @1, @3 ]); }); }); qck_it(@"should map", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]); RACStream *stream = [baseStream map:^(NSNumber *value) { return @(value.integerValue + 1); }]; verifyValues(stream, @[ @1, @2, @3 ]); }); qck_it(@"should map and replace", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]); RACStream *stream = [baseStream mapReplace:RACUnit.defaultUnit]; verifyValues(stream, @[ RACUnit.defaultUnit, RACUnit.defaultUnit, RACUnit.defaultUnit ]); }); qck_it(@"should filter", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2, @3, @4, @5, @6 ]); RACStream *stream = [baseStream filter:^ BOOL (NSNumber *value) { return value.integerValue % 2 == 0; }]; verifyValues(stream, @[ @0, @2, @4, @6 ]); }); qck_describe(@"-ignore:", ^{ qck_it(@"should ignore a value", ^{ RACStream *baseStream = streamWithValues(@[ @0, @1, @2, @3, @4, @5, @6 ]); RACStream *stream = [baseStream ignore:@1]; verifyValues(stream, @[ @0, @2, @3, @4, @5, @6 ]); }); qck_it(@"should ignore based on object equality", ^{ RACStream *baseStream = streamWithValues(@[ @"0", @"1", @"2", @"3", @"4", @"5", @"6" ]); NSMutableString *valueToIgnore = [[NSMutableString alloc] init]; [valueToIgnore appendString:@"1"]; RACStream *stream = [baseStream ignore:valueToIgnore]; verifyValues(stream, @[ @"0", @"2", @"3", @"4", @"5", @"6" ]); }); }); qck_it(@"should start with a value", ^{ RACStream *stream = [[streamClass return:@1] startWith:@0]; verifyValues(stream, @[ @0, @1 ]); }); qck_describe(@"-skip:", ^{ __block NSArray *values; __block RACStream *stream; qck_beforeEach(^{ values = @[ @0, @1, @2 ]; stream = streamWithValues(values); }); qck_it(@"should skip any valid number of values", ^{ for (NSUInteger i = 0; i < values.count; i++) { verifyValues([stream skip:i], [values subarrayWithRange:NSMakeRange(i, values.count - i)]); } }); qck_it(@"should return an empty stream when skipping too many values", ^{ verifyValues([stream skip:4], @[]); }); }); qck_describe(@"-take:", ^{ qck_describe(@"with three values", ^{ __block NSArray *values; __block RACStream *stream; qck_beforeEach(^{ values = @[ @0, @1, @2 ]; stream = streamWithValues(values); }); qck_it(@"should take any valid number of values", ^{ for (NSUInteger i = 0; i < values.count; i++) { verifyValues([stream take:i], [values subarrayWithRange:NSMakeRange(0, i)]); } }); qck_it(@"should return the same stream when taking too many values", ^{ verifyValues([stream take:4], values); }); }); qck_it(@"should take and terminate from an infinite stream", ^{ verifyValues([infiniteStream take:0], @[]); verifyValues([infiniteStream take:1], @[ RACUnit.defaultUnit ]); verifyValues([infiniteStream take:2], @[ RACUnit.defaultUnit, RACUnit.defaultUnit ]); }); qck_it(@"should take and terminate from a single-item stream", ^{ NSArray *values = @[ RACUnit.defaultUnit ]; RACStream *stream = streamWithValues(values); verifyValues([stream take:1], values); }); }); qck_describe(@"zip stream creation methods", ^{ __block NSArray *valuesOne; __block RACStream *streamOne; __block RACStream *streamTwo; __block RACStream *streamThree; __block NSArray *threeStreams; __block NSArray *oneStreamTuples; __block NSArray *twoStreamTuples; __block NSArray *threeStreamTuples; qck_beforeEach(^{ valuesOne = @[ @"Ada", @"Bob", @"Dea" ]; NSArray *valuesTwo = @[ @"eats", @"cooks", @"jumps" ]; NSArray *valuesThree = @[ @"fish", @"bear", @"rock" ]; streamOne = streamWithValues(valuesOne); streamTwo = streamWithValues(valuesTwo); streamThree = streamWithValues(valuesThree); threeStreams = @[ streamOne, streamTwo, streamThree ]; oneStreamTuples = @[ RACTuplePack(valuesOne[0]), RACTuplePack(valuesOne[1]), RACTuplePack(valuesOne[2]), ]; twoStreamTuples = @[ RACTuplePack(valuesOne[0], valuesTwo[0]), RACTuplePack(valuesOne[1], valuesTwo[1]), RACTuplePack(valuesOne[2], valuesTwo[2]), ]; threeStreamTuples = @[ RACTuplePack(valuesOne[0], valuesTwo[0], valuesThree[0]), RACTuplePack(valuesOne[1], valuesTwo[1], valuesThree[1]), RACTuplePack(valuesOne[2], valuesTwo[2], valuesThree[2]), ]; }); qck_describe(@"-zipWith:", ^{ qck_it(@"should make a stream of tuples", ^{ RACStream *stream = [streamOne zipWith:streamTwo]; verifyValues(stream, twoStreamTuples); }); qck_it(@"should truncate streams", ^{ RACStream *shortStream = streamWithValues(@[ @"now", @"later" ]); RACStream *stream = [streamOne zipWith:shortStream]; verifyValues(stream, @[ RACTuplePack(valuesOne[0], @"now"), RACTuplePack(valuesOne[1], @"later") ]); }); qck_it(@"should work on infinite streams", ^{ RACStream *stream = [streamOne zipWith:infiniteStream]; verifyValues(stream, @[ RACTuplePack(valuesOne[0], RACUnit.defaultUnit), RACTuplePack(valuesOne[1], RACUnit.defaultUnit), RACTuplePack(valuesOne[2], RACUnit.defaultUnit) ]); }); qck_it(@"should handle multiples of the same stream", ^{ RACStream *stream = [streamOne zipWith:streamOne]; verifyValues(stream, @[ RACTuplePack(valuesOne[0], valuesOne[0]), RACTuplePack(valuesOne[1], valuesOne[1]), RACTuplePack(valuesOne[2], valuesOne[2]), ]); }); }); qck_describe(@"+zip:reduce:", ^{ qck_it(@"should reduce values", ^{ RACStream *stream = [streamClass zip:threeStreams reduce:^ NSString * (id x, id y, id z) { return [NSString stringWithFormat:@"%@ %@ %@", x, y, z]; }]; verifyValues(stream, @[ @"Ada eats fish", @"Bob cooks bear", @"Dea jumps rock" ]); }); qck_it(@"should truncate streams", ^{ RACStream *shortStream = streamWithValues(@[ @"now", @"later" ]); NSArray *streams = [threeStreams arrayByAddingObject:shortStream]; RACStream *stream = [streamClass zip:streams reduce:^ NSString * (id w, id x, id y, id z) { return [NSString stringWithFormat:@"%@ %@ %@ %@", w, x, y, z]; }]; verifyValues(stream, @[ @"Ada eats fish now", @"Bob cooks bear later" ]); }); qck_it(@"should work on infinite streams", ^{ NSArray *streams = [threeStreams arrayByAddingObject:infiniteStream]; RACStream *stream = [streamClass zip:streams reduce:^ NSString * (id w, id x, id y, id z) { return [NSString stringWithFormat:@"%@ %@ %@", w, x, y]; }]; verifyValues(stream, @[ @"Ada eats fish", @"Bob cooks bear", @"Dea jumps rock" ]); }); qck_it(@"should handle multiples of the same stream", ^{ NSArray *streams = @[ streamOne, streamOne, streamTwo, streamThree, streamTwo, streamThree ]; RACStream *stream = [streamClass zip:streams reduce:^ NSString * (id x1, id x2, id y1, id z1, id y2, id z2) { return [NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@", x1, x2, y1, z1, y2, z2]; }]; verifyValues(stream, @[ @"Ada Ada eats fish eats fish", @"Bob Bob cooks bear cooks bear", @"Dea Dea jumps rock jumps rock" ]); }); }); qck_describe(@"+zip:", ^{ qck_it(@"should make a stream of tuples out of single value", ^{ RACStream *stream = [streamClass zip:@[ streamOne ]]; verifyValues(stream, oneStreamTuples); }); qck_it(@"should make a stream of tuples out of an array of streams", ^{ RACStream *stream = [streamClass zip:threeStreams]; verifyValues(stream, threeStreamTuples); }); qck_it(@"should make an empty stream if given an empty array", ^{ RACStream *stream = [streamClass zip:@[]]; verifyValues(stream, @[]); }); qck_it(@"should make a stream of tuples out of an enumerator of streams", ^{ RACStream *stream = [streamClass zip:threeStreams.objectEnumerator]; verifyValues(stream, threeStreamTuples); }); qck_it(@"should make an empty stream if given an empty enumerator", ^{ RACStream *stream = [streamClass zip:@[].objectEnumerator]; verifyValues(stream, @[]); }); }); }); qck_describe(@"+concat:", ^{ __block NSArray *streams = nil; __block NSArray *result = nil; qck_beforeEach(^{ RACStream *a = [streamClass return:@0]; RACStream *b = [streamClass empty]; RACStream *c = streamWithValues(@[ @1, @2, @3 ]); RACStream *d = [streamClass return:@4]; RACStream *e = [streamClass return:@5]; RACStream *f = [streamClass empty]; RACStream *g = [streamClass empty]; RACStream *h = streamWithValues(@[ @6, @7 ]); streams = @[ a, b, c, d, e, f, g, h ]; result = @[ @0, @1, @2, @3, @4, @5, @6, @7 ]; }); qck_it(@"should concatenate an array of streams", ^{ RACStream *stream = [streamClass concat:streams]; verifyValues(stream, result); }); qck_it(@"should concatenate an enumerator of streams", ^{ RACStream *stream = [streamClass concat:streams.objectEnumerator]; verifyValues(stream, result); }); }); qck_describe(@"scanning", ^{ NSArray *values = @[ @1, @2, @3, @4 ]; __block RACStream *stream; qck_beforeEach(^{ stream = streamWithValues(values); }); qck_it(@"should scan", ^{ RACStream *scanned = [stream scanWithStart:@0 reduce:^(NSNumber *running, NSNumber *next) { return @(running.integerValue + next.integerValue); }]; verifyValues(scanned, @[ @1, @3, @6, @10 ]); }); qck_it(@"should scan with index", ^{ RACStream *scanned = [stream scanWithStart:@0 reduceWithIndex:^(NSNumber *running, NSNumber *next, NSUInteger index) { return @(running.integerValue + next.integerValue + (NSInteger)index); }]; verifyValues(scanned, @[ @1, @4, @9, @16 ]); }); }); qck_describe(@"taking with a predicate", ^{ NSArray *values = @[ @0, @1, @2, @3, @0, @2, @4 ]; __block RACStream *stream; qck_beforeEach(^{ stream = streamWithValues(values); }); qck_it(@"should take until a predicate is true", ^{ RACStream *taken = [stream takeUntilBlock:^ BOOL (NSNumber *x) { return x.integerValue >= 3; }]; verifyValues(taken, @[ @0, @1, @2 ]); }); qck_it(@"should take while a predicate is true", ^{ RACStream *taken = [stream takeWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue <= 1; }]; verifyValues(taken, @[ @0, @1 ]); }); qck_it(@"should take a full stream", ^{ RACStream *taken = [stream takeWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue <= 10; }]; verifyValues(taken, values); }); qck_it(@"should return an empty stream", ^{ RACStream *taken = [stream takeWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue < 0; }]; verifyValues(taken, @[]); }); qck_it(@"should terminate an infinite stream", ^{ RACStream *infiniteCounter = [infiniteStream scanWithStart:@0 reduce:^(NSNumber *running, id _) { return @(running.unsignedIntegerValue + 1); }]; RACStream *taken = [infiniteCounter takeWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue <= 5; }]; verifyValues(taken, @[ @1, @2, @3, @4, @5 ]); }); }); qck_describe(@"skipping with a predicate", ^{ NSArray *values = @[ @0, @1, @2, @3, @0, @2, @4 ]; __block RACStream *stream; qck_beforeEach(^{ stream = streamWithValues(values); }); qck_it(@"should skip until a predicate is true", ^{ RACStream *taken = [stream skipUntilBlock:^ BOOL (NSNumber *x) { return x.integerValue >= 3; }]; verifyValues(taken, @[ @3, @0, @2, @4 ]); }); qck_it(@"should skip while a predicate is true", ^{ RACStream *taken = [stream skipWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue <= 1; }]; verifyValues(taken, @[ @2, @3, @0, @2, @4 ]); }); qck_it(@"should skip a full stream", ^{ RACStream *taken = [stream skipWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue <= 10; }]; verifyValues(taken, @[]); }); qck_it(@"should finish skipping immediately", ^{ RACStream *taken = [stream skipWhileBlock:^ BOOL (NSNumber *x) { return x.integerValue < 0; }]; verifyValues(taken, values); }); }); qck_describe(@"-combinePreviousWithStart:reduce:", ^{ NSArray *values = @[ @1, @2, @3 ]; __block RACStream *stream; qck_beforeEach(^{ stream = streamWithValues(values); }); qck_it(@"should pass the previous next into the reduce block", ^{ NSMutableArray *previouses = [NSMutableArray array]; RACStream *mapped = [stream combinePreviousWithStart:nil reduce:^(id previous, id next) { [previouses addObject:previous ?: RACTupleNil.tupleNil]; return next; }]; verifyValues(mapped, @[ @1, @2, @3 ]); NSArray *expected = @[ RACTupleNil.tupleNil, @1, @2 ]; expect(previouses).to(equal(expected)); }); qck_it(@"should send the combined value", ^{ RACStream *mapped = [stream combinePreviousWithStart:@1 reduce:^(NSNumber *previous, NSNumber *next) { return [NSString stringWithFormat:@"%lu - %lu", (unsigned long)previous.unsignedIntegerValue, (unsigned long)next.unsignedIntegerValue]; }]; verifyValues(mapped, @[ @"1 - 1", @"1 - 2", @"2 - 3" ]); }); }); qck_it(@"should reduce tuples", ^{ RACStream *stream = streamWithValues(@[ RACTuplePack(@"foo", @"bar"), RACTuplePack(@"buzz", @"baz"), RACTuplePack(@"", @"_") ]); RACStream *reduced = [stream reduceEach:^(NSString *a, NSString *b) { return [a stringByAppendingString:b]; }]; verifyValues(reduced, @[ @"foobar", @"buzzbaz", @"_" ]); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubclassObject.h ================================================ // // RACSubclassObject.h // ReactiveCocoa // // Created by Josh Abernathy on 3/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACTestObject.h" @interface RACSubclassObject : RACTestObject // Set whenever -forwardInvocation: is invoked on the receiver. @property (nonatomic, assign) SEL forwardedSelector; // Invokes the superclass implementation with `objectValue` concatenated to // "SUBCLASS". - (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue; // Asynchronously invokes the superclass implementation on the current scheduler. - (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubclassObject.m ================================================ // // RACSubclassObject.m // ReactiveCocoa // // Created by Josh Abernathy on 3/18/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACSubclassObject.h" #import "RACScheduler.h" @implementation RACSubclassObject - (void)forwardInvocation:(NSInvocation *)invocation { self.forwardedSelector = invocation.selector; } - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { NSParameterAssert(selector != NULL); NSMethodSignature *signature = [super methodSignatureForSelector:selector]; if (signature != nil) return signature; return [super methodSignatureForSelector:@selector(description)]; } - (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue { NSString *appended = [[objectValue description] stringByAppendingString:@"SUBCLASS"]; return [super combineObjectValue:appended andIntegerValue:integerValue]; } - (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue { [RACScheduler.currentScheduler schedule:^{ [super setObjectValue:objectValue andSecondObjectValue:secondObjectValue]; }]; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubjectSpec.m ================================================ // // RACSubjectSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 6/24/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // @import Quick; @import Nimble; #import "RACSubscriberExamples.h" #import #import #import "RACBehaviorSubject.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACReplaySubject.h" #import "RACScheduler.h" #import "RACSignal+Operations.h" #import "RACSubject.h" #import "RACUnit.h" @interface RACTestSubscriber : NSObject @property (nonatomic, strong, readonly) RACDisposable *disposable; @end @implementation RACTestSubscriber - (instancetype)init { self = [super init]; _disposable = [RACDisposable new]; return self; } - (void)sendNext:(id)value {} - (void)sendError:(NSError *)error {} - (void)sendCompleted {} - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable { [disposable addDisposable:self.disposable]; } @end QuickSpecBegin(RACSubjectSpec) qck_describe(@"RACSubject", ^{ __block RACSubject *subject; __block NSMutableArray *values; __block BOOL success; __block NSError *error; qck_beforeEach(^{ values = [NSMutableArray array]; subject = [RACSubject subject]; success = YES; error = nil; [subject subscribeNext:^(id value) { [values addObject:value]; } error:^(NSError *e) { error = e; success = NO; } completed:^{ success = YES; }]; }); qck_it(@"should dispose the paired disposable when a subscription terminates", ^{ RACSubject* subject = [RACSubject new]; RACTestSubscriber* subscriber = [RACTestSubscriber new]; [[subject subscribe:subscriber] dispose]; expect(@(subscriber.disposable.disposed)).to(beTruthy()); }); qck_itBehavesLike(RACSubscriberExamples, ^{ return @{ RACSubscriberExampleSubscriber: subject, RACSubscriberExampleValuesReceivedBlock: [^{ return [values copy]; } copy], RACSubscriberExampleErrorReceivedBlock: [^{ return error; } copy], RACSubscriberExampleSuccessBlock: [^{ return success; } copy] }; }); }); qck_describe(@"RACReplaySubject", ^{ __block RACReplaySubject *subject = nil; qck_describe(@"with a capacity of 1", ^{ qck_beforeEach(^{ subject = [RACReplaySubject replaySubjectWithCapacity:1]; }); qck_it(@"should send the last value", ^{ id firstValue = @"blah"; id secondValue = @"more blah"; [subject sendNext:firstValue]; [subject sendNext:secondValue]; __block id valueReceived = nil; [subject subscribeNext:^(id x) { valueReceived = x; }]; expect(valueReceived).to(equal(secondValue)); }); qck_it(@"should send the last value to new subscribers after completion", ^{ id firstValue = @"blah"; id secondValue = @"more blah"; __block id valueReceived = nil; __block NSUInteger nextsReceived = 0; [subject sendNext:firstValue]; [subject sendNext:secondValue]; expect(@(nextsReceived)).to(equal(@0)); expect(valueReceived).to(beNil()); [subject sendCompleted]; [subject subscribeNext:^(id x) { valueReceived = x; nextsReceived++; }]; expect(@(nextsReceived)).to(equal(@1)); expect(valueReceived).to(equal(secondValue)); }); qck_it(@"should not send any values to new subscribers if none were sent originally", ^{ [subject sendCompleted]; __block BOOL nextInvoked = NO; [subject subscribeNext:^(id x) { nextInvoked = YES; }]; expect(@(nextInvoked)).to(beFalsy()); }); qck_it(@"should resend errors", ^{ NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:0 userInfo:nil]; [subject sendError:error]; __block BOOL errorSent = NO; [subject subscribeError:^(NSError *sentError) { expect(sentError).to(equal(error)); errorSent = YES; }]; expect(@(errorSent)).to(beTruthy()); }); qck_it(@"should resend nil errors", ^{ [subject sendError:nil]; __block BOOL errorSent = NO; [subject subscribeError:^(NSError *sentError) { expect(sentError).to(beNil()); errorSent = YES; }]; expect(@(errorSent)).to(beTruthy()); }); }); qck_describe(@"with an unlimited capacity", ^{ qck_beforeEach(^{ subject = [RACReplaySubject subject]; }); qck_itBehavesLike(RACSubscriberExamples, ^{ return @{ RACSubscriberExampleSubscriber: subject, RACSubscriberExampleValuesReceivedBlock: [^{ NSMutableArray *values = [NSMutableArray array]; // This subscription should synchronously dump all values already // received into 'values'. [subject subscribeNext:^(id value) { [values addObject:value]; }]; return values; } copy], RACSubscriberExampleErrorReceivedBlock: [^{ __block NSError *error = nil; [subject subscribeError:^(NSError *x) { error = x; }]; return error; } copy], RACSubscriberExampleSuccessBlock: [^{ __block BOOL success = YES; [subject subscribeError:^(NSError *x) { success = NO; }]; return success; } copy] }; }); qck_it(@"should send both values to new subscribers after completion", ^{ id firstValue = @"blah"; id secondValue = @"more blah"; [subject sendNext:firstValue]; [subject sendNext:secondValue]; [subject sendCompleted]; __block BOOL completed = NO; NSMutableArray *valuesReceived = [NSMutableArray array]; [subject subscribeNext:^(id x) { [valuesReceived addObject:x]; } completed:^{ completed = YES; }]; expect(valuesReceived).to(haveCount(@2)); NSArray *expected = [NSArray arrayWithObjects:firstValue, secondValue, nil]; expect(valuesReceived).to(equal(expected)); expect(@(completed)).to(beTruthy()); }); qck_it(@"should send values in the same order live as when replaying", ^{ NSUInteger count = 49317; // Just leak it, ain't no thang. __unsafe_unretained volatile id *values = (__unsafe_unretained id *)calloc(count, sizeof(*values)); __block volatile int32_t nextIndex = 0; [subject subscribeNext:^(NSNumber *value) { int32_t indexPlusOne = OSAtomicIncrement32(&nextIndex); values[indexPlusOne - 1] = value; }]; dispatch_queue_t queue = dispatch_queue_create("org.reactivecocoa.ReactiveCocoa.RACSubjectSpec", DISPATCH_QUEUE_CONCURRENT); dispatch_suspend(queue); for (NSUInteger i = 0; i < count; i++) { dispatch_async(queue, ^{ [subject sendNext:@(i)]; }); } dispatch_resume(queue); dispatch_barrier_sync(queue, ^{ [subject sendCompleted]; }); OSMemoryBarrier(); NSArray *liveValues = [NSArray arrayWithObjects:(id *)values count:(NSUInteger)nextIndex]; expect(liveValues).to(haveCount(@(count))); NSArray *replayedValues = subject.toArray; expect(replayedValues).to(haveCount(@(count))); // It should return the same ordering for multiple invocations too. expect(replayedValues).to(equal(subject.toArray)); [replayedValues enumerateObjectsUsingBlock:^(id value, NSUInteger index, BOOL *stop) { expect(liveValues[index]).to(equal(value)); }]; }); qck_it(@"should have a current scheduler when replaying", ^{ [subject sendNext:RACUnit.defaultUnit]; __block RACScheduler *currentScheduler; [subject subscribeNext:^(id x) { currentScheduler = RACScheduler.currentScheduler; }]; expect(currentScheduler).notTo(beNil()); currentScheduler = nil; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [subject subscribeNext:^(id x) { currentScheduler = RACScheduler.currentScheduler; }]; }); expect(currentScheduler).toEventuallyNot(beNil()); }); qck_it(@"should stop replaying when the subscription is disposed", ^{ NSMutableArray *values = [NSMutableArray array]; [subject sendNext:@0]; [subject sendNext:@1]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ __block RACDisposable *disposable = [subject subscribeNext:^(id x) { expect(disposable).notTo(beNil()); [values addObject:x]; [disposable dispose]; }]; }); expect(values).toEventually(equal(@[ @0 ])); }); qck_it(@"should finish replaying before completing", ^{ [subject sendNext:@1]; __block id received; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [subject subscribeNext:^(id x) { received = x; }]; [subject sendCompleted]; }); expect(received).toEventually(equal(@1)); }); qck_it(@"should finish replaying before erroring", ^{ [subject sendNext:@1]; __block id received; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [subject subscribeNext:^(id x) { received = x; }]; [subject sendError:[NSError errorWithDomain:@"blah" code:-99 userInfo:nil]]; }); expect(received).toEventually(equal(@1)); }); qck_it(@"should finish replaying before sending new values", ^{ [subject sendNext:@1]; NSMutableArray *received = [NSMutableArray array]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [subject subscribeNext:^(id x) { [received addObject:x]; }]; [subject sendNext:@2]; }); NSArray *expected = @[ @1, @2 ]; expect(received).toEventually(equal(expected)); }); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriberExamples.h ================================================ // // RACSubscriberExamples.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-27. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // // The name of the shared examples for implementors of . extern NSString * const RACSubscriberExamples; // id extern NSString * const RACSubscriberExampleSubscriber; // A block which returns an NSArray of the values received so far. extern NSString * const RACSubscriberExampleValuesReceivedBlock; // A block which returns any NSError received so far. extern NSString * const RACSubscriberExampleErrorReceivedBlock; // A block which returns a BOOL indicating whether the subscriber is successful // so far. extern NSString * const RACSubscriberExampleSuccessBlock; ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriberExamples.m ================================================ // // RACSubscriberExamples.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-27. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACSubscriberExamples.h" #import "NSObject+RACDeallocating.h" #import "RACCompoundDisposable.h" #import "RACDisposable.h" #import "RACSubject.h" #import "RACSubscriber.h" NSString * const RACSubscriberExamples = @"RACSubscriberExamples"; NSString * const RACSubscriberExampleSubscriber = @"RACSubscriberExampleSubscriber"; NSString * const RACSubscriberExampleValuesReceivedBlock = @"RACSubscriberExampleValuesReceivedBlock"; NSString * const RACSubscriberExampleErrorReceivedBlock = @"RACSubscriberExampleErrorReceivedBlock"; NSString * const RACSubscriberExampleSuccessBlock = @"RACSubscriberExampleSuccessBlock"; QuickConfigurationBegin(RACSubscriberExampleGroups) + (void)configure:(Configuration *)configuration { sharedExamples(RACSubscriberExamples, ^(QCKDSLSharedExampleContext exampleContext) { __block NSArray * (^valuesReceived)(void); __block NSError * (^errorReceived)(void); __block BOOL (^success)(void); __block id subscriber; qck_beforeEach(^{ valuesReceived = exampleContext()[RACSubscriberExampleValuesReceivedBlock]; errorReceived = exampleContext()[RACSubscriberExampleErrorReceivedBlock]; success = exampleContext()[RACSubscriberExampleSuccessBlock]; subscriber = exampleContext()[RACSubscriberExampleSubscriber]; expect(subscriber).notTo(beNil()); }); qck_it(@"should accept a nil error", ^{ [subscriber sendError:nil]; expect(@(success())).to(beFalsy()); expect(errorReceived()).to(beNil()); expect(valuesReceived()).to(equal(@[])); }); qck_describe(@"with values", ^{ __block NSSet *values; qck_beforeEach(^{ NSMutableSet *mutableValues = [NSMutableSet set]; for (NSUInteger i = 0; i < 20; i++) { [mutableValues addObject:@(i)]; } values = [mutableValues copy]; }); qck_it(@"should send nexts serially, even when delivered from multiple threads", ^{ NSArray *allValues = values.allObjects; dispatch_apply(allValues.count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [^(size_t index) { [subscriber sendNext:allValues[index]]; } copy]); expect(@(success())).to(beTruthy()); expect(errorReceived()).to(beNil()); NSSet *valuesReceivedSet = [NSSet setWithArray:valuesReceived()]; expect(valuesReceivedSet).to(equal(values)); }); }); qck_describe(@"multiple subscriptions", ^{ __block RACSubject *first; __block RACSubject *second; qck_beforeEach(^{ first = [RACSubject subject]; [first subscribe:subscriber]; second = [RACSubject subject]; [second subscribe:subscriber]; }); qck_it(@"should send values from all subscriptions", ^{ [first sendNext:@"foo"]; [second sendNext:@"bar"]; [first sendNext:@"buzz"]; [second sendNext:@"baz"]; expect(@(success())).to(beTruthy()); expect(errorReceived()).to(beNil()); NSArray *expected = @[ @"foo", @"bar", @"buzz", @"baz" ]; expect(valuesReceived()).to(equal(expected)); }); qck_it(@"should terminate after the first error from any subscription", ^{ NSError *error = [NSError errorWithDomain:@"" code:-1 userInfo:nil]; [first sendNext:@"foo"]; [second sendError:error]; [first sendNext:@"buzz"]; expect(@(success())).to(beFalsy()); expect(errorReceived()).to(equal(error)); NSArray *expected = @[ @"foo" ]; expect(valuesReceived()).to(equal(expected)); }); qck_it(@"should terminate after the first completed from any subscription", ^{ [first sendNext:@"foo"]; [second sendNext:@"bar"]; [first sendCompleted]; [second sendNext:@"baz"]; expect(@(success())).to(beTruthy()); expect(errorReceived()).to(beNil()); NSArray *expected = @[ @"foo", @"bar" ]; expect(valuesReceived()).to(equal(expected)); }); qck_it(@"should dispose of all current subscriptions upon termination", ^{ __block BOOL firstDisposed = NO; RACSignal *firstDisposableSignal = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ firstDisposed = YES; }]; }]; __block BOOL secondDisposed = NO; RACSignal *secondDisposableSignal = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ secondDisposed = YES; }]; }]; [firstDisposableSignal subscribe:subscriber]; [secondDisposableSignal subscribe:subscriber]; expect(@(firstDisposed)).to(beFalsy()); expect(@(secondDisposed)).to(beFalsy()); [first sendCompleted]; expect(@(firstDisposed)).to(beTruthy()); expect(@(secondDisposed)).to(beTruthy()); }); qck_it(@"should dispose of future subscriptions upon termination", ^{ __block BOOL disposed = NO; RACSignal *disposableSignal = [RACSignal createSignal:^(id subscriber) { return [RACDisposable disposableWithBlock:^{ disposed = YES; }]; }]; [first sendCompleted]; expect(@(disposed)).to(beFalsy()); [disposableSignal subscribe:subscriber]; expect(@(disposed)).to(beTruthy()); }); }); qck_describe(@"memory management", ^{ qck_it(@"should not retain disposed disposables", ^{ __block BOOL disposableDeallocd = NO; @autoreleasepool { RACCompoundDisposable *disposable __attribute__((objc_precise_lifetime)) = [RACCompoundDisposable disposableWithBlock:^{}]; [disposable.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ disposableDeallocd = YES; }]]; [subscriber didSubscribeWithDisposable:disposable]; [disposable dispose]; } expect(@(disposableDeallocd)).to(beTruthy()); }); }); }); } QuickConfigurationEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriberSpec.m ================================================ // // RACSubscriberSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-11-27. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACSubscriberExamples.h" #import "RACSubscriber.h" #import "RACSubscriber+Private.h" #import QuickSpecBegin(RACSubscriberSpec) __block RACSubscriber *subscriber; __block NSMutableArray *values; __block volatile BOOL finished; __block volatile int32_t nextsAfterFinished; __block BOOL success; __block NSError *error; qck_beforeEach(^{ values = [NSMutableArray array]; finished = NO; nextsAfterFinished = 0; success = YES; error = nil; subscriber = [RACSubscriber subscriberWithNext:^(id value) { if (finished) OSAtomicIncrement32Barrier(&nextsAfterFinished); [values addObject:value]; } error:^(NSError *e) { error = e; success = NO; } completed:^{ success = YES; }]; }); qck_itBehavesLike(RACSubscriberExamples, ^{ return @{ RACSubscriberExampleSubscriber: subscriber, RACSubscriberExampleValuesReceivedBlock: [^{ return [values copy]; } copy], RACSubscriberExampleErrorReceivedBlock: [^{ return error; } copy], RACSubscriberExampleSuccessBlock: [^{ return success; } copy] }; }); qck_describe(@"finishing", ^{ __block void (^sendValues)(void); __block BOOL expectedSuccess; __block dispatch_group_t dispatchGroup; __block dispatch_queue_t concurrentQueue; qck_beforeEach(^{ dispatchGroup = dispatch_group_create(); expect(dispatchGroup).notTo(beNil()); concurrentQueue = dispatch_queue_create("org.reactivecocoa.ReactiveCocoa.RACSubscriberSpec", DISPATCH_QUEUE_CONCURRENT); expect(concurrentQueue).notTo(beNil()); dispatch_suspend(concurrentQueue); sendValues = [^{ for (NSUInteger i = 0; i < 15; i++) { dispatch_group_async(dispatchGroup, concurrentQueue, ^{ [subscriber sendNext:@(i)]; }); } } copy]; sendValues(); }); qck_afterEach(^{ sendValues(); dispatch_resume(concurrentQueue); // Time out after one second. dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)); expect(@(dispatch_group_wait(dispatchGroup, time))).to(equal(@0)); dispatchGroup = NULL; concurrentQueue = NULL; expect(@(nextsAfterFinished)).to(equal(@0)); if (expectedSuccess) { expect(@(success)).to(beTruthy()); expect(error).to(beNil()); } else { expect(@(success)).to(beFalsy()); } }); qck_it(@"should never invoke next after sending completed", ^{ expectedSuccess = YES; dispatch_group_async(dispatchGroup, concurrentQueue, ^{ [subscriber sendCompleted]; finished = YES; OSMemoryBarrier(); }); }); qck_it(@"should never invoke next after sending error", ^{ expectedSuccess = NO; dispatch_group_async(dispatchGroup, concurrentQueue, ^{ [subscriber sendError:nil]; finished = YES; OSMemoryBarrier(); }); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriptingAssignmentTrampolineSpec.m ================================================ // // RACSubscriptingAssignmentTrampolineSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 9/24/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACSubscriptingAssignmentTrampoline.h" #import "RACPropertySignalExamples.h" #import "RACTestObject.h" #import "RACSubject.h" QuickSpecBegin(RACSubscriptingAssignmentTrampolineSpec) id setupBlock = ^(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) { [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:testObject nilValue:nilValue][keyPath] = signal; }; qck_itBehavesLike(RACPropertySignalExamples, ^{ return @{ RACPropertySignalExamplesSetupBlock: setupBlock }; }); qck_it(@"should expand the RAC macro properly", ^{ RACSubject *subject = [RACSubject subject]; RACTestObject *testObject = [[RACTestObject alloc] init]; RAC(testObject, objectValue) = subject; [subject sendNext:@1]; expect(testObject.objectValue).to(equal(@1)); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTargetQueueSchedulerSpec.m ================================================ // // RACTargetQueueSchedulerSpec.m // ReactiveCocoa // // Created by Josh Abernathy on 6/7/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACTargetQueueScheduler.h" #import QuickSpecBegin(RACTargetQueueSchedulerSpec) qck_it(@"should have a valid current scheduler", ^{ dispatch_queue_t queue = dispatch_queue_create("test-queue", DISPATCH_QUEUE_SERIAL); RACScheduler *scheduler = [[RACTargetQueueScheduler alloc] initWithName:@"test-scheduler" targetQueue:queue]; __block RACScheduler *currentScheduler; [scheduler schedule:^{ currentScheduler = RACScheduler.currentScheduler; }]; expect(currentScheduler).toEventually(equal(scheduler)); }); qck_it(@"should schedule blocks FIFO even when given a concurrent queue", ^{ dispatch_queue_t queue = dispatch_queue_create("test-queue", DISPATCH_QUEUE_CONCURRENT); RACScheduler *scheduler = [[RACTargetQueueScheduler alloc] initWithName:@"test-scheduler" targetQueue:queue]; __block volatile int32_t startedCount = 0; __block volatile uint32_t waitInFirst = 1; [scheduler schedule:^{ OSAtomicIncrement32Barrier(&startedCount); while (waitInFirst == 1) ; }]; [scheduler schedule:^{ OSAtomicIncrement32Barrier(&startedCount); }]; expect(@(startedCount)).toEventually(equal(@1)); OSAtomicAnd32Barrier(0, &waitInFirst); expect(@(startedCount)).toEventually(equal(@2)); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestExampleScheduler.h ================================================ // // RACTestExampleScheduler.h // ReactiveCocoa // // Created by Josh Abernathy on 6/7/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import @interface RACTestExampleScheduler : RACQueueScheduler - (id)initWithQueue:(dispatch_queue_t)queue; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestExampleScheduler.m ================================================ // // RACTestExampleScheduler.m // ReactiveCocoa // // Created by Josh Abernathy on 6/7/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACTestExampleScheduler.h" #import "RACQueueScheduler+Subclass.h" @implementation RACTestExampleScheduler #pragma mark Lifecycle - (id)initWithQueue:(dispatch_queue_t)queue { return [super initWithName:nil queue:queue]; } #pragma mark RACScheduler - (RACDisposable *)schedule:(void (^)(void))block { dispatch_async(self.queue, ^{ [self performAsCurrentScheduler:block]; }); return nil; } - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)([date timeIntervalSinceNow] * NSEC_PER_SEC)); dispatch_after(when, self.queue, ^{ [self performAsCurrentScheduler:block]; }); return nil; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestObject.h ================================================ // // RACTestObject.h // ReactiveCocoa // // Created by Josh Abernathy on 9/18/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import typedef struct { long long integerField; double doubleField; } RACTestStruct; @protocol RACTestProtocol @optional - (void)optionalProtocolMethodWithObjectValue:(id)objectValue; @end @interface RACTestObject : NSObject @property (nonatomic, strong) id objectValue; @property (nonatomic, strong) id secondObjectValue; @property (nonatomic, strong) RACTestObject *strongTestObjectValue; @property (nonatomic, weak) RACTestObject *weakTestObjectValue; @property (nonatomic, weak) id weakObjectWithProtocol; @property (nonatomic, assign) NSInteger integerValue; // Holds a copy of the string. @property (nonatomic, assign) char *charPointerValue; // Holds a copy of the string. @property (nonatomic, assign) const char *constCharPointerValue; @property (nonatomic, assign) CGRect rectValue; @property (nonatomic, assign) CGSize sizeValue; @property (nonatomic, assign) CGPoint pointValue; @property (nonatomic, assign) NSRange rangeValue; @property (nonatomic, assign) RACTestStruct structValue; @property (nonatomic, assign) _Bool c99BoolValue; @property (nonatomic, copy) NSString *stringValue; @property (nonatomic, copy) NSArray *arrayValue; @property (nonatomic, copy) NSSet *setValue; @property (nonatomic, copy) NSOrderedSet *orderedSetValue; @property (nonatomic, strong) id slowObjectValue; // Returns a new object each time, with the integerValue set to 42. @property (nonatomic, copy, readonly) RACTestObject *dynamicObjectProperty; // Returns a new object each time, with the integerValue set to 42. - (RACTestObject *)dynamicObjectMethod; // Whether to allow -setNilValueForKey: to be invoked without throwing an // exception. @property (nonatomic, assign) BOOL catchSetNilValueForKey; // Has -setObjectValue:andIntegerValue: been called? @property (nonatomic, assign) BOOL hasInvokedSetObjectValueAndIntegerValue; // Has -setObjectValue:andSecondObjectValue: been called? @property (nonatomic, assign) BOOL hasInvokedSetObjectValueAndSecondObjectValue; - (void)setObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue; - (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue; // Returns a string of the form "objectValue: integerValue". - (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue; - (NSString *)combineObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue; - (void)lifeIsGood:(id)sender; + (void)lifeIsGood:(id)sender; - (NSRange)returnRangeValueWithObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue; // Writes 5 to the int pointed to by intPointer. - (void)write5ToIntPointer:(int *)intPointer; - (NSInteger)doubleInteger:(NSInteger)integer; - (char *)doubleString:(char *)string; - (const char *)doubleConstString:(const char *)string; - (RACTestStruct)doubleStruct:(RACTestStruct)testStruct; - (dispatch_block_t)wrapBlock:(dispatch_block_t)block; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestObject.m ================================================ // // RACTestObject.m // ReactiveCocoa // // Created by Josh Abernathy on 9/18/12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import "RACTestObject.h" @implementation RACTestObject - (void)dealloc { free(_charPointerValue); free((void *)_constCharPointerValue); } - (void)setNilValueForKey:(NSString *)key { if (!self.catchSetNilValueForKey) [super setNilValueForKey:key]; } - (void)setCharPointerValue:(char *)charPointerValue { if (charPointerValue == _charPointerValue) return; free(_charPointerValue); _charPointerValue = strdup(charPointerValue); } - (void)setConstCharPointerValue:(const char *)constCharPointerValue { if (constCharPointerValue == _constCharPointerValue) return; free((void *)_constCharPointerValue); _constCharPointerValue = strdup(constCharPointerValue); } - (void)setObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue { self.hasInvokedSetObjectValueAndIntegerValue = YES; self.objectValue = objectValue; self.integerValue = integerValue; } - (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue { self.hasInvokedSetObjectValueAndSecondObjectValue = YES; self.objectValue = objectValue; self.secondObjectValue = secondObjectValue; } - (void)setSlowObjectValue:(id)value { [NSThread sleepForTimeInterval:0.02]; _slowObjectValue = value; } - (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue { return [NSString stringWithFormat:@"%@: %ld", objectValue, (long)integerValue]; } - (NSString *)combineObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue { return [NSString stringWithFormat:@"%@: %@", objectValue, secondObjectValue]; } - (void)lifeIsGood:(id)sender { } + (void)lifeIsGood:(id)sender { } - (NSRange)returnRangeValueWithObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue { return NSMakeRange((NSUInteger)[objectValue integerValue], (NSUInteger)integerValue); } - (RACTestObject *)dynamicObjectProperty { return [self dynamicObjectMethod]; } - (RACTestObject *)dynamicObjectMethod { RACTestObject *testObject = [[RACTestObject alloc] init]; testObject.integerValue = 42; return testObject; } - (void)write5ToIntPointer:(int *)intPointer { NSCParameterAssert(intPointer != NULL); *intPointer = 5; } - (NSInteger)doubleInteger:(NSInteger)integer { return integer * 2; } - (char *)doubleString:(char *)string { size_t doubledSize = strlen(string) * 2 + 1; char *doubledString = malloc(sizeof(char) * doubledSize); doubledString[0] = '\0'; strlcat(doubledString, string, doubledSize); strlcat(doubledString, string, doubledSize); dispatch_async(dispatch_get_main_queue(), ^{ free(doubledString); }); return doubledString; } - (const char *)doubleConstString:(const char *)string { return [self doubleString:(char *)string]; } - (RACTestStruct)doubleStruct:(RACTestStruct)testStruct { testStruct.integerField *= 2; testStruct.doubleField *= 2; return testStruct; } - (dispatch_block_t)wrapBlock:(dispatch_block_t)block { return ^{ block(); }; } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestSchedulerSpec.m ================================================ // // RACTestSchedulerSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-07-06. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACTestScheduler.h" QuickSpecBegin(RACTestSchedulerSpec) __block RACTestScheduler *scheduler; qck_beforeEach(^{ scheduler = [[RACTestScheduler alloc] init]; expect(scheduler).notTo(beNil()); }); qck_it(@"should do nothing when stepping while empty", ^{ [scheduler step]; [scheduler step:5]; [scheduler stepAll]; }); qck_it(@"should execute the earliest enqueued block when stepping", ^{ __block BOOL firstExecuted = NO; [scheduler schedule:^{ firstExecuted = YES; }]; __block BOOL secondExecuted = NO; [scheduler schedule:^{ secondExecuted = YES; }]; expect(@(firstExecuted)).to(beFalsy()); expect(@(secondExecuted)).to(beFalsy()); [scheduler step]; expect(@(firstExecuted)).to(beTruthy()); expect(@(secondExecuted)).to(beFalsy()); [scheduler step]; expect(@(secondExecuted)).to(beTruthy()); }); qck_it(@"should step multiple times", ^{ __block BOOL firstExecuted = NO; [scheduler schedule:^{ firstExecuted = YES; }]; __block BOOL secondExecuted = NO; [scheduler schedule:^{ secondExecuted = YES; }]; __block BOOL thirdExecuted = NO; [scheduler schedule:^{ thirdExecuted = YES; }]; expect(@(firstExecuted)).to(beFalsy()); expect(@(secondExecuted)).to(beFalsy()); expect(@(thirdExecuted)).to(beFalsy()); [scheduler step:2]; expect(@(firstExecuted)).to(beTruthy()); expect(@(secondExecuted)).to(beTruthy()); expect(@(thirdExecuted)).to(beFalsy()); [scheduler step:1]; expect(@(thirdExecuted)).to(beTruthy()); }); qck_it(@"should step through all scheduled blocks", ^{ __block NSUInteger executions = 0; for (NSUInteger i = 0; i < 10; i++) { [scheduler schedule:^{ executions++; }]; } expect(@(executions)).to(equal(@0)); [scheduler stepAll]; expect(@(executions)).to(equal(@10)); }); qck_it(@"should execute blocks in date order when stepping", ^{ __block BOOL laterExecuted = NO; [scheduler after:[NSDate distantFuture] schedule:^{ laterExecuted = YES; }]; __block BOOL earlierExecuted = NO; [scheduler after:[NSDate dateWithTimeIntervalSinceNow:20] schedule:^{ earlierExecuted = YES; }]; expect(@(earlierExecuted)).to(beFalsy()); expect(@(laterExecuted)).to(beFalsy()); [scheduler step]; expect(@(earlierExecuted)).to(beTruthy()); expect(@(laterExecuted)).to(beFalsy()); [scheduler step]; expect(@(laterExecuted)).to(beTruthy()); }); qck_it(@"should execute delayed blocks in date order when stepping", ^{ __block BOOL laterExecuted = NO; [scheduler afterDelay:100 schedule:^{ laterExecuted = YES; }]; __block BOOL earlierExecuted = NO; [scheduler afterDelay:50 schedule:^{ earlierExecuted = YES; }]; expect(@(earlierExecuted)).to(beFalsy()); expect(@(laterExecuted)).to(beFalsy()); [scheduler step]; expect(@(earlierExecuted)).to(beTruthy()); expect(@(laterExecuted)).to(beFalsy()); [scheduler step]; expect(@(laterExecuted)).to(beTruthy()); }); qck_it(@"should execute a repeating blocks in date order", ^{ __block NSUInteger firstExecutions = 0; [scheduler after:[NSDate dateWithTimeIntervalSinceNow:20] repeatingEvery:5 withLeeway:0 schedule:^{ firstExecutions++; }]; __block NSUInteger secondExecutions = 0; [scheduler after:[NSDate dateWithTimeIntervalSinceNow:22] repeatingEvery:10 withLeeway:0 schedule:^{ secondExecutions++; }]; expect(@(firstExecutions)).to(equal(@0)); expect(@(secondExecutions)).to(equal(@0)); // 20 ticks [scheduler step]; expect(@(firstExecutions)).to(equal(@1)); expect(@(secondExecutions)).to(equal(@0)); // 22 ticks [scheduler step]; expect(@(firstExecutions)).to(equal(@1)); expect(@(secondExecutions)).to(equal(@1)); // 25 ticks [scheduler step]; expect(@(firstExecutions)).to(equal(@2)); expect(@(secondExecutions)).to(equal(@1)); // 30 ticks [scheduler step]; expect(@(firstExecutions)).to(equal(@3)); expect(@(secondExecutions)).to(equal(@1)); // 32 ticks [scheduler step]; expect(@(firstExecutions)).to(equal(@3)); expect(@(secondExecutions)).to(equal(@2)); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestUIButton.h ================================================ // // RACTestUIButton.h // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import // Enables use of -sendActionsForControlEvents: in unit tests. @interface RACTestUIButton : UIButton + (instancetype)button; @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestUIButton.m ================================================ // // RACTestUIButton.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2013-06-15. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import "RACTestUIButton.h" @implementation RACTestUIButton + (instancetype)button { RACTestUIButton *button = [self buttonWithType:UIButtonTypeCustom]; return button; } // Required for unit testing – controls don't work normally // outside of normal apps. -(void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" [target performSelector:action withObject:self]; #pragma clang diagnostic pop } @end ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTupleSpec.m ================================================ // // RACTupleSpec.m // ReactiveCocoa // // Created by Justin Spahr-Summers on 2012-12-12. // Copyright (c) 2012 GitHub, Inc. All rights reserved. // #import #import #import "RACTuple.h" #import "RACUnit.h" QuickSpecBegin(RACTupleSpec) qck_describe(@"RACTupleUnpack", ^{ qck_it(@"should unpack a single value", ^{ RACTupleUnpack(RACUnit *value) = [RACTuple tupleWithObjects:RACUnit.defaultUnit, nil]; expect(value).to(equal(RACUnit.defaultUnit)); }); qck_it(@"should translate RACTupleNil", ^{ RACTupleUnpack(id value) = [RACTuple tupleWithObjects:RACTupleNil.tupleNil, nil]; expect(value).to(beNil()); }); qck_it(@"should unpack multiple values", ^{ RACTupleUnpack(NSString *str, NSNumber *num) = [RACTuple tupleWithObjects:@"foobar", @5, nil]; expect(str).to(equal(@"foobar")); expect(num).to(equal(@5)); }); qck_it(@"should fill in missing values with nil", ^{ RACTupleUnpack(NSString *str, NSNumber *num) = [RACTuple tupleWithObjects:@"foobar", nil]; expect(str).to(equal(@"foobar")); expect(num).to(beNil()); }); qck_it(@"should skip any values not assigned to", ^{ RACTupleUnpack(NSString *str, NSNumber *num) = [RACTuple tupleWithObjects:@"foobar", @5, RACUnit.defaultUnit, nil]; expect(str).to(equal(@"foobar")); expect(num).to(equal(@5)); }); qck_it(@"should keep an unpacked value alive when captured in a block", ^{ __weak id weakPtr = nil; id (^block)(void) = nil; @autoreleasepool { RACTupleUnpack(NSString *str) = [RACTuple tupleWithObjects:[[NSMutableString alloc] init], nil]; weakPtr = str; expect(weakPtr).notTo(beNil()); block = [^{ return str; } copy]; } expect(weakPtr).notTo(beNil()); expect(block()).to(equal(weakPtr)); }); }); qck_describe(@"RACTuplePack", ^{ qck_it(@"should pack a single value", ^{ RACTuple *tuple = [RACTuple tupleWithObjects:RACUnit.defaultUnit, nil]; expect(RACTuplePack(RACUnit.defaultUnit)).to(equal(tuple)); }); qck_it(@"should translate nil", ^{ RACTuple *tuple = [RACTuple tupleWithObjects:RACTupleNil.tupleNil, nil]; expect(RACTuplePack(nil)).to(equal(tuple)); }); qck_it(@"should pack multiple values", ^{ NSString *string = @"foobar"; NSNumber *number = @5; RACTuple *tuple = [RACTuple tupleWithObjects:string, number, nil]; expect(RACTuplePack(string, number)).to(equal(tuple)); }); }); qck_describe(@"-tupleByAddingObject:", ^{ __block RACTuple *tuple; qck_beforeEach(^{ tuple = RACTuplePack(@"foo", nil, @"bar"); }); qck_it(@"should add a non-nil object", ^{ RACTuple *newTuple = [tuple tupleByAddingObject:@"buzz"]; expect(@(newTuple.count)).to(equal(@4)); expect(newTuple[0]).to(equal(@"foo")); expect(newTuple[1]).to(beNil()); expect(newTuple[2]).to(equal(@"bar")); expect(newTuple[3]).to(equal(@"buzz")); }); qck_it(@"should add nil", ^{ RACTuple *newTuple = [tuple tupleByAddingObject:nil]; expect(@(newTuple.count)).to(equal(@4)); expect(newTuple[0]).to(equal(@"foo")); expect(newTuple[1]).to(beNil()); expect(newTuple[2]).to(equal(@"bar")); expect(newTuple[3]).to(beNil()); }); qck_it(@"should add NSNull", ^{ RACTuple *newTuple = [tuple tupleByAddingObject:NSNull.null]; expect(@(newTuple.count)).to(equal(@4)); expect(newTuple[0]).to(equal(@"foo")); expect(newTuple[1]).to(beNil()); expect(newTuple[2]).to(equal(@"bar")); expect(newTuple[3]).to(equal(NSNull.null)); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIActionSheetRACSupportSpec.m ================================================ // // UIActionSheetRACSupportSpec.m // ReactiveCocoa // // Created by Dave Lee on 2013-06-22. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACSignal.h" #import "RACSignal+Operations.h" #import "UIActionSheet+RACSignalSupport.h" QuickSpecBegin(UIActionSheetRACSupportSpec) qck_describe(@"-rac_buttonClickedSignal", ^{ __block UIActionSheet *actionSheet; qck_beforeEach(^{ actionSheet = [[UIActionSheet alloc] init]; [actionSheet addButtonWithTitle:@"Button 0"]; [actionSheet addButtonWithTitle:@"Button 1"]; expect(actionSheet).notTo(beNil()); }); qck_it(@"should send the index of the clicked button", ^{ __block NSNumber *index = nil; [actionSheet.rac_buttonClickedSignal subscribeNext:^(NSNumber *i) { index = i; }]; [actionSheet.delegate actionSheet:actionSheet clickedButtonAtIndex:1]; expect(index).to(equal(@1)); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIAlertViewRACSupportSpec.m ================================================ // // UIAlertViewRACSupportSpec.m // ReactiveCocoa // // Created by Henrik Hodne on 6/16/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import #import "RACSignal.h" #import "UIAlertView+RACSignalSupport.h" QuickSpecBegin(UIAlertViewRACSupportSpec) qck_describe(@"UIAlertView", ^{ __block UIAlertView *alertView; qck_beforeEach(^{ alertView = [[UIAlertView alloc] initWithFrame:CGRectZero]; expect(alertView).notTo(beNil()); }); qck_it(@"sends the index of the clicked button to the buttonClickedSignal when a button is clicked", ^{ __block NSInteger index = -1; [alertView.rac_buttonClickedSignal subscribeNext:^(NSNumber *sentIndex) { index = sentIndex.integerValue; }]; [alertView.delegate alertView:alertView clickedButtonAtIndex:2]; expect(@(index)).to(equal(@2)); }); qck_it(@"sends the index of the appropriate button to the willDismissSignal when dismissed programatically", ^{ __block NSInteger index = -1; [alertView.rac_willDismissSignal subscribeNext:^(NSNumber *sentIndex) { index = sentIndex.integerValue; }]; [alertView.delegate alertView:alertView willDismissWithButtonIndex:2]; expect(@(index)).to(equal(@2)); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIBarButtonItemRACSupportSpec.m ================================================ // // UIBarButtonItemRACSupportSpec.m // ReactiveCocoa // // Created by Kyle LeNeau on 4/13/13. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACControlCommandExamples.h" #import "UIBarButtonItem+RACCommandSupport.h" #import "RACCommand.h" #import "RACDisposable.h" QuickSpecBegin(UIBarButtonItemRACSupportSpec) qck_describe(@"UIBarButtonItem", ^{ __block UIBarButtonItem *button; qck_beforeEach(^{ button = [[UIBarButtonItem alloc] init]; expect(button).notTo(beNil()); }); qck_itBehavesLike(RACControlCommandExamples, ^{ return @{ RACControlCommandExampleControl: button, RACControlCommandExampleActivateBlock: ^(UIBarButtonItem *button) { NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[button.target methodSignatureForSelector:button.action]]; invocation.selector = button.action; id target = button.target; [invocation setArgument:&target atIndex:2]; [invocation invokeWithTarget:target]; } }; }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIButtonRACSupportSpec.m ================================================ // // UIButtonRACSupportSpec.m // ReactiveCocoa // // Created by Ash Furrow on 2013-06-06. // Copyright (c) 2013 GitHub, Inc. All rights reserved. // #import #import #import "RACControlCommandExamples.h" #import "RACTestUIButton.h" #import "UIButton+RACCommandSupport.h" #import "RACCommand.h" #import "RACDisposable.h" QuickSpecBegin(UIButtonRACSupportSpec) qck_describe(@"UIButton", ^{ __block UIButton *button; qck_beforeEach(^{ button = [RACTestUIButton button]; expect(button).notTo(beNil()); }); qck_itBehavesLike(RACControlCommandExamples, ^{ return @{ RACControlCommandExampleControl: button, RACControlCommandExampleActivateBlock: ^(UIButton *button) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" [button sendActionsForControlEvents:UIControlEventTouchUpInside]; #pragma clang diagnostic pop } }; }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIImagePickerControllerRACSupportSpec.m ================================================ // // UIImagePickerControllerRACSupportSpec.m // ReactiveCocoa // // Created by Timur Kuchkarov on 17.04.14. // Copyright (c) 2014 GitHub, Inc. All rights reserved. // #import #import #import "UIImagePickerController+RACSignalSupport.h" #import "RACSignal.h" QuickSpecBegin(UIImagePickerControllerRACSupportSpec) qck_describe(@"UIImagePickerController", ^{ __block UIImagePickerController *imagePicker; qck_beforeEach(^{ imagePicker = [[UIImagePickerController alloc] init]; expect(imagePicker).notTo(beNil()); }); qck_it(@"sends the user info dictionary after confirmation", ^{ __block NSDictionary *selectedImageUserInfo = nil; [imagePicker.rac_imageSelectedSignal subscribeNext:^(NSDictionary *userInfo) { selectedImageUserInfo = userInfo; }]; NSDictionary *info = @{ UIImagePickerControllerMediaType: @"public.image", UIImagePickerControllerMediaMetadata: @{} }; [imagePicker.delegate imagePickerController:imagePicker didFinishPickingMediaWithInfo:info]; expect(selectedImageUserInfo).to(equal(info)); }); qck_it(@"cancels image picking process", ^{ __block BOOL didSend = NO; __block BOOL didComplete = NO; [imagePicker.rac_imageSelectedSignal subscribeNext:^(NSDictionary *userInfo) { didSend = YES; } completed:^{ didComplete = YES; }]; [imagePicker.delegate imagePickerControllerDidCancel:imagePicker]; expect(@(didSend)).to(beFalsy()); expect(@(didComplete)).to(beTruthy()); }); }); QuickSpecEnd ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/ActionSpec.swift ================================================ // // ActionSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-12-11. // Copyright (c) 2014 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa class ActionSpec: QuickSpec { override func spec() { describe("Action") { var action: Action! var enabled: MutableProperty! var executionCount = 0 var values: [String] = [] var errors: [NSError] = [] var scheduler: TestScheduler! let testError = NSError(domain: "ActionSpec", code: 1, userInfo: nil) beforeEach { executionCount = 0 values = [] errors = [] enabled = MutableProperty(false) scheduler = TestScheduler() action = Action(enabledIf: enabled) { number in return SignalProducer { observer, disposable in executionCount += 1 if number % 2 == 0 { observer.sendNext("\(number)") observer.sendNext("\(number)\(number)") scheduler.schedule { observer.sendCompleted() } } else { scheduler.schedule { observer.sendFailed(testError) } } } } action.values.observeNext { values.append($0) } action.errors.observeNext { errors.append($0) } } it("should be disabled and not executing after initialization") { expect(action.enabled.value) == false expect(action.executing.value) == false } it("should error if executed while disabled") { var receivedError: ActionError? action.apply(0).startWithFailed { receivedError = $0 } expect(receivedError).notTo(beNil()) if let error = receivedError { let expectedError = ActionError.NotEnabled expect(error == expectedError) == true } } it("should enable and disable based on the given property") { enabled.value = true expect(action.enabled.value) == true expect(action.executing.value) == false enabled.value = false expect(action.enabled.value) == false expect(action.executing.value) == false } describe("execution") { beforeEach { enabled.value = true } it("should execute successfully") { var receivedValue: String? action.apply(0) .assumeNoErrors() .startWithNext { receivedValue = $0 } expect(executionCount) == 1 expect(action.executing.value) == true expect(action.enabled.value) == false expect(receivedValue) == "00" expect(values) == [ "0", "00" ] expect(errors) == [] scheduler.run() expect(action.executing.value) == false expect(action.enabled.value) == true expect(values) == [ "0", "00" ] expect(errors) == [] } it("should execute with an error") { var receivedError: ActionError? action.apply(1).startWithFailed { receivedError = $0 } expect(executionCount) == 1 expect(action.executing.value) == true expect(action.enabled.value) == false scheduler.run() expect(action.executing.value) == false expect(action.enabled.value) == true expect(receivedError).notTo(beNil()) if let error = receivedError { let expectedError = ActionError.ProducerError(testError) expect(error == expectedError) == true } expect(values) == [] expect(errors) == [ testError ] } } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/AtomicSpec.swift ================================================ // // AtomicSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. // import Nimble import Quick import ReactiveCocoa class AtomicSpec: QuickSpec { override func spec() { var atomic: Atomic! beforeEach { atomic = Atomic(1) } it("should read and write the value directly") { expect(atomic.value) == 1 atomic.value = 2 expect(atomic.value) == 2 } it("should swap the value atomically") { expect(atomic.swap(2)) == 1 expect(atomic.value) == 2 } it("should modify the value atomically") { expect(atomic.modify({ $0 + 1 })) == 1 expect(atomic.value) == 2 } it("should perform an action with the value") { let result: Bool = atomic.withValue { $0 == 1 } expect(result) == true expect(atomic.value) == 1 } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/BagSpec.swift ================================================ // // BagSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. // import Nimble import Quick import ReactiveCocoa class BagSpec: QuickSpec { override func spec() { var bag = Bag() beforeEach { bag = Bag() } it("should insert values") { bag.insert("foo") bag.insert("bar") bag.insert("buzz") expect(bag).to(contain("foo")) expect(bag).to(contain("bar")) expect(bag).to(contain("buzz")) expect(bag).toNot(contain("fuzz")) expect(bag).toNot(contain("foobar")) } it("should remove values given the token from insertion") { let a = bag.insert("foo") let b = bag.insert("bar") let c = bag.insert("buzz") bag.removeValueForToken(b) expect(bag).to(contain("foo")) expect(bag).toNot(contain("bar")) expect(bag).to(contain("buzz")) bag.removeValueForToken(a) expect(bag).toNot(contain("foo")) expect(bag).toNot(contain("bar")) expect(bag).to(contain("buzz")) bag.removeValueForToken(c) expect(bag).toNot(contain("foo")) expect(bag).toNot(contain("bar")) expect(bag).toNot(contain("buzz")) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/CocoaActionSpec.swift ================================================ import Result import Nimble import Quick import ReactiveCocoa class CocoaActionSpec: QuickSpec { override func spec() { var action: Action! beforeEach { action = Action { value in SignalProducer(value: value + 1) } expect(action.enabled.value) == true expect(action.unsafeCocoaAction.enabled).toEventually(beTruthy()) } #if os(OSX) it("should be compatible with AppKit") { let control = NSControl(frame: NSZeroRect) control.target = action.unsafeCocoaAction control.action = CocoaAction.selector control.performClick(nil) } #elseif os(iOS) it("should be compatible with UIKit") { let control = UIControl(frame: CGRectZero) control.addTarget(action.unsafeCocoaAction, action: CocoaAction.selector, forControlEvents: UIControlEvents.TouchDown) control.sendActionsForControlEvents(UIControlEvents.TouchDown) } #endif it("should generate KVO notifications for enabled") { var values: [Bool] = [] let cocoaAction = action.unsafeCocoaAction cocoaAction .rac_valuesForKeyPath("enabled", observer: nil) .toSignalProducer() .map { $0! as! Bool } .start(Observer(next: { values.append($0) })) expect(values) == [ true ] let result = action.apply(0).first() expect(result?.value) == 1 expect(values).toEventually(equal([ true, false, true ])) _ = cocoaAction } it("should generate KVO notifications for executing") { var values: [Bool] = [] let cocoaAction = action.unsafeCocoaAction cocoaAction .rac_valuesForKeyPath("executing", observer: nil) .toSignalProducer() .map { $0! as! Bool } .start(Observer(next: { values.append($0) })) expect(values) == [ false ] let result = action.apply(0).first() expect(result?.value) == 1 expect(values).toEventually(equal([ false, true, false ])) _ = cocoaAction } context("lifetime") { it("unsafeCocoaAction should not create a retain cycle") { weak var weakAction: Action? var action: Action? = Action { _ in return SignalProducer(value: 42) } weakAction = action expect(weakAction).notTo(beNil()) _ = action!.unsafeCocoaAction action = nil expect(weakAction).to(beNil()) } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/DisposableSpec.swift ================================================ // // DisposableSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. // import Nimble import Quick import ReactiveCocoa class DisposableSpec: QuickSpec { override func spec() { describe("SimpleDisposable") { it("should set disposed to true") { let disposable = SimpleDisposable() expect(disposable.disposed) == false disposable.dispose() expect(disposable.disposed) == true } } describe("ActionDisposable") { it("should run the given action upon disposal") { var didDispose = false let disposable = ActionDisposable { didDispose = true } expect(didDispose) == false expect(disposable.disposed) == false disposable.dispose() expect(didDispose) == true expect(disposable.disposed) == true } } describe("CompositeDisposable") { var disposable = CompositeDisposable() beforeEach { disposable = CompositeDisposable() } it("should ignore the addition of nil") { disposable.addDisposable(nil) return } it("should dispose of added disposables") { let simpleDisposable = SimpleDisposable() disposable.addDisposable(simpleDisposable) var didDispose = false disposable.addDisposable { didDispose = true } expect(simpleDisposable.disposed) == false expect(didDispose) == false expect(disposable.disposed) == false disposable.dispose() expect(simpleDisposable.disposed) == true expect(didDispose) == true expect(disposable.disposed) == true } it("should not dispose of removed disposables") { let simpleDisposable = SimpleDisposable() let handle = disposable += simpleDisposable // We should be allowed to call this any number of times. handle.remove() handle.remove() expect(simpleDisposable.disposed) == false disposable.dispose() expect(simpleDisposable.disposed) == false } } describe("ScopedDisposable") { it("should dispose of the inner disposable upon deinitialization") { let simpleDisposable = SimpleDisposable() func runScoped() { let scopedDisposable = ScopedDisposable(simpleDisposable) expect(simpleDisposable.disposed) == false expect(scopedDisposable.disposed) == false } expect(simpleDisposable.disposed) == false runScoped() expect(simpleDisposable.disposed) == true } } describe("SerialDisposable") { var disposable: SerialDisposable! beforeEach { disposable = SerialDisposable() } it("should dispose of the inner disposable") { let simpleDisposable = SimpleDisposable() disposable.innerDisposable = simpleDisposable expect(disposable.innerDisposable).notTo(beNil()) expect(simpleDisposable.disposed) == false expect(disposable.disposed) == false disposable.dispose() expect(disposable.innerDisposable).to(beNil()) expect(simpleDisposable.disposed) == true expect(disposable.disposed) == true } it("should dispose of the previous disposable when swapping innerDisposable") { let oldDisposable = SimpleDisposable() let newDisposable = SimpleDisposable() disposable.innerDisposable = oldDisposable expect(oldDisposable.disposed) == false expect(newDisposable.disposed) == false disposable.innerDisposable = newDisposable expect(oldDisposable.disposed) == true expect(newDisposable.disposed) == false expect(disposable.disposed) == false disposable.innerDisposable = nil expect(newDisposable.disposed) == true expect(disposable.disposed) == false } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/FlattenSpec.swift ================================================ // // FlattenSpec.swift // ReactiveCocoa // // Created by Oleg Shnitko on 1/22/16. // Copyright © 2016 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa private extension SignalType { typealias Pipe = (signal: Signal, observer: Observer) } private typealias Pipe = Signal, TestError>.Pipe class FlattenSpec: QuickSpec { override func spec() { func describeSignalFlattenDisposal(flattenStrategy: FlattenStrategy, name: String) { describe(name) { var pipe: Pipe! var disposable: Disposable? beforeEach { pipe = Signal.pipe() disposable = pipe.signal .flatten(flattenStrategy) .observe { _ in } } afterEach { disposable?.dispose() } context("disposal") { var disposed = false beforeEach { disposed = false pipe.observer.sendNext(SignalProducer { _, disposable in disposable += ActionDisposable { disposed = true } }) } it("should dispose inner signals when outer signal interrupted") { pipe.observer.sendInterrupted() expect(disposed) == true } it("should dispose inner signals when outer signal failed") { pipe.observer.sendFailed(.Default) expect(disposed) == true } it("should not dispose inner signals when outer signal completed") { pipe.observer.sendCompleted() expect(disposed) == false } } } } context("Signal") { describeSignalFlattenDisposal(.Latest, name: "switchToLatest") describeSignalFlattenDisposal(.Merge, name: "merge") describeSignalFlattenDisposal(.Concat, name: "concat") } func describeSignalProducerFlattenDisposal(flattenStrategy: FlattenStrategy, name: String) { describe(name) { it("disposes original signal when result signal interrupted") { var disposed = false let disposable = SignalProducer, NoError> { _, disposable in disposable += ActionDisposable { disposed = true } } .flatten(flattenStrategy) .start() disposable.dispose() expect(disposed) == true } } } context("SignalProducer") { describeSignalProducerFlattenDisposal(.Latest, name: "switchToLatest") describeSignalProducerFlattenDisposal(.Merge, name: "merge") describeSignalProducerFlattenDisposal(.Concat, name: "concat") } describe("Signal.flatten()") { it("works with TestError and a TestError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with SequenceType as a value") { let (signal, innerObserver) = Signal<[Int], NoError>.pipe() let sequence = [1, 2, 3] var observedValues = [Int]() signal .flatten(.Concat) .observeNext { value in observedValues.append(value) } innerObserver.sendNext(sequence) expect(observedValues) == sequence } } describe("SignalProducer.flatten()") { it("works with TestError and a TestError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatten(.Latest) .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(inner) innerObserver.sendNext(4) expect(observed) == 4 } it("works with SequenceType as a value") { let sequence = [1, 2, 3] var observedValues = [Int]() let producer = SignalProducer<[Int], NoError>(value: sequence) producer .flatten(.Latest) .startWithNext { value in observedValues.append(value) } expect(observedValues) == sequence } } describe("Signal.flatMap()") { it("works with TestError and a TestError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError Signal") { typealias Inner = Signal typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = Signal let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .observeNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } } describe("SignalProducer.flatMap()") { it("works with TestError and a TestError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError Signal") { typealias Inner = Signal typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a TestError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with NoError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } it("works with TestError and a NoError SignalProducer") { typealias Inner = SignalProducer typealias Outer = SignalProducer let (inner, innerObserver) = Inner.pipe() let (outer, outerObserver) = Outer.pipe() var observed: Int? = nil outer .flatMap(.Latest) { _ in inner } .assumeNoErrors() .startWithNext { value in observed = value } outerObserver.sendNext(4) innerObserver.sendNext(4) expect(observed) == 4 } } describe("Signal.merge()") { it("should emit values from all signals") { let (signal1, observer1) = Signal.pipe() let (signal2, observer2) = Signal.pipe() let mergedSignals = Signal.merge([signal1, signal2]) var lastValue: Int? mergedSignals.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer1.sendNext(1) expect(lastValue) == 1 observer2.sendNext(2) expect(lastValue) == 2 observer1.sendNext(3) expect(lastValue) == 3 } it("should not stop when one signal completes") { let (signal1, observer1) = Signal.pipe() let (signal2, observer2) = Signal.pipe() let mergedSignals = Signal.merge([signal1, signal2]) var lastValue: Int? mergedSignals.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer1.sendNext(1) expect(lastValue) == 1 observer1.sendCompleted() expect(lastValue) == 1 observer2.sendNext(2) expect(lastValue) == 2 } it("should complete when all signals complete") { let (signal1, observer1) = Signal.pipe() let (signal2, observer2) = Signal.pipe() let mergedSignals = Signal.merge([signal1, signal2]) var completed = false mergedSignals.observeCompleted { completed = true } expect(completed) == false observer1.sendNext(1) expect(completed) == false observer1.sendCompleted() expect(completed) == false observer2.sendCompleted() expect(completed) == true } } describe("SignalProducer.merge()") { it("should emit values from all producers") { let (signal1, observer1) = SignalProducer.pipe() let (signal2, observer2) = SignalProducer.pipe() let mergedSignals = SignalProducer.merge([signal1, signal2]) var lastValue: Int? mergedSignals.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer1.sendNext(1) expect(lastValue) == 1 observer2.sendNext(2) expect(lastValue) == 2 observer1.sendNext(3) expect(lastValue) == 3 } it("should not stop when one producer completes") { let (signal1, observer1) = SignalProducer.pipe() let (signal2, observer2) = SignalProducer.pipe() let mergedSignals = SignalProducer.merge([signal1, signal2]) var lastValue: Int? mergedSignals.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer1.sendNext(1) expect(lastValue) == 1 observer1.sendCompleted() expect(lastValue) == 1 observer2.sendNext(2) expect(lastValue) == 2 } it("should complete when all producers complete") { let (signal1, observer1) = SignalProducer.pipe() let (signal2, observer2) = SignalProducer.pipe() let mergedSignals = SignalProducer.merge([signal1, signal2]) var completed = false mergedSignals.startWithCompleted { completed = true } expect(completed) == false observer1.sendNext(1) expect(completed) == false observer1.sendCompleted() expect(completed) == false observer2.sendCompleted() expect(completed) == true } } describe("SignalProducer.prefix()") { it("should emit initial value") { let (signal, observer) = SignalProducer.pipe() let mergedSignals = signal.prefix(value: 0) var lastValue: Int? mergedSignals.startWithNext { lastValue = $0 } expect(lastValue) == 0 observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 observer.sendNext(3) expect(lastValue) == 3 } it("should emit initial value") { let (signal, observer) = SignalProducer.pipe() let mergedSignals = signal.prefix(SignalProducer(value: 0)) var lastValue: Int? mergedSignals.startWithNext { lastValue = $0 } expect(lastValue) == 0 observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 observer.sendNext(3) expect(lastValue) == 3 } } describe("SignalProducer.concat(value:)") { it("should emit final value") { let (signal, observer) = SignalProducer.pipe() let mergedSignals = signal.concat(value: 4) var lastValue: Int? mergedSignals.startWithNext { lastValue = $0 } observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 observer.sendNext(3) expect(lastValue) == 3 observer.sendCompleted() expect(lastValue) == 4 } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/FoundationExtensionsSpec.swift ================================================ // // FoundationExtensionsSpec.swift // ReactiveCocoa // // Created by Neil Pankey on 5/22/15. // Copyright (c) 2015 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa class FoundationExtensionsSpec: QuickSpec { override func spec() { describe("NSNotificationCenter.rac_notifications") { let center = NSNotificationCenter.defaultCenter() it("should send notifications on the producer") { let producer = center.rac_notifications("rac_notifications_test") var notif: NSNotification? = nil let disposable = producer.startWithNext { notif = $0 } center.postNotificationName("some_other_notification", object: nil) expect(notif).to(beNil()) center.postNotificationName("rac_notifications_test", object: nil) expect(notif?.name) == "rac_notifications_test" notif = nil disposable.dispose() center.postNotificationName("rac_notifications_test", object: nil) expect(notif).to(beNil()) } it("should send Interrupted when the observed object is freed") { var observedObject: AnyObject? = NSObject() let producer = center.rac_notifications(object: observedObject) observedObject = nil var interrupted = false let disposable = producer.startWithInterrupted { interrupted = true } expect(interrupted) == true disposable.dispose() } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/ObjectiveCBridgingSpec.swift ================================================ // // ObjectiveCBridgingSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa import XCTest class ObjectiveCBridgingSpec: QuickSpec { override func spec() { describe("RACScheduler") { var originalScheduler: RACTestScheduler! var scheduler: DateSchedulerType! beforeEach { originalScheduler = RACTestScheduler() scheduler = originalScheduler as DateSchedulerType } it("gives current date") { expect(scheduler.currentDate).to(beCloseTo(NSDate())) } it("schedules actions") { var actionRan: Bool = false scheduler.schedule { actionRan = true } expect(actionRan) == false originalScheduler.step() expect(actionRan) == true } it("does not invoke action if disposed") { var actionRan: Bool = false let disposable: Disposable? = scheduler.schedule { actionRan = true } expect(actionRan) == false disposable!.dispose() originalScheduler.step() expect(actionRan) == false } } describe("RACSignal.toSignalProducer") { it("should subscribe once per start()") { var subscriptions = 0 let racSignal = RACSignal.createSignal { subscriber in subscriber.sendNext(subscriptions) subscriber.sendCompleted() subscriptions += 1 return nil } let producer = racSignal.toSignalProducer().map { $0 as! Int } expect((producer.single())?.value) == 0 expect((producer.single())?.value) == 1 expect((producer.single())?.value) == 2 } it("should forward errors") { let error = TestError.Default as NSError let racSignal = RACSignal.error(error) let producer = racSignal.toSignalProducer() let result = producer.last() expect(result?.error) == error } } describe("toRACSignal") { let key = "TestKey" let userInfo: [String: String] = [key: "TestValue"] let testNSError = NSError(domain: "TestDomain", code: 1, userInfo: userInfo) describe("on a Signal") { it("should forward events") { let (signal, observer) = Signal.pipe() let racSignal = signal.toRACSignal() var lastValue: NSNumber? var didComplete = false racSignal.subscribeNext({ number in lastValue = number as? NSNumber }, completed: { didComplete = true }) expect(lastValue).to(beNil()) for number in [1, 2, 3] { observer.sendNext(number) expect(lastValue) == number } expect(didComplete) == false observer.sendCompleted() expect(didComplete) == true } it("should convert errors to NSError") { let (signal, observer) = Signal.pipe() let racSignal = signal.toRACSignal() let expectedError = TestError.Error2 var error: NSError? racSignal.subscribeError { error = $0 return } observer.sendFailed(expectedError) expect(error) == expectedError as NSError } it("should maintain userInfo on NSError") { let (signal, observer) = Signal.pipe() let racSignal = signal.toRACSignal() var error: NSError? racSignal.subscribeError { error = $0 return } observer.sendFailed(testNSError) let userInfoValue = error?.userInfo[key] as? String expect(userInfoValue) == userInfo[key] } } describe("on a SignalProducer") { it("should start once per subscription") { var subscriptions = 0 let producer = SignalProducer.attempt { defer { subscriptions += 1 } return .Success(subscriptions) } let racSignal = producer.toRACSignal() expect(racSignal.first() as? NSNumber) == 0 expect(racSignal.first() as? NSNumber) == 1 expect(racSignal.first() as? NSNumber) == 2 } it("should convert errors to NSError") { let producer = SignalProducer(error: .Error1) let racSignal = producer.toRACSignal().materialize() let event = racSignal.first() as? RACEvent expect(event?.error) == TestError.Error1 as NSError } it("should maintain userInfo on NSError") { let producer = SignalProducer(error: testNSError) let racSignal = producer.toRACSignal().materialize() let event = racSignal.first() as? RACEvent let userInfoValue = event?.error.userInfo[key] as? String expect(userInfoValue) == userInfo[key] } } } describe("RACCommand.toAction") { var command: RACCommand! var results: [Int] = [] var enabledSubject: RACSubject! var enabled = false var action: Action! beforeEach { enabledSubject = RACSubject() results = [] command = RACCommand(enabled: enabledSubject) { (input: AnyObject?) -> RACSignal! in let inputNumber = input as! Int return RACSignal.`return`(inputNumber + 1) } expect(command).notTo(beNil()) command.enabled.subscribeNext { enabled = $0 as! Bool } expect(enabled) == true command.executionSignals.flatten().subscribeNext { results.append($0 as! Int) } expect(results) == [] action = command.toAction() } it("should reflect the enabledness of the command") { expect(action.enabled.value) == true enabledSubject.sendNext(false) expect(enabled).toEventually(beFalsy()) expect(action.enabled.value) == false } it("should execute the command once per start()") { let producer = action.apply(0) expect(results) == [] producer.start() expect(results).toEventually(equal([ 1 ])) producer.start() expect(results).toEventually(equal([ 1, 1 ])) let otherProducer = action.apply(2) expect(results) == [ 1, 1 ] otherProducer.start() expect(results).toEventually(equal([ 1, 1, 3 ])) producer.start() expect(results).toEventually(equal([ 1, 1, 3, 1 ])) } } describe("toRACCommand") { var action: Action! var results: [NSString] = [] var enabledProperty: MutableProperty! var command: RACCommand! var enabled = false beforeEach { results = [] enabledProperty = MutableProperty(true) action = Action(enabledIf: enabledProperty) { input in let inputNumber = input as! Int return SignalProducer(value: "\(inputNumber + 1)") } expect(action.enabled.value) == true action.values.observeNext { results.append($0) } command = toRACCommand(action) expect(command).notTo(beNil()) command.enabled.subscribeNext { enabled = $0 as! Bool } expect(enabled) == true } it("should reflect the enabledness of the action") { enabledProperty.value = false expect(enabled).toEventually(beFalsy()) enabledProperty.value = true expect(enabled).toEventually(beTruthy()) } it("should apply and start a signal once per execution") { let signal = command.execute(0) do { try signal.asynchronouslyWaitUntilCompleted() expect(results) == [ "1" ] try signal.asynchronouslyWaitUntilCompleted() expect(results) == [ "1" ] try command.execute(2).asynchronouslyWaitUntilCompleted() expect(results) == [ "1", "3" ] } catch { XCTFail("Failed to wait for completion") } } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/PropertySpec.swift ================================================ // // PropertySpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa private let initialPropertyValue = "InitialValue" private let subsequentPropertyValue = "SubsequentValue" private let finalPropertyValue = "FinalValue" class PropertySpec: QuickSpec { override func spec() { describe("ConstantProperty") { it("should have the value given at initialization") { let constantProperty = ConstantProperty(initialPropertyValue) expect(constantProperty.value) == initialPropertyValue } it("should yield a signal that interrupts observers without emitting any value.") { let constantProperty = ConstantProperty(initialPropertyValue) var signalInterrupted = false var hasUnexpectedEventsEmitted = false constantProperty.signal.observe { event in switch event { case .Interrupted: signalInterrupted = true case .Next, .Failed, .Completed: hasUnexpectedEventsEmitted = true } } expect(signalInterrupted) == true expect(hasUnexpectedEventsEmitted) == false } it("should yield a producer that sends the current value then completes") { let constantProperty = ConstantProperty(initialPropertyValue) var sentValue: String? var signalCompleted = false constantProperty.producer.start { event in switch event { case let .Next(value): sentValue = value case .Completed: signalCompleted = true case .Failed, .Interrupted: break } } expect(sentValue) == initialPropertyValue expect(signalCompleted) == true } } describe("MutableProperty") { it("should have the value given at initialization") { let mutableProperty = MutableProperty(initialPropertyValue) expect(mutableProperty.value) == initialPropertyValue } it("should yield a producer that sends the current value then all changes") { let mutableProperty = MutableProperty(initialPropertyValue) var sentValue: String? mutableProperty.producer.startWithNext { sentValue = $0 } expect(sentValue) == initialPropertyValue mutableProperty.value = subsequentPropertyValue expect(sentValue) == subsequentPropertyValue mutableProperty.value = finalPropertyValue expect(sentValue) == finalPropertyValue } it("should yield a producer that sends the current value then all changes, even if the value actually remains unchanged") { let mutableProperty = MutableProperty(initialPropertyValue) var count = 0 mutableProperty.producer.startWithNext { _ in count = count + 1 } expect(count) == 1 mutableProperty.value = initialPropertyValue expect(count) == 2 mutableProperty.value = initialPropertyValue expect(count) == 3 } it("should yield a signal that emits subsequent changes to the value") { let mutableProperty = MutableProperty(initialPropertyValue) var sentValue: String? mutableProperty.signal.observeNext { sentValue = $0 } expect(sentValue).to(beNil()) mutableProperty.value = subsequentPropertyValue expect(sentValue) == subsequentPropertyValue mutableProperty.value = finalPropertyValue expect(sentValue) == finalPropertyValue } it("should yield a signal that emits subsequent changes to the value, even if the value actually remains unchanged") { let mutableProperty = MutableProperty(initialPropertyValue) var count = 0 mutableProperty.signal.observeNext { _ in count = count + 1 } expect(count) == 0 mutableProperty.value = initialPropertyValue expect(count) == 1 mutableProperty.value = initialPropertyValue expect(count) == 2 } it("should complete its producer when deallocated") { var mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue) var producerCompleted = false mutableProperty!.producer.startWithCompleted { producerCompleted = true } mutableProperty = nil expect(producerCompleted) == true } it("should complete its signal when deallocated") { var mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue) var signalCompleted = false mutableProperty!.signal.observeCompleted { signalCompleted = true } mutableProperty = nil expect(signalCompleted) == true } it("should yield a producer which emits the latest value and complete even if the property is deallocated") { var mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue) let producer = mutableProperty!.producer var producerCompleted = false var hasUnanticipatedEvent = false var latestValue = mutableProperty?.value mutableProperty!.value = subsequentPropertyValue mutableProperty = nil producer.start { event in switch event { case let .Next(value): latestValue = value case .Completed: producerCompleted = true case .Interrupted, .Failed: hasUnanticipatedEvent = true } } expect(hasUnanticipatedEvent) == false expect(producerCompleted) == true expect(latestValue) == subsequentPropertyValue } it("should modify the value atomically") { let property = MutableProperty(initialPropertyValue) expect(property.modify({ _ in subsequentPropertyValue })) == initialPropertyValue expect(property.value) == subsequentPropertyValue } it("should modify the value atomically and subsquently send out a Next event with the new value") { let property = MutableProperty(initialPropertyValue) var value: String? property.producer.startWithNext { value = $0 } expect(value) == initialPropertyValue expect(property.modify({ _ in subsequentPropertyValue })) == initialPropertyValue expect(property.value) == subsequentPropertyValue expect(value) == subsequentPropertyValue } it("should swap the value atomically") { let property = MutableProperty(initialPropertyValue) expect(property.swap(subsequentPropertyValue)) == initialPropertyValue expect(property.value) == subsequentPropertyValue } it("should swap the value atomically and subsquently send out a Next event with the new value") { let property = MutableProperty(initialPropertyValue) var value: String? property.producer.startWithNext { value = $0 } expect(value) == initialPropertyValue expect(property.swap(subsequentPropertyValue)) == initialPropertyValue expect(property.value) == subsequentPropertyValue expect(value) == subsequentPropertyValue } it("should perform an action with the value") { let property = MutableProperty(initialPropertyValue) let result: Bool = property.withValue { $0.isEmpty } expect(result) == false expect(property.value) == initialPropertyValue } it("should not deadlock on recursive value access") { let (producer, observer) = SignalProducer.pipe() let property = MutableProperty(0) var value: Int? property <~ producer property.producer.startWithNext { _ in value = property.value } observer.sendNext(10) expect(value) == 10 } it("should not deadlock on recursive value access with a closure") { let (producer, observer) = SignalProducer.pipe() let property = MutableProperty(0) var value: Int? property <~ producer property.producer.startWithNext { _ in value = property.withValue { $0 + 1 } } observer.sendNext(10) expect(value) == 11 } it("should not deadlock on recursive observation") { let property = MutableProperty(0) var value: Int? property.producer.startWithNext { _ in property.producer.startWithNext { x in value = x } } expect(value) == 0 property.value = 1 expect(value) == 1 } it("should not deadlock on recursive ABA observation") { let propertyA = MutableProperty(0) let propertyB = MutableProperty(0) var value: Int? propertyA.producer.startWithNext { _ in propertyB.producer.startWithNext { _ in propertyA.producer.startWithNext { x in value = x } } } expect(value) == 0 propertyA.value = 1 expect(value) == 1 } } describe("AnyProperty") { describe("from a PropertyType") { it("should pass through behaviors of the input property") { let constantProperty = ConstantProperty(initialPropertyValue) let property = AnyProperty(constantProperty) var sentValue: String? var signalSentValue: String? var producerCompleted = false var signalInterrupted = false property.producer.start { event in switch event { case let .Next(value): sentValue = value case .Completed: producerCompleted = true case .Failed, .Interrupted: break } } property.signal.observe { event in switch event { case let .Next(value): signalSentValue = value case .Interrupted: signalInterrupted = true case .Failed, .Completed: break } } expect(sentValue) == initialPropertyValue expect(signalSentValue).to(beNil()) expect(producerCompleted) == true expect(signalInterrupted) == true } } describe("from a value and SignalProducer") { it("should initially take on the supplied value") { let property = AnyProperty( initialValue: initialPropertyValue, producer: SignalProducer.never) expect(property.value) == initialPropertyValue } it("should take on each value sent on the producer") { let property = AnyProperty( initialValue: initialPropertyValue, producer: SignalProducer(value: subsequentPropertyValue)) expect(property.value) == subsequentPropertyValue } } describe("from a value and Signal") { it("should initially take on the supplied value, then values sent on the signal") { let (signal, observer) = Signal.pipe() let property = AnyProperty( initialValue: initialPropertyValue, signal: signal) expect(property.value) == initialPropertyValue observer.sendNext(subsequentPropertyValue) expect(property.value) == subsequentPropertyValue } } } describe("DynamicProperty") { var object: ObservableObject! var property: DynamicProperty! let propertyValue: () -> Int? = { if let value: AnyObject = property?.value { return value as? Int } else { return nil } } beforeEach { object = ObservableObject() expect(object.rac_value) == 0 property = DynamicProperty(object: object, keyPath: "rac_value") } afterEach { object = nil } it("should read the underlying object") { expect(propertyValue()) == 0 object.rac_value = 1 expect(propertyValue()) == 1 } it("should write the underlying object") { property.value = 1 expect(object.rac_value) == 1 expect(propertyValue()) == 1 } it("should yield a producer that sends the current value and then the changes for the key path of the underlying object") { var values: [Int] = [] property.producer.startWithNext { value in expect(value).notTo(beNil()) values.append(value as! Int) } expect(values) == [ 0 ] property.value = 1 expect(values) == [ 0, 1 ] object.rac_value = 2 expect(values) == [ 0, 1, 2 ] } it("should yield a producer that sends the current value and then the changes for the key path of the underlying object, even if the value actually remains unchanged") { var values: [Int] = [] property.producer.startWithNext { value in expect(value).notTo(beNil()) values.append(value as! Int) } expect(values) == [ 0 ] property.value = 0 expect(values) == [ 0, 0 ] object.rac_value = 0 expect(values) == [ 0, 0, 0 ] } it("should yield a signal that emits subsequent values for the key path of the underlying object") { var values: [Int] = [] property.signal.observeNext { value in expect(value).notTo(beNil()) values.append(value as! Int) } expect(values) == [] property.value = 1 expect(values) == [ 1 ] object.rac_value = 2 expect(values) == [ 1, 2 ] } it("should yield a signal that emits subsequent values for the key path of the underlying object, even if the value actually remains unchanged") { var values: [Int] = [] property.signal.observeNext { value in expect(value).notTo(beNil()) values.append(value as! Int) } expect(values) == [] property.value = 0 expect(values) == [ 0 ] object.rac_value = 0 expect(values) == [ 0, 0 ] } it("should have a completed producer when the underlying object deallocates") { var completed = false property = { // Use a closure so this object has a shorter lifetime. let object = ObservableObject() let property = DynamicProperty(object: object, keyPath: "rac_value") property.producer.startWithCompleted { completed = true } expect(completed) == false expect(property.value).notTo(beNil()) return property }() expect(completed).toEventually(beTruthy()) expect(property.value).to(beNil()) } it("should have a completed signal when the underlying object deallocates") { var completed = false property = { // Use a closure so this object has a shorter lifetime. let object = ObservableObject() let property = DynamicProperty(object: object, keyPath: "rac_value") property.signal.observeCompleted { completed = true } expect(completed) == false expect(property.value).notTo(beNil()) return property }() expect(completed).toEventually(beTruthy()) expect(property.value).to(beNil()) } it("should retain property while DynamicProperty's underlying object is retained"){ weak var dynamicProperty: DynamicProperty? = property property = nil expect(dynamicProperty).toNot(beNil()) object = nil expect(dynamicProperty).to(beNil()) } } describe("map") { it("should transform the current value and all subsequent values") { let property = MutableProperty(1) let mappedProperty = property .map { $0 + 1 } .map { $0 + 2 } expect(mappedProperty.value) == 4 property.value = 2 expect(mappedProperty.value) == 5 } } describe("binding") { describe("from a Signal") { it("should update the property with values sent from the signal") { let (signal, observer) = Signal.pipe() let mutableProperty = MutableProperty(initialPropertyValue) mutableProperty <~ signal // Verify that the binding hasn't changed the property value: expect(mutableProperty.value) == initialPropertyValue observer.sendNext(subsequentPropertyValue) expect(mutableProperty.value) == subsequentPropertyValue } it("should tear down the binding when disposed") { let (signal, observer) = Signal.pipe() let mutableProperty = MutableProperty(initialPropertyValue) let bindingDisposable = mutableProperty <~ signal bindingDisposable.dispose() observer.sendNext(subsequentPropertyValue) expect(mutableProperty.value) == initialPropertyValue } it("should tear down the binding when bound signal is completed") { let (signal, observer) = Signal.pipe() let mutableProperty = MutableProperty(initialPropertyValue) let bindingDisposable = mutableProperty <~ signal expect(bindingDisposable.disposed) == false observer.sendCompleted() expect(bindingDisposable.disposed) == true } it("should tear down the binding when the property deallocates") { let (signal, _) = Signal.pipe() var mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue) let bindingDisposable = mutableProperty! <~ signal mutableProperty = nil expect(bindingDisposable.disposed) == true } } describe("from a SignalProducer") { it("should start a signal and update the property with its values") { let signalValues = [initialPropertyValue, subsequentPropertyValue] let signalProducer = SignalProducer(values: signalValues) let mutableProperty = MutableProperty(initialPropertyValue) mutableProperty <~ signalProducer expect(mutableProperty.value) == signalValues.last! } it("should tear down the binding when disposed") { let (signalProducer, observer) = SignalProducer.pipe() let mutableProperty = MutableProperty(initialPropertyValue) let disposable = mutableProperty <~ signalProducer disposable.dispose() observer.sendNext(subsequentPropertyValue) expect(mutableProperty.value) == initialPropertyValue } it("should tear down the binding when bound signal is completed") { let (signalProducer, observer) = SignalProducer.pipe() let mutableProperty = MutableProperty(initialPropertyValue) let disposable = mutableProperty <~ signalProducer observer.sendCompleted() expect(disposable.disposed) == true } it("should tear down the binding when the property deallocates") { let signalValues = [initialPropertyValue, subsequentPropertyValue] let signalProducer = SignalProducer(values: signalValues) var mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue) let disposable = mutableProperty! <~ signalProducer mutableProperty = nil expect(disposable.disposed) == true } } describe("from another property") { it("should take the source property's current value") { let sourceProperty = ConstantProperty(initialPropertyValue) let destinationProperty = MutableProperty("") destinationProperty <~ sourceProperty.producer expect(destinationProperty.value) == initialPropertyValue } it("should update with changes to the source property's value") { let sourceProperty = MutableProperty(initialPropertyValue) let destinationProperty = MutableProperty("") destinationProperty <~ sourceProperty.producer sourceProperty.value = subsequentPropertyValue expect(destinationProperty.value) == subsequentPropertyValue } it("should tear down the binding when disposed") { let sourceProperty = MutableProperty(initialPropertyValue) let destinationProperty = MutableProperty("") let bindingDisposable = destinationProperty <~ sourceProperty.producer bindingDisposable.dispose() sourceProperty.value = subsequentPropertyValue expect(destinationProperty.value) == initialPropertyValue } it("should tear down the binding when the source property deallocates") { var sourceProperty: MutableProperty? = MutableProperty(initialPropertyValue) let destinationProperty = MutableProperty("") destinationProperty <~ sourceProperty!.producer sourceProperty = nil // TODO: Assert binding was torn down? } it("should tear down the binding when the destination property deallocates") { let sourceProperty = MutableProperty(initialPropertyValue) var destinationProperty: MutableProperty? = MutableProperty("") let bindingDisposable = destinationProperty! <~ sourceProperty.producer destinationProperty = nil expect(bindingDisposable.disposed) == true } } describe("to a dynamic property") { var object: ObservableObject! var property: DynamicProperty! beforeEach { object = ObservableObject() expect(object.rac_value) == 0 property = DynamicProperty(object: object, keyPath: "rac_value") } afterEach { object = nil } it("should bridge values sent on a signal to Objective-C") { let (signal, observer) = Signal.pipe() property <~ signal observer.sendNext(1) expect(object.rac_value) == 1 } it("should bridge values sent on a signal producer to Objective-C") { let producer = SignalProducer(value: 1) property <~ producer expect(object.rac_value) == 1 } it("should bridge values from a source property to Objective-C") { let source = MutableProperty(1) property <~ source expect(object.rac_value) == 1 } } } } } private class ObservableObject: NSObject { dynamic var rac_value: Int = 0 } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SchedulerSpec.swift ================================================ // // SchedulerSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. // import Foundation import Nimble import Quick @testable import ReactiveCocoa class SchedulerSpec: QuickSpec { override func spec() { describe("ImmediateScheduler") { it("should run enqueued actions immediately") { var didRun = false ImmediateScheduler().schedule { didRun = true } expect(didRun) == true } } describe("UIScheduler") { func dispatchSyncInBackground(action: () -> Void) { let group = dispatch_group_create() dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), action) dispatch_group_wait(group, DISPATCH_TIME_FOREVER) } it("should run actions immediately when on the main thread") { let scheduler = UIScheduler() var values: [Int] = [] expect(NSThread.isMainThread()) == true scheduler.schedule { values.append(0) } expect(values) == [ 0 ] scheduler.schedule { values.append(1) } scheduler.schedule { values.append(2) } expect(values) == [ 0, 1, 2 ] } it("should enqueue actions scheduled from the background") { let scheduler = UIScheduler() var values: [Int] = [] dispatchSyncInBackground { scheduler.schedule { expect(NSThread.isMainThread()) == true values.append(0) } return } expect(values) == [] expect(values).toEventually(equal([ 0 ])) dispatchSyncInBackground { scheduler.schedule { expect(NSThread.isMainThread()) == true values.append(1) } scheduler.schedule { expect(NSThread.isMainThread()) == true values.append(2) } return } expect(values) == [ 0 ] expect(values).toEventually(equal([ 0, 1, 2 ])) } it("should run actions enqueued from the main thread after those from the background") { let scheduler = UIScheduler() var values: [Int] = [] dispatchSyncInBackground { scheduler.schedule { expect(NSThread.isMainThread()) == true values.append(0) } return } scheduler.schedule { expect(NSThread.isMainThread()) == true values.append(1) } scheduler.schedule { expect(NSThread.isMainThread()) == true values.append(2) } expect(values) == [] expect(values).toEventually(equal([ 0, 1, 2 ])) } } describe("QueueScheduler") { it("should run enqueued actions on a global queue") { var didRun = false let scheduler: QueueScheduler if #available(OSX 10.10, *) { scheduler = QueueScheduler(qos: QOS_CLASS_DEFAULT) } else { scheduler = QueueScheduler(queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) } scheduler.schedule { didRun = true expect(NSThread.isMainThread()) == false } expect{didRun}.toEventually(beTruthy()) } describe("on a given queue") { var scheduler: QueueScheduler! beforeEach { if #available(OSX 10.10, *) { scheduler = QueueScheduler(qos: QOS_CLASS_DEFAULT) } else { scheduler = QueueScheduler(queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) } dispatch_suspend(scheduler.queue) } it("should run enqueued actions serially on the given queue") { var value = 0 for _ in 0..<5 { scheduler.schedule { expect(NSThread.isMainThread()) == false value += 1 } } expect(value) == 0 dispatch_resume(scheduler.queue) expect{value}.toEventually(equal(5)) } it("should run enqueued actions after a given date") { var didRun = false scheduler.scheduleAfter(NSDate()) { didRun = true expect(NSThread.isMainThread()) == false } expect(didRun) == false dispatch_resume(scheduler.queue) expect{didRun}.toEventually(beTruthy()) } it("should repeatedly run actions after a given date") { let disposable = SerialDisposable() var count = 0 let timesToRun = 3 disposable.innerDisposable = scheduler.scheduleAfter(NSDate(), repeatingEvery: 0.01, withLeeway: 0) { expect(NSThread.isMainThread()) == false count += 1 if count == timesToRun { disposable.dispose() } } expect(count) == 0 dispatch_resume(scheduler.queue) expect{count}.toEventually(equal(timesToRun)) } } } describe("TestScheduler") { var scheduler: TestScheduler! var startDate: NSDate! // How much dates are allowed to differ when they should be "equal." let dateComparisonDelta = 0.00001 beforeEach { startDate = NSDate() scheduler = TestScheduler(startDate: startDate) expect(scheduler.currentDate) == startDate } it("should run immediately enqueued actions upon advancement") { var string = "" scheduler.schedule { string += "foo" expect(NSThread.isMainThread()) == true } scheduler.schedule { string += "bar" expect(NSThread.isMainThread()) == true } expect(string) == "" scheduler.advance() expect(scheduler.currentDate).to(beCloseTo(startDate)) expect(string) == "foobar" } it("should run actions when advanced past the target date") { var string = "" scheduler.scheduleAfter(15) { [weak scheduler] in string += "bar" expect(NSThread.isMainThread()) == true expect(scheduler?.currentDate).to(beCloseTo(startDate.dateByAddingTimeInterval(15), within: dateComparisonDelta)) } scheduler.scheduleAfter(5) { [weak scheduler] in string += "foo" expect(NSThread.isMainThread()) == true expect(scheduler?.currentDate).to(beCloseTo(startDate.dateByAddingTimeInterval(5), within: dateComparisonDelta)) } expect(string) == "" scheduler.advanceByInterval(10) expect(scheduler.currentDate).to(beCloseTo(startDate.dateByAddingTimeInterval(10), within: dateComparisonDelta)) expect(string) == "foo" scheduler.advanceByInterval(10) expect(scheduler.currentDate).to(beCloseTo(startDate.dateByAddingTimeInterval(20), within: dateComparisonDelta)) expect(string) == "foobar" } it("should run all remaining actions in order") { var string = "" scheduler.scheduleAfter(15) { string += "bar" expect(NSThread.isMainThread()) == true } scheduler.scheduleAfter(5) { string += "foo" expect(NSThread.isMainThread()) == true } scheduler.schedule { string += "fuzzbuzz" expect(NSThread.isMainThread()) == true } expect(string) == "" scheduler.run() expect(scheduler.currentDate) == NSDate.distantFuture() expect(string) == "fuzzbuzzfoobar" } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalLifetimeSpec.swift ================================================ // // SignalLifetimeSpec.swift // ReactiveCocoa // // Created by Vadim Yelagin on 2015-12-13. // Copyright (c) 2015 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa class SignalLifetimeSpec: QuickSpec { override func spec() { describe("init") { var testScheduler: TestScheduler! beforeEach { testScheduler = TestScheduler() } it("should deallocate") { weak var signal: Signal? = Signal { _ in nil } expect(signal).to(beNil()) } it("should deallocate even if it has an observer") { weak var signal: Signal? = { let signal: Signal = Signal { _ in nil } return signal }() expect(signal).to(beNil()) } it("should deallocate even if it has an observer with retained disposable") { var disposable: Disposable? = nil weak var signal: Signal? = { let signal: Signal = Signal { _ in nil } disposable = signal.observe(Observer()) return signal }() expect(signal).to(beNil()) disposable?.dispose() expect(signal).to(beNil()) } it("should deallocate after erroring") { weak var signal: Signal? = Signal { observer in testScheduler.schedule { observer.sendFailed(TestError.Default) } return nil } var errored = false signal?.observeFailed { _ in errored = true } expect(errored) == false expect(signal).toNot(beNil()) testScheduler.run() expect(errored) == true expect(signal).to(beNil()) } it("should deallocate after completing") { weak var signal: Signal? = Signal { observer in testScheduler.schedule { observer.sendCompleted() } return nil } var completed = false signal?.observeCompleted { completed = true } expect(completed) == false expect(signal).toNot(beNil()) testScheduler.run() expect(completed) == true expect(signal).to(beNil()) } it("should deallocate after interrupting") { weak var signal: Signal? = Signal { observer in testScheduler.schedule { observer.sendInterrupted() } return nil } var interrupted = false signal?.observeInterrupted { interrupted = true } expect(interrupted) == false expect(signal).toNot(beNil()) testScheduler.run() expect(interrupted) == true expect(signal).to(beNil()) } } describe("Signal.pipe") { it("should deallocate") { weak var signal = Signal<(), NoError>.pipe().0 expect(signal).to(beNil()) } it("should deallocate after erroring") { let testScheduler = TestScheduler() weak var weakSignal: Signal<(), TestError>? // Use an inner closure to help ARC deallocate things as we // expect. let test = { let (signal, observer) = Signal<(), TestError>.pipe() weakSignal = signal testScheduler.schedule { observer.sendFailed(TestError.Default) } } test() expect(weakSignal).toNot(beNil()) testScheduler.run() expect(weakSignal).to(beNil()) } it("should deallocate after completing") { let testScheduler = TestScheduler() weak var weakSignal: Signal<(), TestError>? // Use an inner closure to help ARC deallocate things as we // expect. let test = { let (signal, observer) = Signal<(), TestError>.pipe() weakSignal = signal testScheduler.schedule { observer.sendCompleted() } } test() expect(weakSignal).toNot(beNil()) testScheduler.run() expect(weakSignal).to(beNil()) } it("should deallocate after interrupting") { let testScheduler = TestScheduler() weak var weakSignal: Signal<(), NoError>? let test = { let (signal, observer) = Signal<(), NoError>.pipe() weakSignal = signal testScheduler.schedule { observer.sendInterrupted() } } test() expect(weakSignal).toNot(beNil()) testScheduler.run() expect(weakSignal).to(beNil()) } } describe("testTransform") { it("should deallocate") { weak var signal: Signal? = Signal { _ in nil }.testTransform() expect(signal).to(beNil()) } it("should deallocate even if it has an observer") { weak var signal: Signal? = { let signal: Signal = Signal { _ in nil }.testTransform() signal.observe(Observer()) return signal }() expect(signal).to(beNil()) } it("should deallocate even if it has an observer with retained disposable") { var disposable: Disposable? = nil weak var signal: Signal? = { let signal: Signal = Signal { _ in nil }.testTransform() disposable = signal.observe(Observer()) return signal }() expect(signal).to(beNil()) disposable?.dispose() expect(signal).to(beNil()) } } describe("observe") { var signal: Signal! var observer: Signal.Observer! var token: NSObject? = nil weak var weakToken: NSObject? func expectTokenNotDeallocated() { expect(weakToken).toNot(beNil()) } func expectTokenDeallocated() { expect(weakToken).to(beNil()) } beforeEach { let (signalTemp, observerTemp) = Signal.pipe() signal = signalTemp observer = observerTemp token = NSObject() weakToken = token signal.observe { [token = token] _ in _ = token!.description } } it("should deallocate observe handler when signal completes") { expectTokenNotDeallocated() observer.sendNext(1) expectTokenNotDeallocated() token = nil expectTokenNotDeallocated() observer.sendNext(2) expectTokenNotDeallocated() observer.sendCompleted() expectTokenDeallocated() } it("should deallocate observe handler when signal fails") { expectTokenNotDeallocated() observer.sendNext(1) expectTokenNotDeallocated() token = nil expectTokenNotDeallocated() observer.sendNext(2) expectTokenNotDeallocated() observer.sendFailed(.Default) expectTokenDeallocated() } } } } private extension SignalType { func testTransform() -> Signal { return Signal { observer in return self.observe(observer.action) } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalProducerLiftingSpec.swift ================================================ // // SignalProducerLiftingSpec.swift // ReactiveCocoa // // Created by Neil Pankey on 6/14/15. // Copyright © 2015 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa class SignalProducerLiftingSpec: QuickSpec { override func spec() { describe("map") { it("should transform the values of the signal") { let (producer, observer) = SignalProducer.pipe() let mappedProducer = producer.map { String($0 + 1) } var lastValue: String? mappedProducer.startWithNext { lastValue = $0 return } expect(lastValue).to(beNil()) observer.sendNext(0) expect(lastValue) == "1" observer.sendNext(1) expect(lastValue) == "2" } } describe("mapError") { it("should transform the errors of the signal") { let (producer, observer) = SignalProducer.pipe() let producerError = NSError(domain: "com.reactivecocoa.errordomain", code: 100, userInfo: nil) var error: NSError? producer .mapError { _ in producerError } .startWithFailed { error = $0 } expect(error).to(beNil()) observer.sendFailed(TestError.Default) expect(error) == producerError } } describe("filter") { it("should omit values from the producer") { let (producer, observer) = SignalProducer.pipe() let mappedProducer = producer.filter { $0 % 2 == 0 } var lastValue: Int? mappedProducer.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(0) expect(lastValue) == 0 observer.sendNext(1) expect(lastValue) == 0 observer.sendNext(2) expect(lastValue) == 2 } } describe("ignoreNil") { it("should forward only non-nil values") { let (producer, observer) = SignalProducer.pipe() let mappedProducer = producer.ignoreNil() var lastValue: Int? mappedProducer.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(nil) expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(nil) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 } } describe("scan") { it("should incrementally accumulate a value") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.scan("", +) var lastValue: String? producer.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext("a") expect(lastValue) == "a" observer.sendNext("bb") expect(lastValue) == "abb" } } describe("reduce") { it("should accumulate one value") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.reduce(1, +) var lastValue: Int? var completed = false producer.start { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue).to(beNil()) expect(completed) == false observer.sendCompleted() expect(completed) == true expect(lastValue) == 4 } it("should send the initial value if none are received") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.reduce(1, +) var lastValue: Int? var completed = false producer.start { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } expect(lastValue).to(beNil()) expect(completed) == false observer.sendCompleted() expect(lastValue) == 1 expect(completed) == true } } describe("skip") { it("should skip initial values") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.skip(1) var lastValue: Int? producer.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue) == 2 } it("should not skip any values when 0") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.skip(0) var lastValue: Int? producer.startWithNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 } } describe("skipRepeats") { it("should skip duplicate Equatable values") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.skipRepeats() var values: [Bool] = [] producer.startWithNext { values.append($0) } expect(values) == [] observer.sendNext(true) expect(values) == [ true ] observer.sendNext(true) expect(values) == [ true ] observer.sendNext(false) expect(values) == [ true, false ] observer.sendNext(true) expect(values) == [ true, false, true ] } it("should skip values according to a predicate") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.skipRepeats { $0.characters.count == $1.characters.count } var values: [String] = [] producer.startWithNext { values.append($0) } expect(values) == [] observer.sendNext("a") expect(values) == [ "a" ] observer.sendNext("b") expect(values) == [ "a" ] observer.sendNext("cc") expect(values) == [ "a", "cc" ] observer.sendNext("d") expect(values) == [ "a", "cc", "d" ] } } describe("skipWhile") { var producer: SignalProducer! var observer: Signal.Observer! var lastValue: Int? beforeEach { let (baseProducer, incomingObserver) = SignalProducer.pipe() producer = baseProducer.skipWhile { $0 < 2 } observer = incomingObserver lastValue = nil producer.startWithNext { lastValue = $0 } } it("should skip while the predicate is true") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue) == 2 observer.sendNext(0) expect(lastValue) == 0 } it("should not skip any values when the predicate starts false") { expect(lastValue).to(beNil()) observer.sendNext(3) expect(lastValue) == 3 observer.sendNext(1) expect(lastValue) == 1 } } describe("skipUntil") { var producer: SignalProducer! var observer: Signal.Observer! var triggerObserver: Signal<(), NoError>.Observer! var lastValue: Int? = nil beforeEach { let (baseProducer, baseIncomingObserver) = SignalProducer.pipe() let (triggerProducer, incomingTriggerObserver) = SignalProducer<(), NoError>.pipe() producer = baseProducer.skipUntil(triggerProducer) observer = baseIncomingObserver triggerObserver = incomingTriggerObserver lastValue = nil producer.start { event in switch event { case let .Next(value): lastValue = value case .Failed, .Completed, .Interrupted: break } } } it("should skip values until the trigger fires") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue).to(beNil()) triggerObserver.sendNext(()) observer.sendNext(0) expect(lastValue) == 0 } it("should skip values until the trigger completes") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue).to(beNil()) triggerObserver.sendCompleted() observer.sendNext(0) expect(lastValue) == 0 } } describe("take") { it("should take initial values") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.take(2) var lastValue: Int? var completed = false producer.start { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } expect(lastValue).to(beNil()) expect(completed) == false observer.sendNext(1) expect(lastValue) == 1 expect(completed) == false observer.sendNext(2) expect(lastValue) == 2 expect(completed) == true } it("should complete immediately after taking given number of values") { let numbers = [ 1, 2, 4, 4, 5 ] let testScheduler = TestScheduler() let producer: SignalProducer = SignalProducer { observer, _ in // workaround `Class declaration cannot close over value 'observer' defined in outer scope` let observer = observer testScheduler.schedule { for number in numbers { observer.sendNext(number) } } } var completed = false producer .take(numbers.count) .startWithCompleted { completed = true } expect(completed) == false testScheduler.run() expect(completed) == true } it("should interrupt when 0") { let numbers = [ 1, 2, 4, 4, 5 ] let testScheduler = TestScheduler() let producer: SignalProducer = SignalProducer { observer, _ in // workaround `Class declaration cannot close over value 'observer' defined in outer scope` let observer = observer testScheduler.schedule { for number in numbers { observer.sendNext(number) } } } var result: [Int] = [] var interrupted = false producer .take(0) .start { event in switch event { case let .Next(number): result.append(number) case .Interrupted: interrupted = true case .Failed, .Completed: break } } expect(interrupted) == true testScheduler.run() expect(result).to(beEmpty()) } } describe("collect") { it("should collect all values") { let (original, observer) = SignalProducer.pipe() let producer = original.collect() let expectedResult = [ 1, 2, 3 ] var result: [Int]? producer.startWithNext { value in expect(result).to(beNil()) result = value } for number in expectedResult { observer.sendNext(number) } expect(result).to(beNil()) observer.sendCompleted() expect(result) == expectedResult } it("should complete with an empty array if there are no values") { let (original, observer) = SignalProducer.pipe() let producer = original.collect() var result: [Int]? producer.startWithNext { result = $0 } expect(result).to(beNil()) observer.sendCompleted() expect(result) == [] } it("should forward errors") { let (original, observer) = SignalProducer.pipe() let producer = original.collect() var error: TestError? producer.startWithFailed { error = $0 } expect(error).to(beNil()) observer.sendFailed(.Default) expect(error) == TestError.Default } it("should collect an exact count of values") { let (original, observer) = SignalProducer.pipe() let producer = original.collect(count: 3) var observedValues: [[Int]] = [] producer.startWithNext { value in observedValues.append(value) } var expectation: [[Int]] = [] for i in 1...7 { observer.sendNext(i) if i % 3 == 0 { expectation.append([Int]((i - 2)...i)) expect(observedValues) == expectation } else { expect(observedValues) == expectation } } observer.sendCompleted() expectation.append([7]) expect(observedValues) == expectation } it("should collect values until it matches a certain value") { let (original, observer) = SignalProducer.pipe() let producer = original.collect { _, next in next != 5 } var expectedValues = [ [5, 5], [42, 5] ] producer.startWithNext { value in expect(value) == expectedValues.removeFirst() } producer.startWithCompleted { expect(expectedValues) == [] } expectedValues .flatMap { $0 } .forEach(observer.sendNext) observer.sendCompleted() } it("should collect values until it matches a certain condition on values") { let (original, observer) = SignalProducer.pipe() let producer = original.collect { values in values.reduce(0, combine: +) == 10 } var expectedValues = [ [1, 2, 3, 4], [5, 6, 7, 8, 9] ] producer.startWithNext { value in expect(value) == expectedValues.removeFirst() } producer.startWithCompleted { expect(expectedValues) == [] } expectedValues .flatMap { $0 } .forEach(observer.sendNext) observer.sendCompleted() } } describe("takeUntil") { var producer: SignalProducer! var observer: Signal.Observer! var triggerObserver: Signal<(), NoError>.Observer! var lastValue: Int? = nil var completed: Bool = false beforeEach { let (baseProducer, baseIncomingObserver) = SignalProducer.pipe() let (triggerProducer, incomingTriggerObserver) = SignalProducer<(), NoError>.pipe() producer = baseProducer.takeUntil(triggerProducer) observer = baseIncomingObserver triggerObserver = incomingTriggerObserver lastValue = nil completed = false producer.start { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } } it("should take values until the trigger fires") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 expect(completed) == false triggerObserver.sendNext(()) expect(completed) == true } it("should take values until the trigger completes") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 expect(completed) == false triggerObserver.sendCompleted() expect(completed) == true } it("should complete if the trigger fires immediately") { expect(lastValue).to(beNil()) expect(completed) == false triggerObserver.sendNext(()) expect(completed) == true expect(lastValue).to(beNil()) } } describe("takeUntilReplacement") { var producer: SignalProducer! var observer: Signal.Observer! var replacementObserver: Signal.Observer! var lastValue: Int? = nil var completed: Bool = false beforeEach { let (baseProducer, incomingObserver) = SignalProducer.pipe() let (replacementProducer, incomingReplacementObserver) = SignalProducer.pipe() producer = baseProducer.takeUntilReplacement(replacementProducer) observer = incomingObserver replacementObserver = incomingReplacementObserver lastValue = nil completed = false producer.start { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } } it("should take values from the original then the replacement") { expect(lastValue).to(beNil()) expect(completed) == false observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 replacementObserver.sendNext(3) expect(lastValue) == 3 expect(completed) == false observer.sendNext(4) expect(lastValue) == 3 expect(completed) == false replacementObserver.sendNext(5) expect(lastValue) == 5 expect(completed) == false replacementObserver.sendCompleted() expect(completed) == true } } describe("takeWhile") { var producer: SignalProducer! var observer: Signal.Observer! beforeEach { let (baseProducer, incomingObserver) = SignalProducer.pipe() producer = baseProducer.takeWhile { $0 <= 4 } observer = incomingObserver } it("should take while the predicate is true") { var latestValue: Int! var completed = false producer.start { event in switch event { case let .Next(value): latestValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } for value in -1...4 { observer.sendNext(value) expect(latestValue) == value expect(completed) == false } observer.sendNext(5) expect(latestValue) == 4 expect(completed) == true } it("should complete if the predicate starts false") { var latestValue: Int? var completed = false producer.start { event in switch event { case let .Next(value): latestValue = value case .Completed: completed = true case .Failed, .Interrupted: break } } observer.sendNext(5) expect(latestValue).to(beNil()) expect(completed) == true } } describe("observeOn") { it("should send events on the given scheduler") { let testScheduler = TestScheduler() let (producer, observer) = SignalProducer.pipe() var result: [Int] = [] producer .observeOn(testScheduler) .startWithNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) expect(result).to(beEmpty()) testScheduler.run() expect(result) == [ 1, 2 ] } } describe("delay") { it("should send events on the given scheduler after the interval") { let testScheduler = TestScheduler() let producer: SignalProducer = SignalProducer { observer, _ in testScheduler.schedule { observer.sendNext(1) } testScheduler.scheduleAfter(5, action: { observer.sendNext(2) observer.sendCompleted() }) } var result: [Int] = [] var completed = false producer .delay(10, onScheduler: testScheduler) .start { event in switch event { case let .Next(number): result.append(number) case .Completed: completed = true case .Failed, .Interrupted: break } } testScheduler.advanceByInterval(4) // send initial value expect(result).to(beEmpty()) testScheduler.advanceByInterval(10) // send second value and receive first expect(result) == [ 1 ] expect(completed) == false testScheduler.advanceByInterval(10) // send second value and receive first expect(result) == [ 1, 2 ] expect(completed) == true } it("should schedule errors immediately") { let testScheduler = TestScheduler() let producer: SignalProducer = SignalProducer { observer, _ in // workaround `Class declaration cannot close over value 'observer' defined in outer scope` let observer = observer testScheduler.schedule { observer.sendFailed(TestError.Default) } } var errored = false producer .delay(10, onScheduler: testScheduler) .startWithFailed { _ in errored = true } testScheduler.advance() expect(errored) == true } } describe("throttle") { var scheduler: TestScheduler! var observer: Signal.Observer! var producer: SignalProducer! beforeEach { scheduler = TestScheduler() let (baseProducer, baseObserver) = SignalProducer.pipe() observer = baseObserver producer = baseProducer.throttle(1, onScheduler: scheduler) } it("should send values on the given scheduler at no less than the interval") { var values: [Int] = [] producer.startWithNext { value in values.append(value) } expect(values) == [] observer.sendNext(0) expect(values) == [] scheduler.advance() expect(values) == [ 0 ] observer.sendNext(1) observer.sendNext(2) expect(values) == [ 0 ] scheduler.advanceByInterval(1.5) expect(values) == [ 0, 2 ] scheduler.advanceByInterval(3) expect(values) == [ 0, 2 ] observer.sendNext(3) expect(values) == [ 0, 2 ] scheduler.advance() expect(values) == [ 0, 2, 3 ] observer.sendNext(4) observer.sendNext(5) scheduler.advance() expect(values) == [ 0, 2, 3 ] scheduler.run() expect(values) == [ 0, 2, 3, 5 ] } it("should schedule completion immediately") { var values: [Int] = [] var completed = false producer.start { event in switch event { case let .Next(value): values.append(value) case .Completed: completed = true case .Failed, .Interrupted: break } } observer.sendNext(0) scheduler.advance() expect(values) == [ 0 ] observer.sendNext(1) observer.sendCompleted() expect(completed) == false scheduler.run() expect(values) == [ 0 ] expect(completed) == true } } describe("sampleWith") { var sampledProducer: SignalProducer<(Int, String), NoError>! var observer: Signal.Observer! var samplerObserver: Signal.Observer! beforeEach { let (producer, incomingObserver) = SignalProducer.pipe() let (sampler, incomingSamplerObserver) = SignalProducer.pipe() sampledProducer = producer.sampleWith(sampler) observer = incomingObserver samplerObserver = incomingSamplerObserver } it("should forward the latest value when the sampler fires") { var result: [String] = [] sampledProducer.startWithNext { (left, right) in result.append("\(left)\(right)") } observer.sendNext(1) observer.sendNext(2) samplerObserver.sendNext("a") expect(result) == [ "2a" ] } it("should do nothing if sampler fires before signal receives value") { var result: [String] = [] sampledProducer.startWithNext { (left, right) in result.append("\(left)\(right)") } samplerObserver.sendNext("a") expect(result).to(beEmpty()) } it("should send lates value multiple times when sampler fires multiple times") { var result: [String] = [] sampledProducer.startWithNext { (left, right) in result.append("\(left)\(right)") } observer.sendNext(1) samplerObserver.sendNext("a") samplerObserver.sendNext("b") expect(result) == [ "1a", "1b" ] } it("should complete when both inputs have completed") { var completed = false sampledProducer.startWithCompleted { completed = true } observer.sendCompleted() expect(completed) == false samplerObserver.sendCompleted() expect(completed) == true } it("should emit an initial value if the sampler is a synchronous SignalProducer") { let producer = SignalProducer(values: [1]) let sampler = SignalProducer(value: "a") let result = producer.sampleWith(sampler) var valueReceived: String? result.startWithNext { (left, right) in valueReceived = "\(left)\(right)" } expect(valueReceived) == "1a" } } describe("sampleOn") { var sampledProducer: SignalProducer! var observer: Signal.Observer! var samplerObserver: Signal<(), NoError>.Observer! beforeEach { let (producer, incomingObserver) = SignalProducer.pipe() let (sampler, incomingSamplerObserver) = SignalProducer<(), NoError>.pipe() sampledProducer = producer.sampleOn(sampler) observer = incomingObserver samplerObserver = incomingSamplerObserver } it("should forward the latest value when the sampler fires") { var result: [Int] = [] sampledProducer.startWithNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) samplerObserver.sendNext(()) expect(result) == [ 2 ] } it("should do nothing if sampler fires before signal receives value") { var result: [Int] = [] sampledProducer.startWithNext { result.append($0) } samplerObserver.sendNext(()) expect(result).to(beEmpty()) } it("should send lates value multiple times when sampler fires multiple times") { var result: [Int] = [] sampledProducer.startWithNext { result.append($0) } observer.sendNext(1) samplerObserver.sendNext(()) samplerObserver.sendNext(()) expect(result) == [ 1, 1 ] } it("should complete when both inputs have completed") { var completed = false sampledProducer.startWithCompleted { completed = true } observer.sendCompleted() expect(completed) == false samplerObserver.sendCompleted() expect(completed) == true } it("should emit an initial value if the sampler is a synchronous SignalProducer") { let producer = SignalProducer(values: [1]) let sampler = SignalProducer<(), NoError>(value: ()) let result = producer.sampleOn(sampler) var valueReceived: Int? result.startWithNext { valueReceived = $0 } expect(valueReceived) == 1 } describe("memory") { class Payload { let action: () -> Void init(onDeinit action: () -> Void) { self.action = action } deinit { action() } } var sampledProducer: SignalProducer! var observer: Signal.Observer! beforeEach { let (producer, incomingObserver) = SignalProducer.pipe() let (sampler, _) = Signal<(), NoError>.pipe() sampledProducer = producer.sampleOn(sampler) observer = incomingObserver } it("should free payload when interrupted after complete of incoming producer") { var payloadFreed = false let disposable = sampledProducer.start() observer.sendNext(Payload { payloadFreed = true }) observer.sendCompleted() expect(payloadFreed) == false disposable.dispose() expect(payloadFreed) == true } } } describe("combineLatestWith") { var combinedProducer: SignalProducer<(Int, Double), NoError>! var observer: Signal.Observer! var otherObserver: Signal.Observer! beforeEach { let (producer, incomingObserver) = SignalProducer.pipe() let (otherSignal, incomingOtherObserver) = SignalProducer.pipe() combinedProducer = producer.combineLatestWith(otherSignal) observer = incomingObserver otherObserver = incomingOtherObserver } it("should forward the latest values from both inputs") { var latest: (Int, Double)? combinedProducer.startWithNext { latest = $0 } observer.sendNext(1) expect(latest).to(beNil()) // is there a better way to test tuples? otherObserver.sendNext(1.5) expect(latest?.0) == 1 expect(latest?.1) == 1.5 observer.sendNext(2) expect(latest?.0) == 2 expect(latest?.1) == 1.5 } it("should complete when both inputs have completed") { var completed = false combinedProducer.startWithCompleted { completed = true } observer.sendCompleted() expect(completed) == false otherObserver.sendCompleted() expect(completed) == true } } describe("zipWith") { var leftObserver: Signal.Observer! var rightObserver: Signal.Observer! var zipped: SignalProducer<(Int, String), NoError>! beforeEach { let (leftProducer, incomingLeftObserver) = SignalProducer.pipe() let (rightProducer, incomingRightObserver) = SignalProducer.pipe() leftObserver = incomingLeftObserver rightObserver = incomingRightObserver zipped = leftProducer.zipWith(rightProducer) } it("should combine pairs") { var result: [String] = [] zipped.startWithNext { (left, right) in result.append("\(left)\(right)") } leftObserver.sendNext(1) leftObserver.sendNext(2) expect(result) == [] rightObserver.sendNext("foo") expect(result) == [ "1foo" ] leftObserver.sendNext(3) rightObserver.sendNext("bar") expect(result) == [ "1foo", "2bar" ] rightObserver.sendNext("buzz") expect(result) == [ "1foo", "2bar", "3buzz" ] rightObserver.sendNext("fuzz") expect(result) == [ "1foo", "2bar", "3buzz" ] leftObserver.sendNext(4) expect(result) == [ "1foo", "2bar", "3buzz", "4fuzz" ] } it("should complete when the shorter signal has completed") { var result: [String] = [] var completed = false zipped.start { event in switch event { case let .Next(left, right): result.append("\(left)\(right)") case .Completed: completed = true case .Failed, .Interrupted: break } } expect(completed) == false leftObserver.sendNext(0) leftObserver.sendCompleted() expect(completed) == false expect(result) == [] rightObserver.sendNext("foo") expect(completed) == true expect(result) == [ "0foo" ] } } describe("materialize") { it("should reify events from the signal") { let (producer, observer) = SignalProducer.pipe() var latestEvent: Event? producer .materialize() .startWithNext { latestEvent = $0 } observer.sendNext(2) expect(latestEvent).toNot(beNil()) if let latestEvent = latestEvent { switch latestEvent { case let .Next(value): expect(value) == 2 case .Failed, .Completed, .Interrupted: fail() } } observer.sendFailed(TestError.Default) if let latestEvent = latestEvent { switch latestEvent { case .Failed: break case .Next, .Completed, .Interrupted: fail() } } } } describe("dematerialize") { typealias IntEvent = Event var observer: Signal.Observer! var dematerialized: SignalProducer! beforeEach { let (producer, incomingObserver) = SignalProducer.pipe() observer = incomingObserver dematerialized = producer.dematerialize() } it("should send values for Next events") { var result: [Int] = [] dematerialized .assumeNoErrors() .startWithNext { result.append($0) } expect(result).to(beEmpty()) observer.sendNext(.Next(2)) expect(result) == [ 2 ] observer.sendNext(.Next(4)) expect(result) == [ 2, 4 ] } it("should error out for Error events") { var errored = false dematerialized.startWithFailed { _ in errored = true } expect(errored) == false observer.sendNext(.Failed(TestError.Default)) expect(errored) == true } it("should complete early for Completed events") { var completed = false dematerialized.startWithCompleted { completed = true } expect(completed) == false observer.sendNext(IntEvent.Completed) expect(completed) == true } } describe("takeLast") { var observer: Signal.Observer! var lastThree: SignalProducer! beforeEach { let (producer, incomingObserver) = SignalProducer.pipe() observer = incomingObserver lastThree = producer.takeLast(3) } it("should send the last N values upon completion") { var result: [Int] = [] lastThree .assumeNoErrors() .startWithNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) expect(result).to(beEmpty()) observer.sendCompleted() expect(result) == [ 2, 3, 4 ] } it("should send less than N values if not enough were received") { var result: [Int] = [] lastThree .assumeNoErrors() .startWithNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) observer.sendCompleted() expect(result) == [ 1, 2 ] } it("should send nothing when errors") { var result: [Int] = [] var errored = false lastThree.start { event in switch event { case let .Next(value): result.append(value) case .Failed: errored = true case .Completed, .Interrupted: break } } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) expect(errored) == false observer.sendFailed(TestError.Default) expect(errored) == true expect(result).to(beEmpty()) } } describe("timeoutWithError") { var testScheduler: TestScheduler! var producer: SignalProducer! var observer: Signal.Observer! beforeEach { testScheduler = TestScheduler() let (baseProducer, incomingObserver) = SignalProducer.pipe() producer = baseProducer.timeoutWithError(TestError.Default, afterInterval: 2, onScheduler: testScheduler) observer = incomingObserver } it("should complete if within the interval") { var completed = false var errored = false producer.start { event in switch event { case .Completed: completed = true case .Failed: errored = true case .Next, .Interrupted: break } } testScheduler.scheduleAfter(1) { observer.sendCompleted() } expect(completed) == false expect(errored) == false testScheduler.run() expect(completed) == true expect(errored) == false } it("should error if not completed before the interval has elapsed") { var completed = false var errored = false producer.start { event in switch event { case .Completed: completed = true case .Failed: errored = true case .Next, .Interrupted: break } } testScheduler.scheduleAfter(3) { observer.sendCompleted() } expect(completed) == false expect(errored) == false testScheduler.run() expect(completed) == false expect(errored) == true } } describe("attempt") { it("should forward original values upon success") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.attempt { _ in return .Success() } var current: Int? producer .assumeNoErrors() .startWithNext { value in current = value } for value in 1...5 { observer.sendNext(value) expect(current) == value } } it("should error if an attempt fails") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.attempt { _ in return .Failure(.Default) } var error: TestError? producer.startWithFailed { err in error = err } observer.sendNext(42) expect(error) == TestError.Default } } describe("attemptMap") { it("should forward mapped values upon success") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.attemptMap { num -> Result in return .Success(num % 2 == 0) } var even: Bool? producer .assumeNoErrors() .startWithNext { value in even = value } observer.sendNext(1) expect(even) == false observer.sendNext(2) expect(even) == true } it("should error if a mapping fails") { let (baseProducer, observer) = SignalProducer.pipe() let producer = baseProducer.attemptMap { _ -> Result in return .Failure(.Default) } var error: TestError? producer.startWithFailed { err in error = err } observer.sendNext(42) expect(error) == TestError.Default } } describe("combinePrevious") { var observer: Signal.Observer! let initialValue: Int = 0 var latestValues: (Int, Int)? beforeEach { latestValues = nil let (signal, baseObserver) = SignalProducer.pipe() observer = baseObserver signal.combinePrevious(initialValue).startWithNext { latestValues = $0 } } it("should forward the latest value with previous value") { expect(latestValues).to(beNil()) observer.sendNext(1) expect(latestValues?.0) == initialValue expect(latestValues?.1) == 1 observer.sendNext(2) expect(latestValues?.0) == 1 expect(latestValues?.1) == 2 } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalProducerNimbleMatchers.swift ================================================ // // SignalProducerNimbleMatchers.swift // ReactiveCocoa // // Created by Javier Soto on 1/25/15. // Copyright (c) 2015 GitHub. All rights reserved. // import Foundation import ReactiveCocoa import Nimble public func sendValue(value: T?, sendError: E?, complete: Bool) -> NonNilMatcherFunc> { return sendValues(value.map { [$0] } ?? [], sendError: sendError, complete: complete) } public func sendValues(values: [T], sendError maybeSendError: E?, complete: Bool) -> NonNilMatcherFunc> { return NonNilMatcherFunc { actualExpression, failureMessage in precondition(maybeSendError == nil || !complete, "Signals can't both send an error and complete") failureMessage.postfixMessage = "Send values \(values). Send error \(maybeSendError). Complete: \(complete)" let maybeProducer = try actualExpression.evaluate() if let signalProducer = maybeProducer { var sentValues: [T] = [] var sentError: E? var signalCompleted = false signalProducer.start { event in switch event { case let .Next(value): sentValues.append(value) case .Completed: signalCompleted = true case let .Failed(error): sentError = error default: break } } if sentValues != values { return false } if sentError != maybeSendError { return false } return signalCompleted == complete } else { return false } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalProducerSpec.swift ================================================ // // SignalProducerSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. // import Foundation import Result import Nimble import Quick import ReactiveCocoa class SignalProducerSpec: QuickSpec { override func spec() { describe("init") { it("should run the handler once per start()") { var handlerCalledTimes = 0 let signalProducer = SignalProducer() { observer, disposable in handlerCalledTimes += 1 return } signalProducer.start() signalProducer.start() expect(handlerCalledTimes) == 2 } it("should release signal observers when given disposable is disposed") { var disposable: Disposable! let producer = SignalProducer { observer, innerDisposable in disposable = innerDisposable innerDisposable.addDisposable { // This is necessary to keep the observer long enough to // even test the memory management. observer.sendNext(0) } } weak var objectRetainedByObserver: NSObject? producer.startWithSignal { signal, _ in let object = NSObject() objectRetainedByObserver = object signal.observeNext { _ in object } } expect(objectRetainedByObserver).toNot(beNil()) disposable.dispose() expect(objectRetainedByObserver).to(beNil()) } it("should dispose of added disposables upon completion") { let addedDisposable = SimpleDisposable() var observer: Signal<(), NoError>.Observer! let producer = SignalProducer<(), NoError>() { incomingObserver, disposable in disposable.addDisposable(addedDisposable) observer = incomingObserver } producer.start() expect(addedDisposable.disposed) == false observer.sendCompleted() expect(addedDisposable.disposed) == true } it("should dispose of added disposables upon error") { let addedDisposable = SimpleDisposable() var observer: Signal<(), TestError>.Observer! let producer = SignalProducer<(), TestError>() { incomingObserver, disposable in disposable.addDisposable(addedDisposable) observer = incomingObserver } producer.start() expect(addedDisposable.disposed) == false observer.sendFailed(.Default) expect(addedDisposable.disposed) == true } it("should dispose of added disposables upon interruption") { let addedDisposable = SimpleDisposable() var observer: Signal<(), NoError>.Observer! let producer = SignalProducer<(), NoError>() { incomingObserver, disposable in disposable.addDisposable(addedDisposable) observer = incomingObserver } producer.start() expect(addedDisposable.disposed) == false observer.sendInterrupted() expect(addedDisposable.disposed) == true } it("should dispose of added disposables upon start() disposal") { let addedDisposable = SimpleDisposable() let producer = SignalProducer<(), TestError>() { _, disposable in disposable.addDisposable(addedDisposable) return } let startDisposable = producer.start() expect(addedDisposable.disposed) == false startDisposable.dispose() expect(addedDisposable.disposed) == true } } describe("init(signal:)") { var signal: Signal! var observer: Signal.Observer! beforeEach { // Cannot directly assign due to compiler crash on Xcode 7.0.1 let (signalTemp, observerTemp) = Signal.pipe() signal = signalTemp observer = observerTemp } it("should emit values then complete") { let producer = SignalProducer(signal: signal) var values: [Int] = [] var error: TestError? var completed = false producer.start { event in switch event { case let .Next(value): values.append(value) case let .Failed(err): error = err case .Completed: completed = true default: break } } expect(values) == [] expect(error).to(beNil()) expect(completed) == false observer.sendNext(1) expect(values) == [ 1 ] observer.sendNext(2) observer.sendNext(3) expect(values) == [ 1, 2, 3 ] observer.sendCompleted() expect(completed) == true } it("should emit error") { let producer = SignalProducer(signal: signal) var error: TestError? let sentError = TestError.Default producer.start { event in switch event { case let .Failed(err): error = err default: break } } expect(error).to(beNil()) observer.sendFailed(sentError) expect(error) == sentError } } describe("init(value:)") { it("should immediately send the value then complete") { let producerValue = "StringValue" let signalProducer = SignalProducer(value: producerValue) expect(signalProducer).to(sendValue(producerValue, sendError: nil, complete: true)) } } describe("init(error:)") { it("should immediately send the error") { let producerError = NSError(domain: "com.reactivecocoa.errordomain", code: 4815, userInfo: nil) let signalProducer = SignalProducer(error: producerError) expect(signalProducer).to(sendValue(nil, sendError: producerError, complete: false)) } } describe("init(result:)") { it("should immediately send the value then complete") { let producerValue = "StringValue" let producerResult = .Success(producerValue) as Result let signalProducer = SignalProducer(result: producerResult) expect(signalProducer).to(sendValue(producerValue, sendError: nil, complete: true)) } it("should immediately send the error") { let producerError = NSError(domain: "com.reactivecocoa.errordomain", code: 4815, userInfo: nil) let producerResult = .Failure(producerError) as Result let signalProducer = SignalProducer(result: producerResult) expect(signalProducer).to(sendValue(nil, sendError: producerError, complete: false)) } } describe("init(values:)") { it("should immediately send the sequence of values") { let sequenceValues = [1, 2, 3] let signalProducer = SignalProducer(values: sequenceValues) expect(signalProducer).to(sendValues(sequenceValues, sendError: nil, complete: true)) } } describe("SignalProducer.empty") { it("should immediately complete") { let signalProducer = SignalProducer.empty expect(signalProducer).to(sendValue(nil, sendError: nil, complete: true)) } } describe("SignalProducer.never") { it("should not send any events") { let signalProducer = SignalProducer.never expect(signalProducer).to(sendValue(nil, sendError: nil, complete: false)) } } describe("SignalProducer.buffer") { it("should replay buffered events when started, then forward events as added") { let (producer, observer) = SignalProducer.buffer(Int.max) observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) var values: [Int] = [] var completed = false producer.start { event in switch event { case let .Next(value): values.append(value) case .Completed: completed = true default: break } } expect(values) == [1, 2, 3] expect(completed) == false observer.sendNext(4) observer.sendNext(5) expect(values) == [1, 2, 3, 4, 5] expect(completed) == false observer.sendCompleted() expect(values) == [1, 2, 3, 4, 5] expect(completed) == true } it("should drop earliest events to maintain the capacity") { let (producer, observer) = SignalProducer.buffer(1) observer.sendNext(1) observer.sendNext(2) var values: [Int] = [] var error: TestError? producer.start { event in switch event { case let .Next(value): values.append(value) case let .Failed(err): error = err default: break } } expect(values) == [2] expect(error).to(beNil()) observer.sendNext(3) observer.sendNext(4) expect(values) == [2, 3, 4] expect(error).to(beNil()) observer.sendFailed(.Default) expect(values) == [2, 3, 4] expect(error) == TestError.Default } it("should always replay termination event") { let (producer, observer) = SignalProducer.buffer(0) var completed = false observer.sendCompleted() producer.startWithCompleted { completed = true } expect(completed) == true } it("should replay values after being terminated") { let (producer, observer) = SignalProducer.buffer(1) var value: Int? var completed = false observer.sendNext(123) observer.sendCompleted() producer.start { event in switch event { case let .Next(val): value = val case .Completed: completed = true default: break } } expect(value) == 123 expect(completed) == true } it("should not deadlock when started while sending") { let (producer, observer) = SignalProducer.buffer(Int.max) observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) var values: [Int] = [] producer.startWithCompleted { values = [] producer.startWithNext { value in values.append(value) } } observer.sendCompleted() expect(values) == [ 1, 2, 3 ] } it("should not deadlock in pair when started while sending") { let (producer1, observer1) = SignalProducer.buffer(Int.max) let (producer2, observer2) = SignalProducer.buffer(Int.max) observer1.sendNext("A") observer1.sendNext("B") observer2.sendNext("1") observer2.sendNext("2") var valuePairs: [String] = [] producer1.startWithCompleted { producer2.startWithCompleted { valuePairs = [] producer1.startWithNext { value1 in producer2.startWithNext { value2 in valuePairs.append(value1 + value2) } } } } observer1.sendCompleted() observer2.sendCompleted() expect(valuePairs) == [ "A1", "A2", "B1", "B2" ] } it("should buffer values before sending recursively to new observers") { let (producer, observer) = SignalProducer.buffer(Int.max) var values: [Int] = [] var lastBufferedValues: [Int] = [] producer.startWithNext { newValue in values.append(newValue) var bufferedValues: [Int] = [] producer.startWithNext { bufferedValue in bufferedValues.append(bufferedValue) } expect(bufferedValues) == values lastBufferedValues = bufferedValues } observer.sendNext(1) expect(values) == [ 1 ] expect(lastBufferedValues) == values observer.sendNext(2) expect(values) == [ 1, 2 ] expect(lastBufferedValues) == values observer.sendNext(3) expect(values) == [ 1, 2, 3 ] expect(lastBufferedValues) == values } } describe("trailing closure") { it("receives next values") { let (producer, observer) = SignalProducer.pipe() var values = [Int]() producer.startWithNext { next in values.append(next) } observer.sendNext(1) expect(values) == [1] } } describe("SignalProducer.attempt") { it("should run the operation once per start()") { var operationRunTimes = 0 let operation: () -> Result = { operationRunTimes += 1 return .Success("OperationValue") } SignalProducer.attempt(operation).start() SignalProducer.attempt(operation).start() expect(operationRunTimes) == 2 } it("should send the value then complete") { let operationReturnValue = "OperationValue" let operation: () -> Result = { return .Success(operationReturnValue) } let signalProducer = SignalProducer.attempt(operation) expect(signalProducer).to(sendValue(operationReturnValue, sendError: nil, complete: true)) } it("should send the error") { let operationError = NSError(domain: "com.reactivecocoa.errordomain", code: 4815, userInfo: nil) let operation: () -> Result = { return .Failure(operationError) } let signalProducer = SignalProducer.attempt(operation) expect(signalProducer).to(sendValue(nil, sendError: operationError, complete: false)) } } describe("startWithSignal") { it("should invoke the closure before any effects or events") { var started = false var value: Int? SignalProducer(value: 42) .on(started: { started = true }, next: { value = $0 }) .startWithSignal { _ in expect(started) == false expect(value).to(beNil()) } expect(started) == true expect(value) == 42 } it("should dispose of added disposables if disposed") { let addedDisposable = SimpleDisposable() var disposable: Disposable! let producer = SignalProducer() { _, disposable in disposable.addDisposable(addedDisposable) return } producer.startWithSignal { _, innerDisposable in disposable = innerDisposable } expect(addedDisposable.disposed) == false disposable.dispose() expect(addedDisposable.disposed) == true } it("should send interrupted if disposed") { var interrupted = false var disposable: Disposable! SignalProducer(value: 42) .startOn(TestScheduler()) .startWithSignal { signal, innerDisposable in signal.observeInterrupted { interrupted = true } disposable = innerDisposable } expect(interrupted) == false disposable.dispose() expect(interrupted) == true } it("should release signal observers if disposed") { weak var objectRetainedByObserver: NSObject? var disposable: Disposable! let producer = SignalProducer.never producer.startWithSignal { signal, innerDisposable in let object = NSObject() objectRetainedByObserver = object signal.observeNext { _ in object.description } disposable = innerDisposable } expect(objectRetainedByObserver).toNot(beNil()) disposable.dispose() expect(objectRetainedByObserver).to(beNil()) } it("should not trigger effects if disposed before closure return") { var started = false var value: Int? SignalProducer(value: 42) .on(started: { started = true }, next: { value = $0 }) .startWithSignal { _, disposable in expect(started) == false expect(value).to(beNil()) disposable.dispose() } expect(started) == false expect(value).to(beNil()) } it("should send interrupted if disposed before closure return") { var interrupted = false SignalProducer(value: 42) .startWithSignal { signal, disposable in expect(interrupted) == false signal.observeInterrupted { interrupted = true } disposable.dispose() } expect(interrupted) == true } it("should dispose of added disposables upon completion") { let addedDisposable = SimpleDisposable() var observer: Signal.Observer! let producer = SignalProducer() { incomingObserver, disposable in disposable.addDisposable(addedDisposable) observer = incomingObserver } producer.startWithSignal { _ in } expect(addedDisposable.disposed) == false observer.sendCompleted() expect(addedDisposable.disposed) == true } it("should dispose of added disposables upon error") { let addedDisposable = SimpleDisposable() var observer: Signal.Observer! let producer = SignalProducer() { incomingObserver, disposable in disposable.addDisposable(addedDisposable) observer = incomingObserver } producer.startWithSignal { _ in } expect(addedDisposable.disposed) == false observer.sendFailed(.Default) expect(addedDisposable.disposed) == true } } describe("start") { it("should immediately begin sending events") { let producer = SignalProducer(values: [1, 2]) var values: [Int] = [] var completed = false producer.start { event in switch event { case let .Next(value): values.append(value) case .Completed: completed = true default: break } } expect(values) == [1, 2] expect(completed) == true } it("should send interrupted if disposed") { let producer = SignalProducer<(), NoError>.never var interrupted = false let disposable = producer.startWithInterrupted { interrupted = true } expect(interrupted) == false disposable.dispose() expect(interrupted) == true } it("should release observer when disposed") { weak var objectRetainedByObserver: NSObject? var disposable: Disposable! let test = { let producer = SignalProducer.never let object = NSObject() objectRetainedByObserver = object disposable = producer.startWithNext { _ in object } } test() expect(objectRetainedByObserver).toNot(beNil()) disposable.dispose() expect(objectRetainedByObserver).to(beNil()) } describe("trailing closure") { it("receives next values") { let (producer, observer) = SignalProducer.pipe() var values = [Int]() producer.startWithNext { next in values.append(next) } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendCompleted() expect(values) == [1, 2, 3] } // TODO: remove when the method is marked unavailable. it("receives next values with erroring signal") { let (producer, observer) = SignalProducer.pipe() var values = [Int]() producer.startWithNext { next in values.append(next) } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendCompleted() expect(values) == [1, 2, 3] } it("receives results") { let (producer, observer) = SignalProducer.pipe() var results: [Result] = [] producer.startWithResult { results.append($0) } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendFailed(.Default) observer.sendCompleted() expect(results).to(haveCount(4)) expect(results[0].value) == 1 expect(results[1].value) == 2 expect(results[2].value) == 3 expect(results[3].error) == .Default } } } describe("lift") { describe("over unary operators") { it("should invoke transformation once per started signal") { let baseProducer = SignalProducer(values: [1, 2]) var counter = 0 let transform = { (signal: Signal) -> Signal in counter += 1 return signal } let producer = baseProducer.lift(transform) expect(counter) == 0 producer.start() expect(counter) == 1 producer.start() expect(counter) == 2 } it("should not miss any events") { let baseProducer = SignalProducer(values: [1, 2, 3, 4]) let producer = baseProducer.lift { signal in return signal.map { $0 * $0 } } let result = producer.collect().single() expect(result?.value) == [1, 4, 9, 16] } } describe("over binary operators") { it("should invoke transformation once per started signal") { let baseProducer = SignalProducer(values: [1, 2]) let otherProducer = SignalProducer(values: [3, 4]) var counter = 0 let transform = { (signal: Signal) -> Signal -> Signal<(Int, Int), NoError> in return { otherSignal in counter += 1 return zip(signal, otherSignal) } } let producer = baseProducer.lift(transform)(otherProducer) expect(counter) == 0 producer.start() expect(counter) == 1 producer.start() expect(counter) == 2 } it("should not miss any events") { let baseProducer = SignalProducer(values: [1, 2, 3]) let otherProducer = SignalProducer(values: [4, 5, 6]) let transform = { (signal: Signal) -> Signal -> Signal in return { otherSignal in return zip(signal, otherSignal).map { first, second in first + second } } } let producer = baseProducer.lift(transform)(otherProducer) let result = producer.collect().single() expect(result?.value) == [5, 7, 9] } } describe("over binary operators with signal") { it("should invoke transformation once per started signal") { let baseProducer = SignalProducer(values: [1, 2]) let (otherSignal, otherSignalObserver) = Signal.pipe() var counter = 0 let transform = { (signal: Signal) -> Signal -> Signal<(Int, Int), NoError> in return { otherSignal in counter += 1 return zip(signal, otherSignal) } } let producer = baseProducer.lift(transform)(otherSignal) expect(counter) == 0 producer.start() otherSignalObserver.sendNext(1) expect(counter) == 1 producer.start() otherSignalObserver.sendNext(2) expect(counter) == 2 } it("should not miss any events") { let baseProducer = SignalProducer(values: [ 1, 2, 3 ]) let (otherSignal, otherSignalObserver) = Signal.pipe() let transform = { (signal: Signal) -> Signal -> Signal in return { otherSignal in return zip(signal, otherSignal).map(+) } } let producer = baseProducer.lift(transform)(otherSignal) var result: [Int] = [] var completed: Bool = false producer.start { event in switch event { case .Next(let value): result.append(value) case .Completed: completed = true default: break } } otherSignalObserver.sendNext(4) expect(result) == [ 5 ] otherSignalObserver.sendNext(5) expect(result) == [ 5, 7 ] otherSignalObserver.sendNext(6) expect(result) == [ 5, 7, 9 ] expect(completed) == true } } } describe("sequence operators") { var producerA: SignalProducer! var producerB: SignalProducer! beforeEach { producerA = SignalProducer(values: [ 1, 2 ]) producerB = SignalProducer(values: [ 3, 4 ]) } it("should combine the events to one array") { let producer = combineLatest([producerA, producerB]) let result = producer.collect().single() expect(result?.value) == [[1, 4], [2, 4]] } it("should zip the events to one array") { let producer = zip([producerA, producerB]) let result = producer.collect().single() expect(result?.value) == [[1, 3], [2, 4]] } } describe("timer") { it("should send the current date at the given interval") { let scheduler = TestScheduler() let producer = timer(1, onScheduler: scheduler, withLeeway: 0) let startDate = scheduler.currentDate let tick1 = startDate.dateByAddingTimeInterval(1) let tick2 = startDate.dateByAddingTimeInterval(2) let tick3 = startDate.dateByAddingTimeInterval(3) var dates: [NSDate] = [] producer.startWithNext { dates.append($0) } scheduler.advanceByInterval(0.9) expect(dates) == [] scheduler.advanceByInterval(1) expect(dates) == [tick1] scheduler.advance() expect(dates) == [tick1] scheduler.advanceByInterval(0.2) expect(dates) == [tick1, tick2] scheduler.advanceByInterval(1) expect(dates) == [tick1, tick2, tick3] } it("should release the signal when disposed") { let scheduler = TestScheduler() let producer = timer(1, onScheduler: scheduler, withLeeway: 0) weak var weakSignal: Signal? producer.startWithSignal { signal, disposable in weakSignal = signal scheduler.schedule { disposable.dispose() } } expect(weakSignal).toNot(beNil()) scheduler.run() expect(weakSignal).to(beNil()) } } describe("on") { it("should attach event handlers to each started signal") { let (baseProducer, observer) = SignalProducer.pipe() var started = 0 var event = 0 var next = 0 var completed = 0 var terminated = 0 let producer = baseProducer .on(started: { started += 1 }, event: { e in event += 1 }, next: { n in next += 1 }, completed: { completed += 1 }, terminated: { terminated += 1 }) producer.start() expect(started) == 1 producer.start() expect(started) == 2 observer.sendNext(1) expect(event) == 2 expect(next) == 2 observer.sendCompleted() expect(event) == 4 expect(completed) == 2 expect(terminated) == 2 } it("should attach event handlers for disposal") { let (baseProducer, _) = SignalProducer.pipe() var disposed: Bool = false let producer = baseProducer .on(disposed: { disposed = true }) let disposable = producer.start() expect(disposed) == false disposable.dispose() expect(disposed) == true } } describe("startOn") { it("should invoke effects on the given scheduler") { let scheduler = TestScheduler() var invoked = false let producer = SignalProducer() { _ in invoked = true } producer.startOn(scheduler).start() expect(invoked) == false scheduler.advance() expect(invoked) == true } it("should forward events on their original scheduler") { let startScheduler = TestScheduler() let testScheduler = TestScheduler() let producer = timer(2, onScheduler: testScheduler, withLeeway: 0) var next: NSDate? producer.startOn(startScheduler).startWithNext { next = $0 } startScheduler.advanceByInterval(2) expect(next).to(beNil()) testScheduler.advanceByInterval(1) expect(next).to(beNil()) testScheduler.advanceByInterval(1) expect(next) == testScheduler.currentDate } } describe("flatMapError") { it("should invoke the handler and start new producer for an error") { let (baseProducer, baseObserver) = SignalProducer.pipe() var values: [Int] = [] var completed = false baseProducer .flatMapError { (error: TestError) -> SignalProducer in expect(error) == TestError.Default expect(values) == [1] return .init(value: 2) } .start { event in switch event { case let .Next(value): values.append(value) case .Completed: completed = true default: break } } baseObserver.sendNext(1) baseObserver.sendFailed(.Default) expect(values) == [1, 2] expect(completed) == true } it("should interrupt the replaced producer on disposal") { let (baseProducer, baseObserver) = SignalProducer.pipe() var (disposed, interrupted) = (false, false) let disposable = baseProducer .flatMapError { (error: TestError) -> SignalProducer in return SignalProducer { _, disposable in disposable += ActionDisposable { disposed = true } } } .startWithInterrupted { interrupted = true } baseObserver.sendFailed(.Default) disposable.dispose() expect(interrupted) == true expect(disposed) == true } } describe("flatten") { describe("FlattenStrategy.Concat") { describe("sequencing") { var completePrevious: (() -> Void)! var sendSubsequent: (() -> Void)! var completeOuter: (() -> Void)! var subsequentStarted = false beforeEach { let (outerProducer, outerObserver) = SignalProducer, NoError>.pipe() let (previousProducer, previousObserver) = SignalProducer.pipe() subsequentStarted = false let subsequentProducer = SignalProducer { _ in subsequentStarted = true } completePrevious = { previousObserver.sendCompleted() } sendSubsequent = { outerObserver.sendNext(subsequentProducer) } completeOuter = { outerObserver.sendCompleted() } outerProducer.flatten(.Concat).start() outerObserver.sendNext(previousProducer) } it("should immediately start subsequent inner producer if previous inner producer has already completed") { completePrevious() sendSubsequent() expect(subsequentStarted) == true } context("with queued producers") { beforeEach { // Place the subsequent producer into `concat`'s queue. sendSubsequent() expect(subsequentStarted) == false } it("should start subsequent inner producer upon completion of previous inner producer") { completePrevious() expect(subsequentStarted) == true } it("should start subsequent inner producer upon completion of previous inner producer and completion of outer producer") { completeOuter() completePrevious() expect(subsequentStarted) == true } } } it("should forward an error from an inner producer") { let errorProducer = SignalProducer(error: TestError.Default) let outerProducer = SignalProducer, TestError>(value: errorProducer) var error: TestError? (outerProducer.flatten(.Concat)).startWithFailed { e in error = e } expect(error) == TestError.Default } it("should forward an error from the outer producer") { let (outerProducer, outerObserver) = SignalProducer, TestError>.pipe() var error: TestError? outerProducer.flatten(.Concat).startWithFailed { e in error = e } outerObserver.sendFailed(TestError.Default) expect(error) == TestError.Default } describe("completion") { var completeOuter: (() -> Void)! var completeInner: (() -> Void)! var completed = false beforeEach { let (outerProducer, outerObserver) = SignalProducer, NoError>.pipe() let (innerProducer, innerObserver) = SignalProducer.pipe() completeOuter = { outerObserver.sendCompleted() } completeInner = { innerObserver.sendCompleted() } completed = false outerProducer.flatten(.Concat).startWithCompleted { completed = true } outerObserver.sendNext(innerProducer) } it("should complete when inner producers complete, then outer producer completes") { completeInner() expect(completed) == false completeOuter() expect(completed) == true } it("should complete when outer producers completes, then inner producers complete") { completeOuter() expect(completed) == false completeInner() expect(completed) == true } } } describe("FlattenStrategy.Merge") { describe("behavior") { var completeA: (() -> Void)! var sendA: (() -> Void)! var completeB: (() -> Void)! var sendB: (() -> Void)! var outerCompleted = false var recv = [Int]() beforeEach { let (outerProducer, outerObserver) = SignalProducer, NoError>.pipe() let (producerA, observerA) = SignalProducer.pipe() let (producerB, observerB) = SignalProducer.pipe() completeA = { observerA.sendCompleted() } completeB = { observerB.sendCompleted() } var a = 0 sendA = { observerA.sendNext(a); a += 1 } var b = 100 sendB = { observerB.sendNext(b); b += 1 } outerProducer.flatten(.Merge).start { event in switch event { case let .Next(i): recv.append(i) case .Completed: outerCompleted = true default: break } } outerObserver.sendNext(producerA) outerObserver.sendNext(producerB) outerObserver.sendCompleted() } it("should forward values from any inner signals") { sendA() sendA() sendB() sendA() sendB() expect(recv) == [0, 1, 100, 2, 101] } it("should complete when all signals have completed") { completeA() expect(outerCompleted) == false completeB() expect(outerCompleted) == true } } describe("error handling") { it("should forward an error from an inner signal") { let errorProducer = SignalProducer(error: TestError.Default) let outerProducer = SignalProducer, TestError>(value: errorProducer) var error: TestError? outerProducer.flatten(.Merge).startWithFailed { e in error = e } expect(error) == TestError.Default } it("should forward an error from the outer signal") { let (outerProducer, outerObserver) = SignalProducer, TestError>.pipe() var error: TestError? outerProducer.flatten(.Merge).startWithFailed { e in error = e } outerObserver.sendFailed(TestError.Default) expect(error) == TestError.Default } } } describe("FlattenStrategy.Latest") { it("should forward values from the latest inner signal") { let (outer, outerObserver) = SignalProducer, TestError>.pipe() let (firstInner, firstInnerObserver) = SignalProducer.pipe() let (secondInner, secondInnerObserver) = SignalProducer.pipe() var receivedValues: [Int] = [] var errored = false var completed = false outer.flatten(.Latest).start { event in switch event { case let .Next(value): receivedValues.append(value) case .Completed: completed = true case .Failed: errored = true case .Interrupted: break } } outerObserver.sendNext(SignalProducer(value: 0)) outerObserver.sendNext(firstInner) firstInnerObserver.sendNext(1) outerObserver.sendNext(secondInner) secondInnerObserver.sendNext(2) outerObserver.sendCompleted() expect(receivedValues) == [ 0, 1, 2 ] expect(errored) == false expect(completed) == false firstInnerObserver.sendNext(3) firstInnerObserver.sendCompleted() secondInnerObserver.sendNext(4) secondInnerObserver.sendCompleted() expect(receivedValues) == [ 0, 1, 2, 4 ] expect(errored) == false expect(completed) == true } it("should forward an error from an inner signal") { let inner = SignalProducer(error: .Default) let outer = SignalProducer, TestError>(value: inner) let result = outer.flatten(.Latest).first() expect(result?.error) == TestError.Default } it("should forward an error from the outer signal") { let outer = SignalProducer, TestError>(error: .Default) let result = outer.flatten(.Latest).first() expect(result?.error) == TestError.Default } it("should complete when the original and latest signals have completed") { let inner = SignalProducer.empty let outer = SignalProducer, TestError>(value: inner) var completed = false outer.flatten(.Latest).startWithCompleted { completed = true } expect(completed) == true } it("should complete when the outer signal completes before sending any signals") { let outer = SignalProducer, TestError>.empty var completed = false outer.flatten(.Latest).startWithCompleted { completed = true } expect(completed) == true } it("should not deadlock") { let producer = SignalProducer(value: 1) .flatMap(.Latest) { _ in SignalProducer(value: 10) } let result = producer.take(1).last() expect(result?.value) == 10 } } describe("interruption") { var innerObserver: Signal<(), NoError>.Observer! var outerObserver: Signal, NoError>.Observer! var execute: (FlattenStrategy -> Void)! var interrupted = false var completed = false beforeEach { let (innerProducer, incomingInnerObserver) = SignalProducer<(), NoError>.pipe() let (outerProducer, incomingOuterObserver) = SignalProducer, NoError>.pipe() innerObserver = incomingInnerObserver outerObserver = incomingOuterObserver execute = { strategy in interrupted = false completed = false outerProducer .flatten(strategy) .start { event in switch event { case .Interrupted: interrupted = true case .Completed: completed = true default: break } } } incomingOuterObserver.sendNext(innerProducer) } describe("Concat") { it("should drop interrupted from an inner producer") { execute(.Concat) innerObserver.sendInterrupted() expect(interrupted) == false expect(completed) == false outerObserver.sendCompleted() expect(completed) == true } it("should forward interrupted from the outer producer") { execute(.Concat) outerObserver.sendInterrupted() expect(interrupted) == true } } describe("Latest") { it("should drop interrupted from an inner producer") { execute(.Latest) innerObserver.sendInterrupted() expect(interrupted) == false expect(completed) == false outerObserver.sendCompleted() expect(completed) == true } it("should forward interrupted from the outer producer") { execute(.Latest) outerObserver.sendInterrupted() expect(interrupted) == true } } describe("Merge") { it("should drop interrupted from an inner producer") { execute(.Merge) innerObserver.sendInterrupted() expect(interrupted) == false expect(completed) == false outerObserver.sendCompleted() expect(completed) == true } it("should forward interrupted from the outer producer") { execute(.Merge) outerObserver.sendInterrupted() expect(interrupted) == true } } } describe("disposal") { var completeOuter: (() -> Void)! var disposeOuter: (() -> Void)! var execute: (FlattenStrategy -> Void)! var innerDisposable = SimpleDisposable() var interrupted = false beforeEach { execute = { strategy in let (outerProducer, outerObserver) = SignalProducer, NoError>.pipe() innerDisposable = SimpleDisposable() let innerProducer = SignalProducer { $1.addDisposable(innerDisposable) } interrupted = false let outerDisposable = outerProducer.flatten(strategy).startWithInterrupted { interrupted = true } completeOuter = outerObserver.sendCompleted disposeOuter = outerDisposable.dispose outerObserver.sendNext(innerProducer) } } describe("Concat") { it("should cancel inner work when disposed before the outer producer completes") { execute(.Concat) expect(innerDisposable.disposed) == false expect(interrupted) == false disposeOuter() expect(innerDisposable.disposed) == true expect(interrupted) == true } it("should cancel inner work when disposed after the outer producer completes") { execute(.Concat) completeOuter() expect(innerDisposable.disposed) == false expect(interrupted) == false disposeOuter() expect(innerDisposable.disposed) == true expect(interrupted) == true } } describe("Latest") { it("should cancel inner work when disposed before the outer producer completes") { execute(.Latest) expect(innerDisposable.disposed) == false expect(interrupted) == false disposeOuter() expect(innerDisposable.disposed) == true expect(interrupted) == true } it("should cancel inner work when disposed after the outer producer completes") { execute(.Latest) completeOuter() expect(innerDisposable.disposed) == false expect(interrupted) == false disposeOuter() expect(innerDisposable.disposed) == true expect(interrupted) == true } } describe("Merge") { it("should cancel inner work when disposed before the outer producer completes") { execute(.Merge) expect(innerDisposable.disposed) == false expect(interrupted) == false disposeOuter() expect(innerDisposable.disposed) == true expect(interrupted) == true } it("should cancel inner work when disposed after the outer producer completes") { execute(.Merge) completeOuter() expect(innerDisposable.disposed) == false expect(interrupted) == false disposeOuter() expect(innerDisposable.disposed) == true expect(interrupted) == true } } } } describe("times") { it("should start a signal N times upon completion") { let original = SignalProducer(values: [ 1, 2, 3 ]) let producer = original.times(3) let result = producer.collect().single() expect(result?.value) == [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ] } it("should produce an equivalent signal producer if count is 1") { let original = SignalProducer(value: 1) let producer = original.times(1) let result = producer.collect().single() expect(result?.value) == [ 1 ] } it("should produce an empty signal if count is 0") { let original = SignalProducer(value: 1) let producer = original.times(0) let result = producer.first() expect(result).to(beNil()) } it("should not repeat upon error") { let results: [Result] = [ .Success(1), .Success(2), .Failure(.Default) ] let original = SignalProducer.attemptWithResults(results) let producer = original.times(3) let events = producer .materialize() .collect() .single() let result = events?.value let expectedEvents: [Event] = [ .Next(1), .Next(2), .Failed(.Default) ] // TODO: if let result = result where result.count == expectedEvents.count if result?.count != expectedEvents.count { fail("Invalid result: \(result)") } else { // Can't test for equality because Array is not Equatable, // and neither is Event. expect(result![0] == expectedEvents[0]) == true expect(result![1] == expectedEvents[1]) == true expect(result![2] == expectedEvents[2]) == true } } it("should evaluate lazily") { let original = SignalProducer(value: 1) let producer = original.times(Int.max) let result = producer.take(1).single() expect(result?.value) == 1 } } describe("retry") { it("should start a signal N times upon error") { let results: [Result] = [ .Failure(.Error1), .Failure(.Error2), .Success(1) ] let original = SignalProducer.attemptWithResults(results) let producer = original.retry(2) let result = producer.single() expect(result?.value) == 1 } it("should forward errors that occur after all retries") { let results: [Result] = [ .Failure(.Default), .Failure(.Error1), .Failure(.Error2), ] let original = SignalProducer.attemptWithResults(results) let producer = original.retry(2) let result = producer.single() expect(result?.error) == TestError.Error2 } it("should not retry upon completion") { let results: [Result] = [ .Success(1), .Success(2), .Success(3) ] let original = SignalProducer.attemptWithResults(results) let producer = original.retry(2) let result = producer.single() expect(result?.value) == 1 } } describe("then") { it("should start the subsequent producer after the completion of the original") { let (original, observer) = SignalProducer.pipe() var subsequentStarted = false let subsequent = SignalProducer { observer, _ in subsequentStarted = true } let producer = original.then(subsequent) producer.start() expect(subsequentStarted) == false observer.sendCompleted() expect(subsequentStarted) == true } it("should forward errors from the original producer") { let original = SignalProducer(error: .Default) let subsequent = SignalProducer.empty let result = original.then(subsequent).first() expect(result?.error) == TestError.Default } it("should forward errors from the subsequent producer") { let original = SignalProducer.empty let subsequent = SignalProducer(error: .Default) let result = original.then(subsequent).first() expect(result?.error) == TestError.Default } it("should forward interruptions from the original producer") { let (original, observer) = SignalProducer.pipe() var subsequentStarted = false let subsequent = SignalProducer { observer, _ in subsequentStarted = true } var interrupted = false let producer = original.then(subsequent) producer.startWithInterrupted { interrupted = true } expect(subsequentStarted) == false observer.sendInterrupted() expect(interrupted) == true } it("should complete when both inputs have completed") { let (original, originalObserver) = SignalProducer.pipe() let (subsequent, subsequentObserver) = SignalProducer.pipe() let producer = original.then(subsequent) var completed = false producer.startWithCompleted { completed = true } originalObserver.sendCompleted() expect(completed) == false subsequentObserver.sendCompleted() expect(completed) == true } } describe("first") { it("should start a signal then block on the first value") { let (_signal, observer) = Signal.pipe() let queue = dispatch_queue_create("\(#file):\(#line)", DISPATCH_QUEUE_SERIAL) let producer = SignalProducer(signal: _signal.delay(0.1, onScheduler: QueueScheduler(queue: queue))) var result: Result? let group = dispatch_group_create() dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { result = producer.first() } expect(result).to(beNil()) observer.sendNext(1) dispatch_group_wait(group, DISPATCH_TIME_FOREVER) expect(result?.value) == 1 } it("should return a nil result if no values are sent before completion") { let result = SignalProducer.empty.first() expect(result).to(beNil()) } it("should return the first value if more than one value is sent") { let result = SignalProducer(values: [ 1, 2 ]).first() expect(result?.value) == 1 } it("should return an error if one occurs before the first value") { let result = SignalProducer(error: .Default).first() expect(result?.error) == TestError.Default } } describe("single") { it("should start a signal then block until completion") { let (_signal, observer) = Signal.pipe() let queue = dispatch_queue_create("\(#file):\(#line)", DISPATCH_QUEUE_SERIAL) let producer = SignalProducer(signal: _signal.delay(0.1, onScheduler: QueueScheduler(queue: queue))) var result: Result? let group = dispatch_group_create() dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { result = producer.single() } expect(result).to(beNil()) observer.sendNext(1) expect(result).to(beNil()) observer.sendCompleted() dispatch_group_wait(group, DISPATCH_TIME_FOREVER) expect(result?.value) == 1 } it("should return a nil result if no values are sent before completion") { let result = SignalProducer.empty.single() expect(result).to(beNil()) } it("should return a nil result if more than one value is sent before completion") { let result = SignalProducer(values: [ 1, 2 ]).single() expect(result).to(beNil()) } it("should return an error if one occurs") { let result = SignalProducer(error: .Default).single() expect(result?.error) == TestError.Default } } describe("last") { it("should start a signal then block until completion") { let (_signal, observer) = Signal.pipe() let queue = dispatch_queue_create("\(#file):\(#line)", DISPATCH_QUEUE_SERIAL) let producer = SignalProducer(signal: _signal.delay(0.1, onScheduler: QueueScheduler(queue: queue))) var result: Result? let group = dispatch_group_create() dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { result = producer.last() } expect(result).to(beNil()) observer.sendNext(1) observer.sendNext(2) expect(result).to(beNil()) observer.sendCompleted() dispatch_group_wait(group, DISPATCH_TIME_FOREVER) expect(result?.value) == 2 } it("should return a nil result if no values are sent before completion") { let result = SignalProducer.empty.last() expect(result).to(beNil()) } it("should return the last value if more than one value is sent") { let result = SignalProducer(values: [ 1, 2 ]).last() expect(result?.value) == 2 } it("should return an error if one occurs") { let result = SignalProducer(error: .Default).last() expect(result?.error) == TestError.Default } } describe("wait") { it("should start a signal then block until completion") { let (_signal, observer) = Signal.pipe() let queue = dispatch_queue_create("\(#file):\(#line)", DISPATCH_QUEUE_SERIAL) let producer = SignalProducer(signal: _signal.delay(0.1, onScheduler: QueueScheduler(queue: queue))) var result: Result<(), NoError>? let group = dispatch_group_create() dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { result = producer.wait() } expect(result).to(beNil()) observer.sendCompleted() dispatch_group_wait(group, DISPATCH_TIME_FOREVER) expect(result?.value).toNot(beNil()) } it("should return an error if one occurs") { let result = SignalProducer(error: .Default).wait() expect(result.error) == TestError.Default } } describe("observeOn") { it("should immediately cancel upstream producer's work when disposed") { var upstreamDisposable: Disposable! let producer = SignalProducer<(), NoError>{ _, innerDisposable in upstreamDisposable = innerDisposable } var downstreamDisposable: Disposable! producer .observeOn(TestScheduler()) .startWithSignal { signal, innerDisposable in downstreamDisposable = innerDisposable } expect(upstreamDisposable.disposed) == false downstreamDisposable.dispose() expect(upstreamDisposable.disposed) == true } } describe("take") { it("Should not start concat'ed producer if the first one sends a value when using take(1)") { let scheduler: QueueScheduler if #available(OSX 10.10, *) { scheduler = QueueScheduler() } else { scheduler = QueueScheduler(queue: dispatch_get_main_queue()) } // Delaying producer1 from sending a value to test whether producer2 is started in the mean-time. let producer1 = SignalProducer() { handler, _ in handler.sendNext(1) handler.sendCompleted() }.startOn(scheduler) var started = false let producer2 = SignalProducer() { handler, _ in started = true handler.sendNext(2) handler.sendCompleted() } let result = producer1.concat(producer2).take(1).collect().first() expect(result?.value) == [1] expect(started) == false } } describe("replayLazily") { var producer: SignalProducer! var observer: SignalProducer.ProducedSignal.Observer! var replayedProducer: SignalProducer! beforeEach { let (producerTemp, observerTemp) = SignalProducer.pipe() producer = producerTemp observer = observerTemp replayedProducer = producer.replayLazily(2) } context("subscribing to underlying producer") { it("emits new values") { var last: Int? replayedProducer .assumeNoErrors() .startWithNext { last = $0 } expect(last).to(beNil()) observer.sendNext(1) expect(last) == 1 observer.sendNext(2) expect(last) == 2 } it("emits errors") { var error: TestError? replayedProducer.startWithFailed { error = $0 } expect(error).to(beNil()) observer.sendFailed(.Default) expect(error) == TestError.Default } } context("buffers past values") { it("emits last value upon subscription") { let disposable = replayedProducer .start() observer.sendNext(1) disposable.dispose() var last: Int? replayedProducer .assumeNoErrors() .startWithNext { last = $0 } expect(last) == 1 } it("emits previous failure upon subscription") { let disposable = replayedProducer .start() observer.sendFailed(.Default) disposable.dispose() var error: TestError? replayedProducer .startWithFailed { error = $0 } expect(error) == TestError.Default } it("emits last n values upon subscription") { var disposable = replayedProducer .start() observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) disposable.dispose() var values: [Int] = [] disposable = replayedProducer .assumeNoErrors() .startWithNext { values.append($0) } expect(values) == [ 3, 4 ] observer.sendNext(5) expect(values) == [ 3, 4, 5 ] disposable.dispose() values = [] replayedProducer .assumeNoErrors() .startWithNext { values.append($0) } expect(values) == [ 4, 5 ] } } context("starting underying producer") { it("starts lazily") { var started = false let producer = SignalProducer(value: 0) .on(started: { started = true }) expect(started) == false let replayedProducer = producer .replayLazily(1) expect(started) == false replayedProducer.start() expect(started) == true } it("shares a single subscription") { var startedTimes = 0 let producer = SignalProducer.never .on(started: { startedTimes += 1 }) expect(startedTimes) == 0 let replayedProducer = producer .replayLazily(1) expect(startedTimes) == 0 replayedProducer.start() expect(startedTimes) == 1 replayedProducer.start() expect(startedTimes) == 1 } it("does not start multiple times when subscribing multiple times") { var startedTimes = 0 let producer = SignalProducer(value: 0) .on(started: { startedTimes += 1 }) let replayedProducer = producer .replayLazily(1) expect(startedTimes) == 0 replayedProducer.start().dispose() expect(startedTimes) == 1 replayedProducer.start().dispose() expect(startedTimes) == 1 } it("does not start again if it finished") { var startedTimes = 0 let producer = SignalProducer.empty .on(started: { startedTimes += 1 }) expect(startedTimes) == 0 let replayedProducer = producer .replayLazily(1) expect(startedTimes) == 0 replayedProducer.start() expect(startedTimes) == 1 replayedProducer.start() expect(startedTimes) == 1 } } context("lifetime") { it("does not dispose underlying subscription if the replayed producer is still in memory") { var disposed = false let producer = SignalProducer.never .on(disposed: { disposed = true }) let replayedProducer = producer .replayLazily(1) expect(disposed) == false let disposable = replayedProducer.start() expect(disposed) == false disposable.dispose() expect(disposed) == false } it("does not dispose if it has active subscriptions") { var disposed = false let producer = SignalProducer.never .on(disposed: { disposed = true }) var replayedProducer = ImplicitlyUnwrappedOptional(producer.replayLazily(1)) expect(disposed) == false let disposable1 = replayedProducer.start() let disposable2 = replayedProducer.start() expect(disposed) == false replayedProducer = nil expect(disposed) == false disposable1.dispose() expect(disposed) == false disposable2.dispose() expect(disposed) == true } it("disposes underlying producer when the producer is deallocated") { var disposed = false let producer = SignalProducer.never .on(disposed: { disposed = true }) var replayedProducer = ImplicitlyUnwrappedOptional(producer.replayLazily(1)) expect(disposed) == false let disposable = replayedProducer.start() expect(disposed) == false disposable.dispose() expect(disposed) == false replayedProducer = nil expect(disposed) == true } it("does not leak buffered values") { final class Value { private let deinitBlock: () -> Void init(deinitBlock: () -> Void) { self.deinitBlock = deinitBlock } deinit { self.deinitBlock() } } var deinitValues = 0 var producer: SignalProducer! = SignalProducer(value: Value { deinitValues += 1 }) expect(deinitValues) == 0 var replayedProducer: SignalProducer! = producer .replayLazily(1) let disposable = replayedProducer .start() disposable.dispose() expect(deinitValues) == 0 producer = nil expect(deinitValues) == 0 replayedProducer = nil expect(deinitValues) == 1 } } describe("log events") { it("should output the correct event") { let expectations: [String -> Void] = [ { event in expect(event) == "[] Started" }, { event in expect(event) == "[] Next 1" }, { event in expect(event) == "[] Completed" }, { event in expect(event) == "[] Terminated" }, { event in expect(event) == "[] Disposed" } ] let logger = TestLogger(expectations: expectations) let (producer, observer) = SignalProducer.pipe() producer .logEvents(logger: logger.logEvent) .start() observer.sendNext(1) observer.sendCompleted() } } describe("init(values) ambiguity") { it("should not be a SignalProducer, NoError>") { let producer1: SignalProducer = SignalProducer.empty let producer2: SignalProducer = SignalProducer.empty let producer = SignalProducer(values: [producer1, producer2]) .flatten(.Merge) expect(producer is SignalProducer) == true } } } } } // MARK: - Helpers extension SignalProducer { internal static func pipe() -> (SignalProducer, ProducedSignal.Observer) { let (signal, observer) = ProducedSignal.pipe() let producer = SignalProducer(signal: signal) return (producer, observer) } /// Creates a producer that can be started as many times as elements in `results`. /// Each signal will immediately send either a value or an error. private static func attemptWithResults, C.Index.Distance == Int>(results: C) -> SignalProducer { let resultCount = results.count var operationIndex = 0 precondition(resultCount > 0) let operation: () -> Result = { if operationIndex < resultCount { defer { operationIndex += 1 } return results[results.startIndex.advancedBy(operationIndex)] } else { fail("Operation started too many times") return results[results.startIndex.advancedBy(0)] } } return SignalProducer.attempt(operation) } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalSpec.swift ================================================ // // SignalSpec.swift // ReactiveCocoa // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. // import Result import Nimble import Quick import ReactiveCocoa class SignalSpec: QuickSpec { override func spec() { describe("init") { var testScheduler: TestScheduler! beforeEach { testScheduler = TestScheduler() } it("should run the generator immediately") { var didRunGenerator = false _ = Signal { observer in didRunGenerator = true return nil } expect(didRunGenerator) == true } it("should forward events to observers") { let numbers = [ 1, 2, 5 ] let signal: Signal = Signal { observer in testScheduler.schedule { for number in numbers { observer.sendNext(number) } observer.sendCompleted() } return nil } var fromSignal: [Int] = [] var completed = false signal.observe { event in switch event { case let .Next(number): fromSignal.append(number) case .Completed: completed = true default: break } } expect(completed) == false expect(fromSignal).to(beEmpty()) testScheduler.run() expect(completed) == true expect(fromSignal) == numbers } it("should dispose of returned disposable upon error") { let disposable = SimpleDisposable() let signal: Signal = Signal { observer in testScheduler.schedule { observer.sendFailed(TestError.Default) } return disposable } var errored = false signal.observeFailed { _ in errored = true } expect(errored) == false expect(disposable.disposed) == false testScheduler.run() expect(errored) == true expect(disposable.disposed) == true } it("should dispose of returned disposable upon completion") { let disposable = SimpleDisposable() let signal: Signal = Signal { observer in testScheduler.schedule { observer.sendCompleted() } return disposable } var completed = false signal.observeCompleted { completed = true } expect(completed) == false expect(disposable.disposed) == false testScheduler.run() expect(completed) == true expect(disposable.disposed) == true } it("should dispose of returned disposable upon interrupted") { let disposable = SimpleDisposable() let signal: Signal = Signal { observer in testScheduler.schedule { observer.sendInterrupted() } return disposable } var interrupted = false signal.observeInterrupted { interrupted = true } expect(interrupted) == false expect(disposable.disposed) == false testScheduler.run() expect(interrupted) == true expect(disposable.disposed) == true } } describe("Signal.empty") { it("should interrupt its observers without emitting any value") { let signal = Signal<(), NoError>.empty var hasUnexpectedEventsEmitted = false var signalInterrupted = false signal.observe { event in switch event { case .Next, .Failed, .Completed: hasUnexpectedEventsEmitted = true case .Interrupted: signalInterrupted = true } } expect(hasUnexpectedEventsEmitted) == false expect(signalInterrupted) == true } } describe("Signal.pipe") { it("should forward events to observers") { let (signal, observer) = Signal.pipe() var fromSignal: [Int] = [] var completed = false signal.observe { event in switch event { case let .Next(number): fromSignal.append(number) case .Completed: completed = true default: break } } expect(fromSignal).to(beEmpty()) expect(completed) == false observer.sendNext(1) expect(fromSignal) == [ 1 ] observer.sendNext(2) expect(fromSignal) == [ 1, 2 ] expect(completed) == false observer.sendCompleted() expect(completed) == true } context("memory") { it("should not crash allocating memory with a few observers") { let (signal, _) = Signal.pipe() for _ in 0..<50 { autoreleasepool { let disposable = signal.observe { _ in } disposable!.dispose() } } } } } describe("observe") { var testScheduler: TestScheduler! beforeEach { testScheduler = TestScheduler() } it("should stop forwarding events when disposed") { let disposable = SimpleDisposable() let signal: Signal = Signal { observer in testScheduler.schedule { for number in [ 1, 2 ] { observer.sendNext(number) } observer.sendCompleted() observer.sendNext(4) } return disposable } var fromSignal: [Int] = [] signal.observeNext { number in fromSignal.append(number) } expect(disposable.disposed) == false expect(fromSignal).to(beEmpty()) testScheduler.run() expect(disposable.disposed) == true expect(fromSignal) == [ 1, 2 ] } it("should not trigger side effects") { var runCount = 0 let signal: Signal<(), NoError> = Signal { observer in runCount += 1 return nil } expect(runCount) == 1 signal.observe(Observer<(), NoError>()) expect(runCount) == 1 } it("should release observer after termination") { weak var testStr: NSMutableString? let (signal, observer) = Signal.pipe() let test = { let innerStr: NSMutableString = NSMutableString() signal.observeNext { value in innerStr.appendString("\(value)") } testStr = innerStr } test() observer.sendNext(1) expect(testStr) == "1" observer.sendNext(2) expect(testStr) == "12" observer.sendCompleted() expect(testStr).to(beNil()) } it("should release observer after interruption") { weak var testStr: NSMutableString? let (signal, observer) = Signal.pipe() let test = { let innerStr: NSMutableString = NSMutableString() signal.observeNext { value in innerStr.appendString("\(value)") } testStr = innerStr } test() observer.sendNext(1) expect(testStr) == "1" observer.sendNext(2) expect(testStr) == "12" observer.sendInterrupted() expect(testStr).to(beNil()) } } describe("trailing closure") { it("receives next values") { var values = [Int]() let (signal, observer) = Signal.pipe() signal.observeNext { next in values.append(next) } observer.sendNext(1) expect(values) == [1] } // TODO: remove when the method is marked unavailable it("receives next values with erroring signal") { var values = [Int]() let (signal, observer) = Signal.pipe() signal.observeNext { next in values.append(next) } observer.sendNext(1) expect(values) == [1] } it("receives results") { let (signal, observer) = Signal.pipe() var results: [Result] = [] signal.observeResult { results.append($0) } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendFailed(.Default) observer.sendCompleted() expect(results).to(haveCount(4)) expect(results[0].value) == 1 expect(results[1].value) == 2 expect(results[2].value) == 3 expect(results[3].error) == .Default } } describe("map") { it("should transform the values of the signal") { let (signal, observer) = Signal.pipe() let mappedSignal = signal.map { String($0 + 1) } var lastValue: String? mappedSignal.observeNext { lastValue = $0 return } expect(lastValue).to(beNil()) observer.sendNext(0) expect(lastValue) == "1" observer.sendNext(1) expect(lastValue) == "2" } } describe("mapError") { it("should transform the errors of the signal") { let (signal, observer) = Signal.pipe() let producerError = NSError(domain: "com.reactivecocoa.errordomain", code: 100, userInfo: nil) var error: NSError? signal .mapError { _ in producerError } .observeFailed { err in error = err } expect(error).to(beNil()) observer.sendFailed(TestError.Default) expect(error) == producerError } } describe("filter") { it("should omit values from the signal") { let (signal, observer) = Signal.pipe() let mappedSignal = signal.filter { $0 % 2 == 0 } var lastValue: Int? mappedSignal.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(0) expect(lastValue) == 0 observer.sendNext(1) expect(lastValue) == 0 observer.sendNext(2) expect(lastValue) == 2 } } describe("ignoreNil") { it("should forward only non-nil values") { let (signal, observer) = Signal.pipe() let mappedSignal = signal.ignoreNil() var lastValue: Int? mappedSignal.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(nil) expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(nil) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 } } describe("scan") { it("should incrementally accumulate a value") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.scan("", +) var lastValue: String? signal.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext("a") expect(lastValue) == "a" observer.sendNext("bb") expect(lastValue) == "abb" } } describe("reduce") { it("should accumulate one value") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.reduce(1, +) var lastValue: Int? var completed = false signal.observe { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true default: break } } expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue).to(beNil()) expect(completed) == false observer.sendCompleted() expect(completed) == true expect(lastValue) == 4 } it("should send the initial value if none are received") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.reduce(1, +) var lastValue: Int? var completed = false signal.observe { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true default: break } } expect(lastValue).to(beNil()) expect(completed) == false observer.sendCompleted() expect(lastValue) == 1 expect(completed) == true } } describe("skip") { it("should skip initial values") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.skip(1) var lastValue: Int? signal.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue) == 2 } it("should not skip any values when 0") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.skip(0) var lastValue: Int? signal.observeNext { lastValue = $0 } expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 } } describe("skipRepeats") { it("should skip duplicate Equatable values") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.skipRepeats() var values: [Bool] = [] signal.observeNext { values.append($0) } expect(values) == [] observer.sendNext(true) expect(values) == [ true ] observer.sendNext(true) expect(values) == [ true ] observer.sendNext(false) expect(values) == [ true, false ] observer.sendNext(true) expect(values) == [ true, false, true ] } it("should skip values according to a predicate") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.skipRepeats { $0.characters.count == $1.characters.count } var values: [String] = [] signal.observeNext { values.append($0) } expect(values) == [] observer.sendNext("a") expect(values) == [ "a" ] observer.sendNext("b") expect(values) == [ "a" ] observer.sendNext("cc") expect(values) == [ "a", "cc" ] observer.sendNext("d") expect(values) == [ "a", "cc", "d" ] } it("should not store strong reference to previously passed items") { var disposedItems: [Bool] = [] struct Item { let payload: Bool let disposable: ScopedDisposable } func item(payload: Bool) -> Item { return Item( payload: payload, disposable: ScopedDisposable(ActionDisposable { disposedItems.append(payload) }) ) } let (baseSignal, observer) = Signal.pipe() baseSignal.skipRepeats { $0.payload == $1.payload }.observeNext { _ in } observer.sendNext(item(true)) expect(disposedItems) == [] observer.sendNext(item(false)) expect(disposedItems) == [ true ] observer.sendNext(item(false)) expect(disposedItems) == [ true, false ] observer.sendNext(item(true)) expect(disposedItems) == [ true, false, false ] observer.sendCompleted() expect(disposedItems) == [ true, false, false, true ] } } describe("uniqueValues") { it("should skip values that have been already seen") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.uniqueValues() var values: [String] = [] signal.observeNext { values.append($0) } expect(values) == [] observer.sendNext("a") expect(values) == [ "a" ] observer.sendNext("b") expect(values) == [ "a", "b" ] observer.sendNext("a") expect(values) == [ "a", "b" ] observer.sendNext("b") expect(values) == [ "a", "b" ] observer.sendNext("c") expect(values) == [ "a", "b", "c" ] observer.sendCompleted() expect(values) == [ "a", "b", "c" ] } } describe("skipWhile") { var signal: Signal! var observer: Signal.Observer! var lastValue: Int? beforeEach { let (baseSignal, incomingObserver) = Signal.pipe() signal = baseSignal.skipWhile { $0 < 2 } observer = incomingObserver lastValue = nil signal.observeNext { lastValue = $0 } } it("should skip while the predicate is true") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue) == 2 observer.sendNext(0) expect(lastValue) == 0 } it("should not skip any values when the predicate starts false") { expect(lastValue).to(beNil()) observer.sendNext(3) expect(lastValue) == 3 observer.sendNext(1) expect(lastValue) == 1 } } describe("skipUntil") { var signal: Signal! var observer: Signal.Observer! var triggerObserver: Signal<(), NoError>.Observer! var lastValue: Int? = nil beforeEach { let (baseSignal, incomingObserver) = Signal.pipe() let (triggerSignal, incomingTriggerObserver) = Signal<(), NoError>.pipe() signal = baseSignal.skipUntil(triggerSignal) observer = incomingObserver triggerObserver = incomingTriggerObserver lastValue = nil signal.observe { event in switch event { case let .Next(value): lastValue = value default: break } } } it("should skip values until the trigger fires") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue).to(beNil()) triggerObserver.sendNext(()) observer.sendNext(0) expect(lastValue) == 0 } it("should skip values until the trigger completes") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue).to(beNil()) observer.sendNext(2) expect(lastValue).to(beNil()) triggerObserver.sendCompleted() observer.sendNext(0) expect(lastValue) == 0 } } describe("take") { it("should take initial values") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.take(2) var lastValue: Int? var completed = false signal.observe { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true default: break } } expect(lastValue).to(beNil()) expect(completed) == false observer.sendNext(1) expect(lastValue) == 1 expect(completed) == false observer.sendNext(2) expect(lastValue) == 2 expect(completed) == true } it("should complete immediately after taking given number of values") { let numbers = [ 1, 2, 4, 4, 5 ] let testScheduler = TestScheduler() var signal: Signal = Signal { observer in testScheduler.schedule { for number in numbers { observer.sendNext(number) } } return nil } var completed = false signal = signal.take(numbers.count) signal.observeCompleted { completed = true } expect(completed) == false testScheduler.run() expect(completed) == true } it("should interrupt when 0") { let numbers = [ 1, 2, 4, 4, 5 ] let testScheduler = TestScheduler() let signal: Signal = Signal { observer in testScheduler.schedule { for number in numbers { observer.sendNext(number) } } return nil } var result: [Int] = [] var interrupted = false signal .take(0) .observe { event in switch event { case let .Next(number): result.append(number) case .Interrupted: interrupted = true default: break } } expect(interrupted) == true testScheduler.run() expect(result).to(beEmpty()) } } describe("collect") { it("should collect all values") { let (original, observer) = Signal.pipe() let signal = original.collect() let expectedResult = [ 1, 2, 3 ] var result: [Int]? signal.observeNext { value in expect(result).to(beNil()) result = value } for number in expectedResult { observer.sendNext(number) } expect(result).to(beNil()) observer.sendCompleted() expect(result) == expectedResult } it("should complete with an empty array if there are no values") { let (original, observer) = Signal.pipe() let signal = original.collect() var result: [Int]? signal.observeNext { result = $0 } expect(result).to(beNil()) observer.sendCompleted() expect(result) == [] } it("should forward errors") { let (original, observer) = Signal.pipe() let signal = original.collect() var error: TestError? signal.observeFailed { error = $0 } expect(error).to(beNil()) observer.sendFailed(.Default) expect(error) == TestError.Default } it("should collect an exact count of values") { let (original, observer) = Signal.pipe() let signal = original.collect(count: 3) var observedValues: [[Int]] = [] signal.observeNext { value in observedValues.append(value) } var expectation: [[Int]] = [] for i in 1...7 { observer.sendNext(i) if i % 3 == 0 { expectation.append([Int]((i - 2)...i)) expect(observedValues) == expectation } else { expect(observedValues) == expectation } } observer.sendCompleted() expectation.append([7]) expect(observedValues) == expectation } it("should collect values until it matches a certain value") { let (original, observer) = Signal.pipe() let signal = original.collect { _, next in next != 5 } var expectedValues = [ [5, 5], [42, 5] ] signal.observeNext { value in expect(value) == expectedValues.removeFirst() } signal.observeCompleted { expect(expectedValues) == [] } expectedValues .flatMap { $0 } .forEach(observer.sendNext) observer.sendCompleted() } it("should collect values until it matches a certain condition on values") { let (original, observer) = Signal.pipe() let signal = original.collect { values in values.reduce(0, combine: +) == 10 } var expectedValues = [ [1, 2, 3, 4], [5, 6, 7, 8, 9] ] signal.observeNext { value in expect(value) == expectedValues.removeFirst() } signal.observeCompleted { expect(expectedValues) == [] } expectedValues .flatMap { $0 } .forEach(observer.sendNext) observer.sendCompleted() } } describe("takeUntil") { var signal: Signal! var observer: Signal.Observer! var triggerObserver: Signal<(), NoError>.Observer! var lastValue: Int? = nil var completed: Bool = false beforeEach { let (baseSignal, incomingObserver) = Signal.pipe() let (triggerSignal, incomingTriggerObserver) = Signal<(), NoError>.pipe() signal = baseSignal.takeUntil(triggerSignal) observer = incomingObserver triggerObserver = incomingTriggerObserver lastValue = nil completed = false signal.observe { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true default: break } } } it("should take values until the trigger fires") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 expect(completed) == false triggerObserver.sendNext(()) expect(completed) == true } it("should take values until the trigger completes") { expect(lastValue).to(beNil()) observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 expect(completed) == false triggerObserver.sendCompleted() expect(completed) == true } it("should complete if the trigger fires immediately") { expect(lastValue).to(beNil()) expect(completed) == false triggerObserver.sendNext(()) expect(completed) == true expect(lastValue).to(beNil()) } } describe("takeUntilReplacement") { var signal: Signal! var observer: Signal.Observer! var replacementObserver: Signal.Observer! var lastValue: Int? = nil var completed: Bool = false beforeEach { let (baseSignal, incomingObserver) = Signal.pipe() let (replacementSignal, incomingReplacementObserver) = Signal.pipe() signal = baseSignal.takeUntilReplacement(replacementSignal) observer = incomingObserver replacementObserver = incomingReplacementObserver lastValue = nil completed = false signal.observe { event in switch event { case let .Next(value): lastValue = value case .Completed: completed = true default: break } } } it("should take values from the original then the replacement") { expect(lastValue).to(beNil()) expect(completed) == false observer.sendNext(1) expect(lastValue) == 1 observer.sendNext(2) expect(lastValue) == 2 replacementObserver.sendNext(3) expect(lastValue) == 3 expect(completed) == false observer.sendNext(4) expect(lastValue) == 3 expect(completed) == false replacementObserver.sendNext(5) expect(lastValue) == 5 expect(completed) == false replacementObserver.sendCompleted() expect(completed) == true } } describe("takeWhile") { var signal: Signal! var observer: Signal.Observer! beforeEach { let (baseSignal, incomingObserver) = Signal.pipe() signal = baseSignal.takeWhile { $0 <= 4 } observer = incomingObserver } it("should take while the predicate is true") { var latestValue: Int! var completed = false signal.observe { event in switch event { case let .Next(value): latestValue = value case .Completed: completed = true default: break } } for value in -1...4 { observer.sendNext(value) expect(latestValue) == value expect(completed) == false } observer.sendNext(5) expect(latestValue) == 4 expect(completed) == true } it("should complete if the predicate starts false") { var latestValue: Int? var completed = false signal.observe { event in switch event { case let .Next(value): latestValue = value case .Completed: completed = true default: break } } observer.sendNext(5) expect(latestValue).to(beNil()) expect(completed) == true } } describe("observeOn") { it("should send events on the given scheduler") { let testScheduler = TestScheduler() let (signal, observer) = Signal.pipe() var result: [Int] = [] signal .observeOn(testScheduler) .observeNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) expect(result).to(beEmpty()) testScheduler.run() expect(result) == [ 1, 2 ] } } describe("delay") { it("should send events on the given scheduler after the interval") { let testScheduler = TestScheduler() let signal: Signal = Signal { observer in testScheduler.schedule { observer.sendNext(1) } testScheduler.scheduleAfter(5, action: { observer.sendNext(2) observer.sendCompleted() }) return nil } var result: [Int] = [] var completed = false signal .delay(10, onScheduler: testScheduler) .observe { event in switch event { case let .Next(number): result.append(number) case .Completed: completed = true default: break } } testScheduler.advanceByInterval(4) // send initial value expect(result).to(beEmpty()) testScheduler.advanceByInterval(10) // send second value and receive first expect(result) == [ 1 ] expect(completed) == false testScheduler.advanceByInterval(10) // send second value and receive first expect(result) == [ 1, 2 ] expect(completed) == true } it("should schedule errors immediately") { let testScheduler = TestScheduler() let signal: Signal = Signal { observer in testScheduler.schedule { observer.sendFailed(TestError.Default) } return nil } var errored = false signal .delay(10, onScheduler: testScheduler) .observeFailed { _ in errored = true } testScheduler.advance() expect(errored) == true } } describe("throttle") { var scheduler: TestScheduler! var observer: Signal.Observer! var signal: Signal! beforeEach { scheduler = TestScheduler() let (baseSignal, baseObserver) = Signal.pipe() observer = baseObserver signal = baseSignal.throttle(1, onScheduler: scheduler) expect(signal).notTo(beNil()) } it("should send values on the given scheduler at no less than the interval") { var values: [Int] = [] signal.observeNext { value in values.append(value) } expect(values) == [] observer.sendNext(0) expect(values) == [] scheduler.advance() expect(values) == [ 0 ] observer.sendNext(1) observer.sendNext(2) expect(values) == [ 0 ] scheduler.advanceByInterval(1.5) expect(values) == [ 0, 2 ] scheduler.advanceByInterval(3) expect(values) == [ 0, 2 ] observer.sendNext(3) expect(values) == [ 0, 2 ] scheduler.advance() expect(values) == [ 0, 2, 3 ] observer.sendNext(4) observer.sendNext(5) scheduler.advance() expect(values) == [ 0, 2, 3 ] scheduler.run() expect(values) == [ 0, 2, 3, 5 ] } it("should schedule completion immediately") { var values: [Int] = [] var completed = false signal.observe { event in switch event { case let .Next(value): values.append(value) case .Completed: completed = true default: break } } observer.sendNext(0) scheduler.advance() expect(values) == [ 0 ] observer.sendNext(1) observer.sendCompleted() expect(completed) == false scheduler.advance() expect(values) == [ 0 ] expect(completed) == true scheduler.run() expect(values) == [ 0 ] expect(completed) == true } } describe("debounce") { var scheduler: TestScheduler! var observer: Signal.Observer! var signal: Signal! beforeEach { scheduler = TestScheduler() let (baseSignal, baseObserver) = Signal.pipe() observer = baseObserver signal = baseSignal.debounce(1, onScheduler: scheduler) expect(signal).notTo(beNil()) } it("should send values on the given scheduler once the interval has passed since the last value was sent") { var values: [Int] = [] signal.observeNext { value in values.append(value) } expect(values) == [] observer.sendNext(0) expect(values) == [] scheduler.advance() expect(values) == [] observer.sendNext(1) observer.sendNext(2) expect(values) == [] scheduler.advanceByInterval(1.5) expect(values) == [ 2 ] scheduler.advanceByInterval(3) expect(values) == [ 2 ] observer.sendNext(3) expect(values) == [ 2 ] scheduler.advance() expect(values) == [ 2 ] observer.sendNext(4) observer.sendNext(5) scheduler.advance() expect(values) == [ 2 ] scheduler.run() expect(values) == [ 2, 5 ] } it("should schedule completion immediately") { var values: [Int] = [] var completed = false signal.observe { event in switch event { case let .Next(value): values.append(value) case .Completed: completed = true default: break } } observer.sendNext(0) scheduler.advance() expect(values) == [] observer.sendNext(1) observer.sendCompleted() expect(completed) == false scheduler.advance() expect(values) == [] expect(completed) == true scheduler.run() expect(values) == [] expect(completed) == true } } describe("sampleWith") { var sampledSignal: Signal<(Int, String), NoError>! var observer: Signal.Observer! var samplerObserver: Signal.Observer! beforeEach { let (signal, incomingObserver) = Signal.pipe() let (sampler, incomingSamplerObserver) = Signal.pipe() sampledSignal = signal.sampleWith(sampler) observer = incomingObserver samplerObserver = incomingSamplerObserver } it("should forward the latest value when the sampler fires") { var result: [String] = [] sampledSignal.observeNext { (left, right) in result.append("\(left)\(right)") } observer.sendNext(1) observer.sendNext(2) samplerObserver.sendNext("a") expect(result) == [ "2a" ] } it("should do nothing if sampler fires before signal receives value") { var result: [String] = [] sampledSignal.observeNext { (left, right) in result.append("\(left)\(right)") } samplerObserver.sendNext("a") expect(result).to(beEmpty()) } it("should send lates value with sampler value multiple times when sampler fires multiple times") { var result: [String] = [] sampledSignal.observeNext { (left, right) in result.append("\(left)\(right)") } observer.sendNext(1) samplerObserver.sendNext("a") samplerObserver.sendNext("b") expect(result) == [ "1a", "1b" ] } it("should complete when both inputs have completed") { var completed = false sampledSignal.observeCompleted { completed = true } observer.sendCompleted() expect(completed) == false samplerObserver.sendCompleted() expect(completed) == true } } describe("sampleOn") { var sampledSignal: Signal! var observer: Signal.Observer! var samplerObserver: Signal<(), NoError>.Observer! beforeEach { let (signal, incomingObserver) = Signal.pipe() let (sampler, incomingSamplerObserver) = Signal<(), NoError>.pipe() sampledSignal = signal.sampleOn(sampler) observer = incomingObserver samplerObserver = incomingSamplerObserver } it("should forward the latest value when the sampler fires") { var result: [Int] = [] sampledSignal.observeNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) samplerObserver.sendNext(()) expect(result) == [ 2 ] } it("should do nothing if sampler fires before signal receives value") { var result: [Int] = [] sampledSignal.observeNext { result.append($0) } samplerObserver.sendNext(()) expect(result).to(beEmpty()) } it("should send lates value multiple times when sampler fires multiple times") { var result: [Int] = [] sampledSignal.observeNext { result.append($0) } observer.sendNext(1) samplerObserver.sendNext(()) samplerObserver.sendNext(()) expect(result) == [ 1, 1 ] } it("should complete when both inputs have completed") { var completed = false sampledSignal.observeCompleted { completed = true } observer.sendCompleted() expect(completed) == false samplerObserver.sendCompleted() expect(completed) == true } } describe("combineLatestWith") { var combinedSignal: Signal<(Int, Double), NoError>! var observer: Signal.Observer! var otherObserver: Signal.Observer! beforeEach { let (signal, incomingObserver) = Signal.pipe() let (otherSignal, incomingOtherObserver) = Signal.pipe() combinedSignal = signal.combineLatestWith(otherSignal) observer = incomingObserver otherObserver = incomingOtherObserver } it("should forward the latest values from both inputs") { var latest: (Int, Double)? combinedSignal.observeNext { latest = $0 } observer.sendNext(1) expect(latest).to(beNil()) // is there a better way to test tuples? otherObserver.sendNext(1.5) expect(latest?.0) == 1 expect(latest?.1) == 1.5 observer.sendNext(2) expect(latest?.0) == 2 expect(latest?.1) == 1.5 } it("should complete when both inputs have completed") { var completed = false combinedSignal.observeCompleted { completed = true } observer.sendCompleted() expect(completed) == false otherObserver.sendCompleted() expect(completed) == true } } describe("zipWith") { var leftObserver: Signal.Observer! var rightObserver: Signal.Observer! var zipped: Signal<(Int, String), NoError>! beforeEach { let (leftSignal, incomingLeftObserver) = Signal.pipe() let (rightSignal, incomingRightObserver) = Signal.pipe() leftObserver = incomingLeftObserver rightObserver = incomingRightObserver zipped = leftSignal.zipWith(rightSignal) } it("should combine pairs") { var result: [String] = [] zipped.observeNext { (left, right) in result.append("\(left)\(right)") } leftObserver.sendNext(1) leftObserver.sendNext(2) expect(result) == [] rightObserver.sendNext("foo") expect(result) == [ "1foo" ] leftObserver.sendNext(3) rightObserver.sendNext("bar") expect(result) == [ "1foo", "2bar" ] rightObserver.sendNext("buzz") expect(result) == [ "1foo", "2bar", "3buzz" ] rightObserver.sendNext("fuzz") expect(result) == [ "1foo", "2bar", "3buzz" ] leftObserver.sendNext(4) expect(result) == [ "1foo", "2bar", "3buzz", "4fuzz" ] } it("should complete when the shorter signal has completed") { var result: [String] = [] var completed = false zipped.observe { event in switch event { case let .Next(left, right): result.append("\(left)\(right)") case .Completed: completed = true default: break } } expect(completed) == false leftObserver.sendNext(0) leftObserver.sendCompleted() expect(completed) == false expect(result) == [] rightObserver.sendNext("foo") expect(completed) == true expect(result) == [ "0foo" ] } it("should complete when both signal have completed") { var result: [String] = [] var completed = false zipped.observe { event in switch event { case let .Next(left, right): result.append("\(left)\(right)") case .Completed: completed = true default: break } } expect(completed) == false leftObserver.sendNext(0) leftObserver.sendCompleted() expect(completed) == false expect(result) == [] rightObserver.sendCompleted() expect(result) == [ ] } it("should complete and drop unpaired pending values when both signal have completed") { var result: [String] = [] var completed = false zipped.observe { event in switch event { case let .Next(left, right): result.append("\(left)\(right)") case .Completed: completed = true default: break } } expect(completed) == false leftObserver.sendNext(0) leftObserver.sendNext(1) leftObserver.sendNext(2) leftObserver.sendNext(3) leftObserver.sendCompleted() expect(completed) == false expect(result) == [] rightObserver.sendNext("foo") rightObserver.sendNext("bar") rightObserver.sendCompleted() expect(result) == ["0foo", "1bar"] } } describe("materialize") { it("should reify events from the signal") { let (signal, observer) = Signal.pipe() var latestEvent: Event? signal .materialize() .observeNext { latestEvent = $0 } observer.sendNext(2) expect(latestEvent).toNot(beNil()) if let latestEvent = latestEvent { switch latestEvent { case let .Next(value): expect(value) == 2 default: fail() } } observer.sendFailed(TestError.Default) if let latestEvent = latestEvent { switch latestEvent { case .Failed: () default: fail() } } } } describe("dematerialize") { typealias IntEvent = Event var observer: Signal.Observer! var dematerialized: Signal! beforeEach { let (signal, incomingObserver) = Signal.pipe() observer = incomingObserver dematerialized = signal.dematerialize() } it("should send values for Next events") { var result: [Int] = [] dematerialized .assumeNoErrors() .observeNext { result.append($0) } expect(result).to(beEmpty()) observer.sendNext(.Next(2)) expect(result) == [ 2 ] observer.sendNext(.Next(4)) expect(result) == [ 2, 4 ] } it("should error out for Error events") { var errored = false dematerialized.observeFailed { _ in errored = true } expect(errored) == false observer.sendNext(.Failed(TestError.Default)) expect(errored) == true } it("should complete early for Completed events") { var completed = false dematerialized.observeCompleted { completed = true } expect(completed) == false observer.sendNext(IntEvent.Completed) expect(completed) == true } } describe("takeLast") { var observer: Signal.Observer! var lastThree: Signal! beforeEach { let (signal, incomingObserver) = Signal.pipe() observer = incomingObserver lastThree = signal.takeLast(3) } it("should send the last N values upon completion") { var result: [Int] = [] lastThree .assumeNoErrors() .observeNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) observer.sendNext(4) expect(result).to(beEmpty()) observer.sendCompleted() expect(result) == [ 2, 3, 4 ] } it("should send less than N values if not enough were received") { var result: [Int] = [] lastThree .assumeNoErrors() .observeNext { result.append($0) } observer.sendNext(1) observer.sendNext(2) observer.sendCompleted() expect(result) == [ 1, 2 ] } it("should send nothing when errors") { var result: [Int] = [] var errored = false lastThree.observe { event in switch event { case let .Next(value): result.append(value) case .Failed: errored = true default: break } } observer.sendNext(1) observer.sendNext(2) observer.sendNext(3) expect(errored) == false observer.sendFailed(TestError.Default) expect(errored) == true expect(result).to(beEmpty()) } } describe("timeoutWithError") { var testScheduler: TestScheduler! var signal: Signal! var observer: Signal.Observer! beforeEach { testScheduler = TestScheduler() let (baseSignal, incomingObserver) = Signal.pipe() signal = baseSignal.timeoutWithError(TestError.Default, afterInterval: 2, onScheduler: testScheduler) observer = incomingObserver } it("should complete if within the interval") { var completed = false var errored = false signal.observe { event in switch event { case .Completed: completed = true case .Failed: errored = true default: break } } testScheduler.scheduleAfter(1) { observer.sendCompleted() } expect(completed) == false expect(errored) == false testScheduler.run() expect(completed) == true expect(errored) == false } it("should error if not completed before the interval has elapsed") { var completed = false var errored = false signal.observe { event in switch event { case .Completed: completed = true case .Failed: errored = true default: break } } testScheduler.scheduleAfter(3) { observer.sendCompleted() } expect(completed) == false expect(errored) == false testScheduler.run() expect(completed) == false expect(errored) == true } } describe("attempt") { it("should forward original values upon success") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.attempt { _ in return .Success() } var current: Int? signal .assumeNoErrors() .observeNext { value in current = value } for value in 1...5 { observer.sendNext(value) expect(current) == value } } it("should error if an attempt fails") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.attempt { _ in return .Failure(.Default) } var error: TestError? signal.observeFailed { err in error = err } observer.sendNext(42) expect(error) == TestError.Default } } describe("attemptMap") { it("should forward mapped values upon success") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.attemptMap { num -> Result in return .Success(num % 2 == 0) } var even: Bool? signal .assumeNoErrors() .observeNext { value in even = value } observer.sendNext(1) expect(even) == false observer.sendNext(2) expect(even) == true } it("should error if a mapping fails") { let (baseSignal, observer) = Signal.pipe() let signal = baseSignal.attemptMap { _ -> Result in return .Failure(.Default) } var error: TestError? signal.observeFailed { err in error = err } observer.sendNext(42) expect(error) == TestError.Default } } describe("combinePrevious") { var observer: Signal.Observer! let initialValue: Int = 0 var latestValues: (Int, Int)? beforeEach { latestValues = nil let (signal, baseObserver) = Signal.pipe() observer = baseObserver signal.combinePrevious(initialValue).observeNext { latestValues = $0 } } it("should forward the latest value with previous value") { expect(latestValues).to(beNil()) observer.sendNext(1) expect(latestValues?.0) == initialValue expect(latestValues?.1) == 1 observer.sendNext(2) expect(latestValues?.0) == 1 expect(latestValues?.1) == 2 } } describe("combineLatest") { var signalA: Signal! var signalB: Signal! var signalC: Signal! var observerA: Signal.Observer! var observerB: Signal.Observer! var observerC: Signal.Observer! var combinedValues: [Int]? var completed: Bool! beforeEach { combinedValues = nil completed = false let (baseSignalA, baseObserverA) = Signal.pipe() let (baseSignalB, baseObserverB) = Signal.pipe() let (baseSignalC, baseObserverC) = Signal.pipe() signalA = baseSignalA signalB = baseSignalB signalC = baseSignalC observerA = baseObserverA observerB = baseObserverB observerC = baseObserverC } let combineLatestExampleName = "combineLatest examples" sharedExamples(combineLatestExampleName) { it("should forward the latest values from all inputs"){ expect(combinedValues).to(beNil()) observerA.sendNext(0) observerB.sendNext(1) observerC.sendNext(2) expect(combinedValues) == [0, 1, 2] observerA.sendNext(10) expect(combinedValues) == [10, 1, 2] } it("should not forward the latest values before all inputs"){ expect(combinedValues).to(beNil()) observerA.sendNext(0) expect(combinedValues).to(beNil()) observerB.sendNext(1) expect(combinedValues).to(beNil()) observerC.sendNext(2) expect(combinedValues) == [0, 1, 2] } it("should complete when all inputs have completed"){ expect(completed) == false observerA.sendCompleted() observerB.sendCompleted() expect(completed) == false observerC.sendCompleted() expect(completed) == true } } describe("tuple") { beforeEach { combineLatest(signalA, signalB, signalC) .observe { event in switch event { case let .Next(value): combinedValues = [value.0, value.1, value.2] case .Completed: completed = true default: break } } } itBehavesLike(combineLatestExampleName) } describe("sequence") { beforeEach { combineLatest([signalA, signalB, signalC]) .observe { event in switch event { case let .Next(values): combinedValues = values case .Completed: completed = true default: break } } } itBehavesLike(combineLatestExampleName) } } describe("zip") { var signalA: Signal! var signalB: Signal! var signalC: Signal! var observerA: Signal.Observer! var observerB: Signal.Observer! var observerC: Signal.Observer! var zippedValues: [Int]? var completed: Bool! beforeEach { zippedValues = nil completed = false let (baseSignalA, baseObserverA) = Signal.pipe() let (baseSignalB, baseObserverB) = Signal.pipe() let (baseSignalC, baseObserverC) = Signal.pipe() signalA = baseSignalA signalB = baseSignalB signalC = baseSignalC observerA = baseObserverA observerB = baseObserverB observerC = baseObserverC } let zipExampleName = "zip examples" sharedExamples(zipExampleName) { it("should combine all set"){ expect(zippedValues).to(beNil()) observerA.sendNext(0) expect(zippedValues).to(beNil()) observerB.sendNext(1) expect(zippedValues).to(beNil()) observerC.sendNext(2) expect(zippedValues) == [0, 1, 2] observerA.sendNext(10) expect(zippedValues) == [0, 1, 2] observerA.sendNext(20) expect(zippedValues) == [0, 1, 2] observerB.sendNext(11) expect(zippedValues) == [0, 1, 2] observerC.sendNext(12) expect(zippedValues) == [10, 11, 12] } it("should complete when the shorter signal has completed"){ expect(completed) == false observerB.sendNext(1) observerC.sendNext(2) observerB.sendCompleted() observerC.sendCompleted() expect(completed) == false observerA.sendNext(0) expect(completed) == true } } describe("tuple") { beforeEach { zip(signalA, signalB, signalC) .observe { event in switch event { case let .Next(value): zippedValues = [value.0, value.1, value.2] case .Completed: completed = true default: break } } } itBehavesLike(zipExampleName) } describe("sequence") { beforeEach { zip([signalA, signalB, signalC]) .observe { event in switch event { case let .Next(values): zippedValues = values case .Completed: completed = true default: break } } } itBehavesLike(zipExampleName) } describe("log events") { it("should output the correct event without identifier") { let expectations: [String -> Void] = [ { event in expect(event) == "[] Next 1" }, { event in expect(event) == "[] Completed" }, { event in expect(event) == "[] Terminated" }, { event in expect(event) == "[] Disposed" }, ] let logger = TestLogger(expectations: expectations) let (signal, observer) = Signal.pipe() signal .logEvents(logger: logger.logEvent) .observe { _ in } observer.sendNext(1) observer.sendCompleted() } it("should output the correct event with identifier") { let expectations: [String -> Void] = [ { event in expect(event) == "[test.rac] Next 1" }, { event in expect(event) == "[test.rac] Failed Error1" }, { event in expect(event) == "[test.rac] Terminated" }, { event in expect(event) == "[test.rac] Disposed" }, ] let logger = TestLogger(expectations: expectations) let (signal, observer) = Signal.pipe() signal .logEvents(identifier: "test.rac", logger: logger.logEvent) .observe { _ in } observer.sendNext(1) observer.sendFailed(.Error1) } it("should only output the events specified in the `events` parameter") { let expectations: [String -> Void] = [ { event in expect(event) == "[test.rac] Failed Error1" }, ] let logger = TestLogger(expectations: expectations) let (signal, observer) = Signal.pipe() signal .logEvents(identifier: "test.rac", events: [.Failed], logger: logger.logEvent) .observe { _ in } observer.sendNext(1) observer.sendFailed(.Error1) } } } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/TestError.swift ================================================ // // TestError.swift // ReactiveCocoa // // Created by Almas Sapargali on 1/26/15. // Copyright (c) 2015 GitHub. All rights reserved. // import ReactiveCocoa import Result enum TestError: Int { case Default = 0 case Error1 = 1 case Error2 = 2 } extension TestError: ErrorType { } internal extension SignalProducerType { /// Halts if an error is emitted in the receiver signal. /// This is useful in tests to be able to just use `startWithNext` /// in cases where we know that an error won't be emitted. func assumeNoErrors() -> SignalProducer { return self.lift { $0.assumeNoErrors() } } } internal extension SignalType { /// Halts if an error is emitted in the receiver signal. /// This is useful in tests to be able to just use `startWithNext` /// in cases where we know that an error won't be emitted. func assumeNoErrors() -> Signal { return self.mapError { error in fatalError("Unexpected error: \(error)") () } } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/TestLogger.swift ================================================ // // TestLogger.swift // ReactiveCocoa // // Created by Rui Peres on 29/04/2016. // Copyright © 2016 GitHub. All rights reserved. // import Foundation @testable import ReactiveCocoa final class TestLogger { private var expectations: [String -> Void] init(expectations: [String -> Void]) { self.expectations = expectations } } extension TestLogger { func logEvent(identifier: String, event: String, fileName: String, functionName: String, lineNumber: Int) { expectations.removeFirst()("[\(identifier)] \(event)") } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/test-data.json ================================================ [ { "item": 1 }, { "item": 2 }, { "item": 3 } ] ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/LICENSE.md ================================================ **Copyright (c) 2013 Justin Spahr-Summers** 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: Carthage/Checkouts/ReactiveCocoa/script/README.md ================================================ # objc-build-scripts This project is a collection of scripts created with two goals: 1. To standardize how Objective-C projects are bootstrapped after cloning 1. To easily build Objective-C projects on continuous integration servers ## Scripts Right now, there are two important scripts: [`bootstrap`](#bootstrap) and [`cibuild`](#cibuild). Both are Bash scripts, to maximize compatibility and eliminate pesky system configuration issues (like setting up a working Ruby environment). The structure of the scripts on disk is meant to follow that of a typical Ruby project: ``` script/ bootstrap cibuild ``` ### bootstrap This script is responsible for bootstrapping (initializing) your project after it's been checked out. Here, you should install or clone any dependencies that are required for a working build and development environment. By default, the script will verify that [xctool][] is installed, then initialize and update submodules recursively. If any submodules contain `script/bootstrap`, that will be run as well. To check that other tools are installed, you can set the `REQUIRED_TOOLS` environment variable before running `script/bootstrap`, or edit it within the script directly. Note that no installation is performed automatically, though this can always be added within your specific project. ### cibuild This script is responsible for building the project, as you would want it built for continuous integration. This is preferable to putting the logic on the CI server itself, since it ensures that any changes are versioned along with the source. By default, the script will run [`bootstrap`](#bootstrap), look for any Xcode workspace or project in the working directory, then build all targets/schemes (as found by `xcodebuild -list`) using [xctool][]. You can also specify the schemes to build by passing them into the script: ```sh script/cibuild ReactiveCocoa-Mac ReactiveCocoa-iOS ``` As with the `bootstrap` script, there are several environment variables that can be used to customize behavior. They can be set on the command line before invoking the script, or the defaults changed within the script directly. ## Getting Started To add the scripts to your project, read the contents of this repository into a `script` folder: ``` $ git remote add objc-build-scripts https://github.com/jspahrsummers/objc-build-scripts.git $ git fetch objc-build-scripts $ git read-tree --prefix=script/ -u objc-build-scripts/master ``` Then commit the changes, to incorporate the scripts into your own repository's history. You can also freely tweak the scripts for your specific project's needs. To merge in upstream changes later: ``` $ git fetch -p objc-build-scripts $ git merge --ff --squash -Xsubtree=script objc-build-scripts/master ``` [xctool]: https://github.com/facebook/xctool ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/bootstrap ================================================ #!/bin/bash export SCRIPT_DIR=$(dirname "$0") ## ## Bootstrap Process ## main () { local submodules=$(git submodule status) local result=$? if [ "$result" -ne "0" ] then exit $result fi if [ -n "$submodules" ] then echo "*** Updating submodules..." update_submodules fi } bootstrap_submodule () { local bootstrap="script/bootstrap" if [ -e "$bootstrap" ] then echo "*** Bootstrapping $name..." "$bootstrap" >/dev/null else update_submodules fi } update_submodules () { git submodule sync --quiet && git submodule update --init && git submodule foreach --quiet bootstrap_submodule } export -f bootstrap_submodule export -f update_submodules main ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/build ================================================ #!/bin/bash BUILD_DIRECTORY="build" CONFIGURATION=Release if [[ -z $TRAVIS_XCODE_WORKSPACE ]]; then echo "Error: \$TRAVIS_XCODE_WORKSPACE is not set." exit 1 fi if [[ -z $TRAVIS_XCODE_SCHEME ]]; then echo "Error: \$TRAVIS_XCODE_SCHEME is not set!" exit 1 fi if [[ -z $XCODE_ACTION ]]; then echo "Error: \$XCODE_ACTION is not set!" exit 1 fi if [[ -z $XCODE_SDK ]]; then echo "Error: \$XCODE_SDK is not set!" exit 1 fi if [[ -z $XCODE_DESTINATION ]]; then echo "Error: \$XCODE_DESTINATION is not set!" exit 1 fi set -o pipefail xcodebuild $XCODE_ACTION \ -workspace "$TRAVIS_XCODE_WORKSPACE" \ -scheme "$TRAVIS_XCODE_SCHEME" \ -sdk "$XCODE_SDK" \ -destination "$XCODE_DESTINATION" \ -derivedDataPath "${BUILD_DIRECTORY}" \ -configuration $CONFIGURATION \ ENABLE_TESTABILITY=YES \ GCC_GENERATE_DEBUGGING_SYMBOLS=NO \ RUN_CLANG_STATIC_ANALYZER=NO | xcpretty result=$? if [ "$result" -ne 0 ]; then exit $result fi # Compile code in playgrounds if [[ $XCODE_SDK = "macosx" ]]; then echo "SDK is $XCODE_SDK, validating playground..." . script/validate-playground.sh fi ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/cibuild ================================================ #!/bin/bash export SCRIPT_DIR=$(dirname "$0") ## ## Configuration Variables ## SCHEMES="$@" config () { # The workspace to build. # # If not set and no workspace is found, the -workspace flag will not be passed # to `xctool`. # # Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will # take precedence. : ${XCWORKSPACE=$(find_pattern "*.xcworkspace")} # The project to build. # # If not set and no project is found, the -project flag will not be passed # to `xctool`. # # Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will # take precedence. : ${XCODEPROJ=$(find_pattern "*.xcodeproj")} # A bootstrap script to run before building. # # If this file does not exist, it is not considered an error. : ${BOOTSTRAP="$SCRIPT_DIR/bootstrap"} # Extra options to pass to xctool. : ${XCTOOL_OPTIONS="RUN_CLANG_STATIC_ANALYZER=NO"} # A whitespace-separated list of default schemes to build. # # Individual names can be quoted to avoid word splitting. : ${SCHEMES:=$(xcodebuild -list -project "$XCODEPROJ" 2>/dev/null | awk -f "$SCRIPT_DIR/schemes.awk")} # A whitespace-separated list of executables that must be present and locatable. : ${REQUIRED_TOOLS="xctool"} export XCWORKSPACE export XCODEPROJ export BOOTSTRAP export XCTOOL_OPTIONS export SCHEMES export REQUIRED_TOOLS } ## ## Build Process ## main () { config if [ -n "$REQUIRED_TOOLS" ] then echo "*** Checking dependencies..." check_deps fi if [ -f "$BOOTSTRAP" ] then echo "*** Bootstrapping..." "$BOOTSTRAP" || exit $? fi echo "*** The following schemes will be built:" echo "$SCHEMES" | xargs -n 1 echo " " echo echo "$SCHEMES" | xargs -n 1 | ( local status=0 while read scheme do build_scheme "$scheme" || status=1 done exit $status ) } check_deps () { for tool in $REQUIRED_TOOLS do which -s "$tool" if [ "$?" -ne "0" ] then echo "*** Error: $tool not found. Please install it and cibuild again." exit 1 fi done } find_pattern () { ls -d $1 2>/dev/null | head -n 1 } run_xctool () { if [ -n "$XCWORKSPACE" ] then xctool -workspace "$XCWORKSPACE" $XCTOOL_OPTIONS "$@" 2>&1 elif [ -n "$XCODEPROJ" ] then xctool -project "$XCODEPROJ" $XCTOOL_OPTIONS "$@" 2>&1 else echo "*** No workspace or project file found." exit 1 fi } parse_build () { awk -f "$SCRIPT_DIR/xctool.awk" 2>&1 >/dev/null } build_scheme () { local scheme=$1 echo "*** Building and testing $scheme..." echo local sdkflag= local action=test # Determine whether we can run unit tests for this target. run_xctool -scheme "$scheme" run-tests | parse_build local awkstatus=$? if [ "$awkstatus" -eq "1" ] then # SDK not found, try for iphonesimulator. sdkflag="-sdk iphonesimulator" # Determine whether the unit tests will run with iphonesimulator run_xctool $sdkflag -scheme "$scheme" run-tests | parse_build awkstatus=$? if [ "$awkstatus" -ne "0" ] then # Unit tests will not run on iphonesimulator. sdkflag="" fi fi if [ "$awkstatus" -ne "0" ] then # Unit tests aren't supported. action=build fi run_xctool $sdkflag -scheme "$scheme" $action } export -f build_scheme export -f run_xctool export -f parse_build main ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/schemes.awk ================================================ BEGIN { FS = "\n"; } /Schemes:/ { while (getline && $0 != "") { sub(/^ +/, ""); print "'" $0 "'"; } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/targets.awk ================================================ BEGIN { FS = "\n"; } /Targets:/ { while (getline && $0 != "") { if ($0 ~ /Tests/) continue; sub(/^ +/, ""); print "'" $0 "'"; } } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/validate-playground.sh ================================================ #!/bin/bash # Bash script to lint the content of playgrounds # Heavily based on RxSwift's # https://github.com/ReactiveX/RxSwift/blob/master/scripts/validate-playgrounds.sh if [ -z "$BUILD_DIRECTORY" ]; then echo "\$BUILD_DIRECTORY is not set. Are you trying to run \`validate-playgrounds.sh\` without building RAC first?\n" echo "To validate the playground, run \`script/build\`." exit 1 fi PAGES_PATH=${BUILD_DIRECTORY}/Build/Products/${CONFIGURATION}/all-playground-pages.swift cat ReactiveCocoa.playground/Sources/*.swift ReactiveCocoa.playground/Pages/**/*.swift > ${PAGES_PATH} swift -v -D NOT_IN_PLAYGROUND -F ${BUILD_DIRECTORY}/Build/Products/${CONFIGURATION} ${PAGES_PATH} > /dev/null result=$? # Cleanup rm -Rf $BUILD_DIRECTORY exit $result ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/xcodebuild.awk ================================================ # Exit statuses: # # 0 - No errors found. # 1 - Build or test failure. Errors will be logged automatically. # 2 - Untestable target. Retry with the "build" action. BEGIN { status = 0; } { print; fflush(stdout); } /is not valid for Testing/ { exit 2; } /[0-9]+: (error|warning):/ { errors = errors $0 "\n"; } /(TEST|BUILD) FAILED/ { status = 1; } END { if (length(errors) > 0) { print "\n*** All errors:\n" errors; } fflush(stdout); exit status; } ================================================ FILE: Carthage/Checkouts/ReactiveCocoa/script/xctool.awk ================================================ # Exit statuses: # # 0 - No errors found. # 1 - Wrong SDK. Retry with SDK `iphonesimulator`. # 2 - Missing target. BEGIN { status = 0; } { print; } /Testing with the '(.+)' SDK is not yet supported/ { status = 1; } /does not contain a target named/ { status = 2; } END { exit status; } ================================================ FILE: Carthage/Checkouts/Result/.gitignore ================================================ .DS_Store xcuserdata *.xcuserdatad *.xccheckout *.mode* *.pbxuser Carthage/Build .build ================================================ FILE: Carthage/Checkouts/Result/.gitmodules ================================================ [submodule "Carthage/Checkouts/Box"] path = Carthage/Checkouts/Box url = https://github.com/robrix/Box.git ================================================ FILE: Carthage/Checkouts/Result/.swift-version ================================================ DEVELOPMENT-SNAPSHOT-2016-05-31-a ================================================ FILE: Carthage/Checkouts/Result/.travis.yml ================================================ matrix: include: - script: - xcodebuild test -scheme Result-Mac - xcodebuild test -scheme Result-iOS -sdk iphonesimulator - xcodebuild test -scheme Result-tvOS -sdk appletvsimulator - xcodebuild build -scheme Result-watchOS -sdk watchsimulator - pod lib lint env: JOB=Xcode7.3 os: osx osx_image: xcode7.3 language: objective-c - script: - xcodebuild test -scheme Result-Mac - xcodebuild build -scheme Result-iOS -sdk iphonesimulator -destination "name=iPhone 6s" - xcodebuild test -scheme Result-tvOS -sdk appletvsimulator -destination "name=Apple TV 1080p" - xcodebuild build -scheme Result-watchOS -sdk watchsimulator -destination "name=Apple Watch - 38mm" env: JOB=Xcode8 os: osx osx_image: xcode8 language: objective-c - script: - swift build - swift test env: JOB=SPM os: osx osx_image: xcode7.3 language: objective-c install: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" - script: - swift build - swift test env: JOB=Linux sudo: required dist: trusty language: generic install: - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" notifications: email: false ================================================ FILE: Carthage/Checkouts/Result/CONTRIBUTING.md ================================================ We love that you're interested in contributing to this project! To make the process as painless as possible, we have just a couple of guidelines that should make life easier for everyone involved. ## Prefer Pull Requests If you know exactly how to implement the feature being suggested or fix the bug being reported, please open a pull request instead of an issue. Pull requests are easier than patches or inline code blocks for discussing and merging the changes. If you can't make the change yourself, please open an issue after making sure that one isn't already logged. ## Contributing Code Fork this repository, make it awesomer (preferably in a branch named for the topic), send a pull request! All code contributions should match our [coding conventions](https://github.com/github/swift-style-guide). Thanks for contributing! :boom::camel: ================================================ FILE: Carthage/Checkouts/Result/Cartfile ================================================ github "robrix/Box" ================================================ FILE: Carthage/Checkouts/Result/Cartfile.resolved ================================================ github "robrix/Box" "1.2.2" ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/.gitignore ================================================ .DS_Store build xcuserdata *.mode* *.pbxuser *.xcuserdatad *.xccheckout ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box/Box.h ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. /// Project version number for Box. extern double BoxVersionNumber; /// Project version string for Box. extern const unsigned char BoxVersionString[]; ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box/Box.swift ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. /// Wraps a type `T` in a reference type. /// /// Typically this is used to work around limitations of value types (for example, the lack of codegen for recursive value types and type-parameterized enums with >1 case). It is also useful for sharing a single (presumably large) value without copying it. public final class Box: BoxType, Printable { /// Initializes a `Box` with the given value. public init(_ value: T) { self.value = value } /// Constructs a `Box` with the given `value`. public class func unit(value: T) -> Box { return Box(value) } /// The (immutable) value wrapped by the receiver. public let value: T /// Constructs a new Box by transforming `value` by `f`. public func map(@noescape f: T -> U) -> Box { return Box(f(value)) } // MARK: Printable public var description: String { return toString(value) } } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box/BoxType.swift ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. // MARK: BoxType /// The type conformed to by all boxes. public protocol BoxType { /// The type of the wrapped value. typealias Value /// Initializes an intance of the type with a value. init(_ value: Value) /// The wrapped value. var value: Value { get } } /// The type conformed to by mutable boxes. public protocol MutableBoxType: BoxType { /// The (mutable) wrapped value. var value: Value { get set } } // MARK: Equality /// Equality of `BoxType`s of `Equatable` types. /// /// We cannot declare that e.g. `Box` conforms to `Equatable`, so this is a relatively ad hoc definition. public func == (lhs: B, rhs: B) -> Bool { return lhs.value == rhs.value } /// Inequality of `BoxType`s of `Equatable` types. /// /// We cannot declare that e.g. `Box` conforms to `Equatable`, so this is a relatively ad hoc definition. public func != (lhs: B, rhs: B) -> Bool { return lhs.value != rhs.value } // MARK: Map /// Maps the value of a box into a new box. public func map(v: B, @noescape f: B.Value -> C.Value) -> C { return C(f(v.value)) } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier com.antitypical.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 1.2.1 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright Copyright © 2014 Rob Rix. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box/MutableBox.swift ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. /// Wraps a type `T` in a mutable reference type. /// /// While this, like `Box` could be used to work around limitations of value types, it is much more useful for sharing a single mutable value such that mutations are shared. /// /// As with all mutable state, this should be used carefully, for example as an optimization, rather than a default design choice. Most of the time, `Box` will suffice where any `BoxType` is needed. public final class MutableBox: MutableBoxType, Printable { /// Initializes a `MutableBox` with the given value. public init(_ value: T) { self.value = value } /// The (mutable) value wrapped by the receiver. public var value: T /// Constructs a new MutableBox by transforming `value` by `f`. public func map(@noescape f: T -> U) -> MutableBox { return MutableBox(f(value)) } // MARK: Printable public var description: String { return toString(value) } } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ D470AC3D19E86128003DA6C6 /* Box.h in Headers */ = {isa = PBXBuildFile; fileRef = D470AC3C19E86128003DA6C6 /* Box.h */; settings = {ATTRIBUTES = (Public, ); }; }; D470AC4319E86128003DA6C6 /* Box.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D470AC3719E86128003DA6C6 /* Box.framework */; }; D470AC4A19E86128003DA6C6 /* BoxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC4919E86128003DA6C6 /* BoxTests.swift */; }; D470AC5619E861E2003DA6C6 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5519E861E2003DA6C6 /* Box.swift */; }; D470AC5819E86790003DA6C6 /* BoxType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5719E86790003DA6C6 /* BoxType.swift */; }; D470AC5A19E868D3003DA6C6 /* MutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5919E868D3003DA6C6 /* MutableBox.swift */; }; D470AC5C19E86A2E003DA6C6 /* MutableBoxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5B19E86A2E003DA6C6 /* MutableBoxTests.swift */; }; D470AC5E19E86B2C003DA6C6 /* BoxTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5D19E86B2C003DA6C6 /* BoxTypeTests.swift */; }; F8BB81DE1A939B67001AA352 /* Box.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8BB81D31A939B66001AA352 /* Box.framework */; }; F8BB81EC1A939C03001AA352 /* Box.h in Headers */ = {isa = PBXBuildFile; fileRef = D470AC3C19E86128003DA6C6 /* Box.h */; settings = {ATTRIBUTES = (Public, ); }; }; F8BB81ED1A939C09001AA352 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5519E861E2003DA6C6 /* Box.swift */; }; F8BB81EE1A939C0D001AA352 /* BoxType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5719E86790003DA6C6 /* BoxType.swift */; }; F8BB81EF1A939C0D001AA352 /* MutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5919E868D3003DA6C6 /* MutableBox.swift */; }; F8BB81F01A939C1A001AA352 /* BoxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC4919E86128003DA6C6 /* BoxTests.swift */; }; F8BB81F11A939C1A001AA352 /* BoxTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5D19E86B2C003DA6C6 /* BoxTypeTests.swift */; }; F8BB81F21A939C1A001AA352 /* MutableBoxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D470AC5B19E86A2E003DA6C6 /* MutableBoxTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ D470AC4419E86128003DA6C6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D470AC2E19E86128003DA6C6 /* Project object */; proxyType = 1; remoteGlobalIDString = D470AC3619E86128003DA6C6; remoteInfo = Box; }; F8BB81DF1A939B67001AA352 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D470AC2E19E86128003DA6C6 /* Project object */; proxyType = 1; remoteGlobalIDString = F8BB81D21A939B66001AA352; remoteInfo = "Box-iOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ D470AC3719E86128003DA6C6 /* Box.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Box.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D470AC3B19E86128003DA6C6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D470AC3C19E86128003DA6C6 /* Box.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Box.h; sourceTree = ""; }; D470AC4219E86128003DA6C6 /* Box-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Box-MacTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D470AC4819E86128003DA6C6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D470AC4919E86128003DA6C6 /* BoxTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoxTests.swift; sourceTree = ""; }; D470AC5519E861E2003DA6C6 /* Box.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Box.swift; sourceTree = ""; }; D470AC5719E86790003DA6C6 /* BoxType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoxType.swift; sourceTree = ""; }; D470AC5919E868D3003DA6C6 /* MutableBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MutableBox.swift; sourceTree = ""; }; D470AC5B19E86A2E003DA6C6 /* MutableBoxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MutableBoxTests.swift; sourceTree = ""; }; D470AC5D19E86B2C003DA6C6 /* BoxTypeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoxTypeTests.swift; sourceTree = ""; }; F8BB81D31A939B66001AA352 /* Box.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Box.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F8BB81DD1A939B67001AA352 /* Box-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Box-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ D470AC3319E86128003DA6C6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D470AC3F19E86128003DA6C6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D470AC4319E86128003DA6C6 /* Box.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81CF1A939B66001AA352 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81DA1A939B67001AA352 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F8BB81DE1A939B67001AA352 /* Box.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ D470AC2D19E86128003DA6C6 = { isa = PBXGroup; children = ( D470AC3919E86128003DA6C6 /* Box */, D470AC4619E86128003DA6C6 /* BoxTests */, D470AC3819E86128003DA6C6 /* Products */, ); sourceTree = ""; }; D470AC3819E86128003DA6C6 /* Products */ = { isa = PBXGroup; children = ( D470AC3719E86128003DA6C6 /* Box.framework */, D470AC4219E86128003DA6C6 /* Box-MacTests.xctest */, F8BB81D31A939B66001AA352 /* Box.framework */, F8BB81DD1A939B67001AA352 /* Box-iOSTests.xctest */, ); name = Products; sourceTree = ""; }; D470AC3919E86128003DA6C6 /* Box */ = { isa = PBXGroup; children = ( D470AC3C19E86128003DA6C6 /* Box.h */, D470AC5519E861E2003DA6C6 /* Box.swift */, D470AC5719E86790003DA6C6 /* BoxType.swift */, D470AC5919E868D3003DA6C6 /* MutableBox.swift */, D470AC3A19E86128003DA6C6 /* Supporting Files */, ); path = Box; sourceTree = ""; }; D470AC3A19E86128003DA6C6 /* Supporting Files */ = { isa = PBXGroup; children = ( D470AC3B19E86128003DA6C6 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; D470AC4619E86128003DA6C6 /* BoxTests */ = { isa = PBXGroup; children = ( D470AC4919E86128003DA6C6 /* BoxTests.swift */, D470AC5D19E86B2C003DA6C6 /* BoxTypeTests.swift */, D470AC5B19E86A2E003DA6C6 /* MutableBoxTests.swift */, D470AC4719E86128003DA6C6 /* Supporting Files */, ); path = BoxTests; sourceTree = ""; }; D470AC4719E86128003DA6C6 /* Supporting Files */ = { isa = PBXGroup; children = ( D470AC4819E86128003DA6C6 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ D470AC3419E86128003DA6C6 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D470AC3D19E86128003DA6C6 /* Box.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81D01A939B66001AA352 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F8BB81EC1A939C03001AA352 /* Box.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ D470AC3619E86128003DA6C6 /* Box-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = D470AC4D19E86128003DA6C6 /* Build configuration list for PBXNativeTarget "Box-Mac" */; buildPhases = ( D470AC3219E86128003DA6C6 /* Sources */, D470AC3319E86128003DA6C6 /* Frameworks */, D470AC3419E86128003DA6C6 /* Headers */, D470AC3519E86128003DA6C6 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Box-Mac"; productName = Box; productReference = D470AC3719E86128003DA6C6 /* Box.framework */; productType = "com.apple.product-type.framework"; }; D470AC4119E86128003DA6C6 /* Box-MacTests */ = { isa = PBXNativeTarget; buildConfigurationList = D470AC5019E86128003DA6C6 /* Build configuration list for PBXNativeTarget "Box-MacTests" */; buildPhases = ( D470AC3E19E86128003DA6C6 /* Sources */, D470AC3F19E86128003DA6C6 /* Frameworks */, D470AC4019E86128003DA6C6 /* Resources */, ); buildRules = ( ); dependencies = ( D470AC4519E86128003DA6C6 /* PBXTargetDependency */, ); name = "Box-MacTests"; productName = BoxTests; productReference = D470AC4219E86128003DA6C6 /* Box-MacTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; F8BB81D21A939B66001AA352 /* Box-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = F8BB81E61A939B67001AA352 /* Build configuration list for PBXNativeTarget "Box-iOS" */; buildPhases = ( F8BB81CE1A939B66001AA352 /* Sources */, F8BB81CF1A939B66001AA352 /* Frameworks */, F8BB81D01A939B66001AA352 /* Headers */, F8BB81D11A939B66001AA352 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Box-iOS"; productName = Box; productReference = F8BB81D31A939B66001AA352 /* Box.framework */; productType = "com.apple.product-type.framework"; }; F8BB81DC1A939B67001AA352 /* Box-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = F8BB81E91A939B67001AA352 /* Build configuration list for PBXNativeTarget "Box-iOSTests" */; buildPhases = ( F8BB81D91A939B67001AA352 /* Sources */, F8BB81DA1A939B67001AA352 /* Frameworks */, F8BB81DB1A939B67001AA352 /* Resources */, ); buildRules = ( ); dependencies = ( F8BB81E01A939B67001AA352 /* PBXTargetDependency */, ); name = "Box-iOSTests"; productName = "Box-iOSTests"; productReference = F8BB81DD1A939B67001AA352 /* Box-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ D470AC2E19E86128003DA6C6 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0610; ORGANIZATIONNAME = "Rob Rix"; TargetAttributes = { D470AC3619E86128003DA6C6 = { CreatedOnToolsVersion = 6.1; }; D470AC4119E86128003DA6C6 = { CreatedOnToolsVersion = 6.1; }; F8BB81D21A939B66001AA352 = { CreatedOnToolsVersion = 6.3; }; F8BB81DC1A939B67001AA352 = { CreatedOnToolsVersion = 6.3; }; }; }; buildConfigurationList = D470AC3119E86128003DA6C6 /* Build configuration list for PBXProject "Box" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = D470AC2D19E86128003DA6C6; productRefGroup = D470AC3819E86128003DA6C6 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D470AC3619E86128003DA6C6 /* Box-Mac */, D470AC4119E86128003DA6C6 /* Box-MacTests */, F8BB81D21A939B66001AA352 /* Box-iOS */, F8BB81DC1A939B67001AA352 /* Box-iOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ D470AC3519E86128003DA6C6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D470AC4019E86128003DA6C6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81D11A939B66001AA352 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81DB1A939B67001AA352 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ D470AC3219E86128003DA6C6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D470AC5619E861E2003DA6C6 /* Box.swift in Sources */, D470AC5819E86790003DA6C6 /* BoxType.swift in Sources */, D470AC5A19E868D3003DA6C6 /* MutableBox.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D470AC3E19E86128003DA6C6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D470AC5C19E86A2E003DA6C6 /* MutableBoxTests.swift in Sources */, D470AC4A19E86128003DA6C6 /* BoxTests.swift in Sources */, D470AC5E19E86B2C003DA6C6 /* BoxTypeTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81CE1A939B66001AA352 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F8BB81ED1A939C09001AA352 /* Box.swift in Sources */, F8BB81EE1A939C0D001AA352 /* BoxType.swift in Sources */, F8BB81EF1A939C0D001AA352 /* MutableBox.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F8BB81D91A939B67001AA352 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F8BB81F01A939C1A001AA352 /* BoxTests.swift in Sources */, F8BB81F11A939C1A001AA352 /* BoxTypeTests.swift in Sources */, F8BB81F21A939C1A001AA352 /* MutableBoxTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ D470AC4519E86128003DA6C6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D470AC3619E86128003DA6C6 /* Box-Mac */; targetProxy = D470AC4419E86128003DA6C6 /* PBXContainerItemProxy */; }; F8BB81E01A939B67001AA352 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = F8BB81D21A939B66001AA352 /* Box-iOS */; targetProxy = F8BB81DF1A939B67001AA352 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ D470AC4B19E86128003DA6C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; D470AC4C19E86128003DA6C6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; D470AC4E19E86128003DA6C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Box/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Box; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VALID_ARCHS = x86_64; }; name = Debug; }; D470AC4F19E86128003DA6C6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Box/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Box; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; D470AC5119E86128003DA6C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = BoxTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; D470AC5219E86128003DA6C6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = BoxTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; F8BB81E71A939B67001AA352 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "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"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = "$(SRCROOT)/Box/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Box; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; F8BB81E81A939B67001AA352 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Box/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Box; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; F8BB81EA1A939B67001AA352 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEBUG_INFORMATION_FORMAT = dwarf; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = BoxTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; }; name = Debug; }; F8BB81EB1A939B67001AA352 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = BoxTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ D470AC3119E86128003DA6C6 /* Build configuration list for PBXProject "Box" */ = { isa = XCConfigurationList; buildConfigurations = ( D470AC4B19E86128003DA6C6 /* Debug */, D470AC4C19E86128003DA6C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D470AC4D19E86128003DA6C6 /* Build configuration list for PBXNativeTarget "Box-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( D470AC4E19E86128003DA6C6 /* Debug */, D470AC4F19E86128003DA6C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D470AC5019E86128003DA6C6 /* Build configuration list for PBXNativeTarget "Box-MacTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D470AC5119E86128003DA6C6 /* Debug */, D470AC5219E86128003DA6C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F8BB81E61A939B67001AA352 /* Build configuration list for PBXNativeTarget "Box-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( F8BB81E71A939B67001AA352 /* Debug */, F8BB81E81A939B67001AA352 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F8BB81E91A939B67001AA352 /* Build configuration list for PBXNativeTarget "Box-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( F8BB81EA1A939B67001AA352 /* Debug */, F8BB81EB1A939B67001AA352 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = D470AC2E19E86128003DA6C6 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box.xcodeproj/xcshareddata/xcschemes/Box-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/Box.xcodeproj/xcshareddata/xcschemes/Box-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/BoxTests/BoxTests.swift ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. import Box import XCTest class BoxTests: XCTestCase { func testBox() { let box = Box(1) XCTAssertEqual(box.value, 1) } } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/BoxTests/BoxTypeTests.swift ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. import Box import XCTest class BoxTypeTests: XCTestCase { func testEquality() { let (a, b, c) = (Box(1), Box(1), Box(2)) XCTAssertTrue(a == b) XCTAssertFalse(b == c) } func testInequality() { let (a, b, c) = (Box(1), Box(1), Box(2)) XCTAssertFalse(a != b) XCTAssertTrue(b != c) } func testMap() { let a = Box(1) let b: Box = map(a, toString) XCTAssertEqual(b.value, "1") } } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/BoxTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier com.antitypical.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/BoxTests/MutableBoxTests.swift ================================================ // Copyright (c) 2014 Rob Rix. All rights reserved. import Box import XCTest class MutableBoxTests: XCTestCase { func testBox() { let box = MutableBox(1) XCTAssertEqual(box.value, 1) } func testMutation() { let box = MutableBox(1) box.value = 2 XCTAssertEqual(box.value, 2) } } ================================================ FILE: Carthage/Checkouts/Result/Carthage/Checkouts/Box/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Rob Rix 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: Carthage/Checkouts/Result/Carthage/Checkouts/Box/README.md ================================================ # Box This is a Swift microframework which implements `Box` & `MutableBox`, with implementations of `==`/`!=` where `T`: `Equatable`. `Box` is typically used to work around limitations of value types: - recursive `struct`s/`enum`s - type-parameterized `enum`s where more than one `case` has a value ## Use Wrapping & unwrapping a `Box`: ```swift // Wrap: let box = Box(1) // Unwrap: let value = box.value ``` Changing the value of a `MutableBox`: ```swift // Mutation: let mutableBox = MutableBox(1) mutableBox.value = 2 ``` Building a recursive value type: ```swift struct BinaryTree { let value: Int let left: Box? let right: Box? } ``` Building a parameterized `enum`: ```swift enum Result { case Success(Box) case Failure(NSError) } ``` See the sources for more details. ## Integration 1. Add this repo as a submodule in e.g. `External/Box`: git submodule add https://github.com/robrix/Box.git External/Box 2. Drag `Box.xcodeproj` into your `.xcworkspace`/`.xcodeproj`. 3. Add `Box.framework` to your target’s `Link Binary With Libraries` build phase. 4. You may also want to add a `Copy Files` phase which copies `Box.framework` (and any other framework dependencies you need) into your bundle’s `Frameworks` directory. If your target is a framework, you may instead want the client app to include `Box.framework`. ================================================ FILE: Carthage/Checkouts/Result/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Rob Rix 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: Carthage/Checkouts/Result/Package.swift ================================================ import PackageDescription let package = Package( name: "Result", targets: [ Target( name: "Result" ) ] ) ================================================ FILE: Carthage/Checkouts/Result/README.md ================================================ # Result [![Build Status](https://travis-ci.org/antitypical/Result.svg?branch=master)](https://travis-ci.org/antitypical/Result) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![CocoaPods](https://img.shields.io/cocoapods/v/Result.svg)](https://cocoapods.org/) [![Reference Status](https://www.versioneye.com/objective-c/result/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/result/references) This is a Swift µframework providing `Result`. `Result` values are either successful (wrapping `Value`) or failed (wrapping `Error`). This is similar to Swift’s native `Optional` type: `Success` is like `Some`, and `Failure` is like `None` except with an associated `ErrorType` value. The addition of an associated `ErrorType` allows errors to be passed along for logging or displaying to the user. Using this µframework instead of rolling your own `Result` type allows you to easily interface with other frameworks that also use `Result`. ## Use Use `Result` whenever an operation has the possibility of failure. Consider the following example of a function that tries to extract a `String` for a given key from a JSON `Dictionary`. ```swift typealias JSONObject = [String:AnyObject] enum JSONError : ErrorType { case NoSuchKey(String) case TypeMismatch } func stringForKey(json: JSONObject, key: String) -> Result { guard let value = json[key] else { return .Failure(.NoSuchKey(key)) } if let value = value as? String { return .Success(value) } else { return .Failure(.TypeMismatch) } } ``` This function provides a more robust wrapper around the default subscripting provided by `Dictionary`. Rather than return `AnyObject?`, it returns a `Result` that either contains the `String` value for the given key, or an `ErrorType` detailing what went wrong. One simple way to handle a `Result` is to deconstruct it using a `switch` statement. ```swift switch stringForKey(json, key: "email") { case let .Success(email): print("The email is \(email)") case let .Failure(JSONError.NoSuchKey(key)): print("\(key) is not a valid key") case .Failure(JSONError.TypeMismatch): print("Didn't have the right type") } ``` Using a `switch` statement allows powerful pattern matching, and ensures all possible results are covered. Swift 2.0 offers new ways to deconstruct enums like the `if-case` statement, but be wary as such methods do not ensure errors are handled. Other methods available for processing `Result` are detailed in the [API documentation](http://cocoadocs.org/docsets/Result/). ## Result vs. Throws Swift 2.0 introduces error handling via throwing and catching `ErrorType`. `Result` accomplishes the same goal by encapsulating the result instead of hijacking control flow. The `Result` abstraction enables powerful functionality such as `map` and `flatMap`, making `Result` more composable than `throw`. Since dealing with APIs that throw is common, you can convert such functions into a `Result` by using the `materialize` method. Conversely, a `Result` can be used to throw an error by calling `dematerialize`. ## Higher Order Functions `map` and `flatMap` operate the same as `Optional.map` and `Optional.flatMap` except they apply to `Result`. `map` transforms a `Result` into a `Result` of a new type. It does this by taking a function that transforms the `Value` type into a new value. This transformation is only applied in the case of a `Success`. In the case of a `Failure`, the associated error is re-wrapped in the new `Result`. ```swift // transforms a Result to a Result let idResult = intForKey(json, key:"id").map { id in String(id) } ``` Here, the final result is either the id as a `String`, or carries over the `.Failure` from the previous result. `flatMap` is similar to `map` in that in transforms the `Result` into another `Result`. However, the function passed into `flatMap` must return a `Result`. An in depth discussion of `map` and `flatMap` is beyond the scope of this documentation. If you would like a deeper understanding, read about functors and monads. This article is a good place to [start](http://www.javiersoto.me/post/106875422394). ## Integration 1. Add this repository as a submodule and/or [add it to your Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile) if you’re using [carthage](https://github.com/Carthage/Carthage/) to manage your dependencies. 2. Drag `Result.xcodeproj` into your project or workspace. 3. Link your target against `Result.framework`. 4. Application targets should ensure that the framework gets copied into their application bundle. (Framework targets should instead require the application linking them to include Result.) ================================================ FILE: Carthage/Checkouts/Result/Result/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 2.1.3 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright Copyright © 2015 Rob Rix. All rights reserved. NSPrincipalClass ================================================ FILE: Carthage/Checkouts/Result/Result/Result.h ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. /// Project version number for Result. extern double ResultVersionNumber; /// Project version string for Result. extern const unsigned char ResultVersionString[]; ================================================ FILE: Carthage/Checkouts/Result/Result/Result.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. /// An enum representing either a failure with an explanatory error, or a success with a result value. public enum Result: ResultType, CustomStringConvertible, CustomDebugStringConvertible { case Success(T) case Failure(Error) // MARK: Constructors /// Constructs a success wrapping a `value`. public init(value: T) { self = .Success(value) } /// Constructs a failure wrapping an `error`. public init(error: Error) { self = .Failure(error) } /// Constructs a result from an Optional, failing with `Error` if `nil`. #if swift(>=3) public init(_ value: T?, failWith: @autoclosure () -> Error) { self = value.map(Result.Success) ?? .Failure(failWith()) } #else public init(_ value: T?, @autoclosure failWith: () -> Error) { self = value.map(Result.Success) ?? .Failure(failWith()) } #endif /// Constructs a result from a function that uses `throw`, failing with `Error` if throws. #if swift(>=3) public init(_ f: @autoclosure () throws -> T) { self.init(attempt: f) } #else public init(@autoclosure _ f: () throws -> T) { self.init(attempt: f) } #endif /// Constructs a result from a function that uses `throw`, failing with `Error` if throws. #if swift(>=3) public init(attempt f: @noescape () throws -> T) { do { self = .Success(try f()) } catch { self = .Failure(error as! Error) } } #else public init(@noescape attempt f: () throws -> T) { do { self = .Success(try f()) } catch { self = .Failure(error as! Error) } } #endif // MARK: Deconstruction /// Returns the value from `Success` Results or `throw`s the error. public func dematerialize() throws -> T { switch self { case let .Success(value): return value case let .Failure(error): throw error } } /// Case analysis for Result. /// /// Returns the value produced by applying `ifFailure` to `Failure` Results, or `ifSuccess` to `Success` Results. #if swift(>=3) public func analysis(ifSuccess: @noescape (T) -> Result, ifFailure: @noescape (Error) -> Result) -> Result { switch self { case let .Success(value): return ifSuccess(value) case let .Failure(value): return ifFailure(value) } } #else public func analysis(@noescape ifSuccess ifSuccess: T -> Result, @noescape ifFailure: Error -> Result) -> Result { switch self { case let .Success(value): return ifSuccess(value) case let .Failure(value): return ifFailure(value) } } #endif // MARK: Errors /// The domain for errors constructed by Result. public static var errorDomain: String { return "com.antitypical.Result" } /// The userInfo key for source functions in errors constructed by Result. public static var functionKey: String { return "\(errorDomain).function" } /// The userInfo key for source file paths in errors constructed by Result. public static var fileKey: String { return "\(errorDomain).file" } /// The userInfo key for source file line numbers in errors constructed by Result. public static var lineKey: String { return "\(errorDomain).line" } #if os(Linux) private typealias UserInfoType = Any #else private typealias UserInfoType = AnyObject #endif /// Constructs an error. #if swift(>=3) public static func error(_ message: String? = nil, function: String = #function, file: String = #file, line: Int = #line) -> NSError { var userInfo: [String: UserInfoType] = [ functionKey: function, fileKey: file, lineKey: line, ] if let message = message { userInfo[NSLocalizedDescriptionKey] = message } return NSError(domain: errorDomain, code: 0, userInfo: userInfo) } #else public static func error(message: String? = nil, function: String = #function, file: String = #file, line: Int = #line) -> NSError { var userInfo: [String: UserInfoType] = [ functionKey: function, fileKey: file, lineKey: line, ] if let message = message { userInfo[NSLocalizedDescriptionKey] = message } return NSError(domain: errorDomain, code: 0, userInfo: userInfo) } #endif // MARK: CustomStringConvertible public var description: String { return analysis( ifSuccess: { ".Success(\($0))" }, ifFailure: { ".Failure(\($0))" }) } // MARK: CustomDebugStringConvertible public var debugDescription: String { return description } } // MARK: - Derive result from failable closure #if swift(>=3) public func materialize(_ f: @noescape () throws -> T) -> Result { return materialize(try f()) } public func materialize(_ f: @autoclosure () throws -> T) -> Result { do { return .Success(try f()) } catch let error as NSError { return .Failure(error) } } #else public func materialize(@noescape f: () throws -> T) -> Result { return materialize(try f()) } public func materialize(@autoclosure f: () throws -> T) -> Result { do { return .Success(try f()) } catch let error as NSError { return .Failure(error) } } #endif // MARK: - Cocoa API conveniences #if !os(Linux) /// Constructs a Result with the result of calling `try` with an error pointer. /// /// This is convenient for wrapping Cocoa API which returns an object or `nil` + an error, by reference. e.g.: /// /// Result.try { NSData(contentsOfURL: URL, options: .DataReadingMapped, error: $0) } #if swift(>=3) public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, `try`: (NSErrorPointer) -> T?) -> Result { var error: NSError? return `try`(&error).map(Result.Success) ?? .Failure(error ?? Result.error(function: function, file: file, line: line)) } #else public func `try`(function: String = #function, file: String = #file, line: Int = #line, `try`: NSErrorPointer -> T?) -> Result { var error: NSError? return `try`(&error).map(Result.Success) ?? .Failure(error ?? Result.error(function: function, file: file, line: line)) } #endif /// Constructs a Result with the result of calling `try` with an error pointer. /// /// This is convenient for wrapping Cocoa API which returns a `Bool` + an error, by reference. e.g.: /// /// Result.try { NSFileManager.defaultManager().removeItemAtURL(URL, error: $0) } #if swift(>=3) public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, `try`: (NSErrorPointer) -> Bool) -> Result<(), NSError> { var error: NSError? return `try`(&error) ? .Success(()) : .Failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line)) } #else public func `try`(function: String = #function, file: String = #file, line: Int = #line, `try`: NSErrorPointer -> Bool) -> Result<(), NSError> { var error: NSError? return `try`(&error) ? .Success(()) : .Failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line)) } #endif #endif // MARK: - ErrorTypeConvertible conformance extension NSError: ErrorTypeConvertible { #if swift(>=3) public static func errorFromErrorType(_ error: ResultErrorType) -> Self { func cast(_ error: ResultErrorType) -> T { return error as! T } return cast(error) } #else public static func errorFromErrorType(error: ResultErrorType) -> Self { func cast(error: ResultErrorType) -> T { return error as! T } return cast(error) } #endif } // MARK: - /// An “error” that is impossible to construct. /// /// This can be used to describe `Result`s where failures will never /// be generated. For example, `Result` describes a result that /// contains an `Int`eger and is guaranteed never to be a `Failure`. public enum NoError: ResultErrorType { } import Foundation ================================================ FILE: Carthage/Checkouts/Result/Result/ResultType.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. #if swift(>=3.0) public typealias ResultErrorType = ErrorProtocol #else public typealias ResultErrorType = ErrorType #endif /// A type that can represent either failure with an error or success with a result value. public protocol ResultType { associatedtype Value associatedtype Error: ResultErrorType /// Constructs a successful result wrapping a `value`. init(value: Value) /// Constructs a failed result wrapping an `error`. init(error: Error) /// Case analysis for ResultType. /// /// Returns the value produced by appliying `ifFailure` to the error if self represents a failure, or `ifSuccess` to the result value if self represents a success. #if swift(>=3) func analysis(ifSuccess: @noescape (Value) -> U, ifFailure: @noescape (Error) -> U) -> U #else func analysis(@noescape ifSuccess ifSuccess: Value -> U, @noescape ifFailure: Error -> U) -> U #endif /// Returns the value if self represents a success, `nil` otherwise. /// /// A default implementation is provided by a protocol extension. Conforming types may specialize it. var value: Value? { get } /// Returns the error if self represents a failure, `nil` otherwise. /// /// A default implementation is provided by a protocol extension. Conforming types may specialize it. var error: Error? { get } } public extension ResultType { /// Returns the value if self represents a success, `nil` otherwise. public var value: Value? { return analysis(ifSuccess: { $0 }, ifFailure: { _ in nil }) } /// Returns the error if self represents a failure, `nil` otherwise. public var error: Error? { return analysis(ifSuccess: { _ in nil }, ifFailure: { $0 }) } /// Returns a new Result by mapping `Success`es’ values using `transform`, or re-wrapping `Failure`s’ errors. #if swift(>=3) @warn_unused_result public func map(_ transform: @noescape (Value) -> U) -> Result { return flatMap { .Success(transform($0)) } } #else @warn_unused_result public func map(@noescape transform: Value -> U) -> Result { return flatMap { .Success(transform($0)) } } #endif /// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors. #if swift(>=3) @warn_unused_result public func flatMap(_ transform: @noescape (Value) -> Result) -> Result { return analysis( ifSuccess: transform, ifFailure: Result.Failure) } #else @warn_unused_result public func flatMap(@noescape transform: Value -> Result) -> Result { return analysis( ifSuccess: transform, ifFailure: Result.Failure) } #endif /// Returns a new Result by mapping `Failure`'s values using `transform`, or re-wrapping `Success`es’ values. #if swift(>=3) @warn_unused_result public func mapError(_ transform: @noescape (Error) -> Error2) -> Result { return flatMapError { .Failure(transform($0)) } } #else @warn_unused_result public func mapError(@noescape transform: Error -> Error2) -> Result { return flatMapError { .Failure(transform($0)) } } #endif /// Returns the result of applying `transform` to `Failure`’s errors, or re-wrapping `Success`es’ values. #if swift(>=3) @warn_unused_result public func flatMapError(_ transform: @noescape (Error) -> Result) -> Result { return analysis( ifSuccess: Result.Success, ifFailure: transform) } #else @warn_unused_result public func flatMapError(@noescape transform: Error -> Result) -> Result { return analysis( ifSuccess: Result.Success, ifFailure: transform) } #endif } public extension ResultType { // MARK: Higher-order functions /// Returns `self.value` if this result is a .Success, or the given value otherwise. Equivalent with `??` #if swift(>=3) public func recover(_ value: @autoclosure () -> Value) -> Value { return self.value ?? value() } #else public func recover(@autoclosure value: () -> Value) -> Value { return self.value ?? value() } #endif /// Returns this result if it is a .Success, or the given result otherwise. Equivalent with `??` #if swift(>=3) public func recoverWith(_ result: @autoclosure () -> Self) -> Self { return analysis( ifSuccess: { _ in self }, ifFailure: { _ in result() }) } #else public func recoverWith(@autoclosure result: () -> Self) -> Self { return analysis( ifSuccess: { _ in self }, ifFailure: { _ in result() }) } #endif } /// Protocol used to constrain `tryMap` to `Result`s with compatible `Error`s. public protocol ErrorTypeConvertible: ResultErrorType { #if swift(>=3) static func errorFromErrorType(_ error: ResultErrorType) -> Self #else static func errorFromErrorType(error: ResultErrorType) -> Self #endif } public extension ResultType where Error: ErrorTypeConvertible { /// Returns the result of applying `transform` to `Success`es’ values, or wrapping thrown errors. #if swift(>=3) @warn_unused_result public func tryMap(_ transform: @noescape (Value) throws -> U) -> Result { return flatMap { value in do { return .Success(try transform(value)) } catch { let convertedError = Error.errorFromErrorType(error) // Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321 return .Failure(convertedError) } } } #else @warn_unused_result public func tryMap(@noescape transform: Value throws -> U) -> Result { return flatMap { value in do { return .Success(try transform(value)) } catch { let convertedError = Error.errorFromErrorType(error) // Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321 return .Failure(convertedError) } } } #endif } // MARK: - Operators infix operator &&& { /// Same associativity as &&. associativity left /// Same precedence as &&. precedence 120 } /// Returns a Result with a tuple of `left` and `right` values if both are `Success`es, or re-wrapping the error of the earlier `Failure`. #if swift(>=3) public func &&& (left: L, right: @autoclosure () -> R) -> Result<(L.Value, R.Value), L.Error> { return left.flatMap { left in right().map { right in (left, right) } } } #else public func &&& (left: L, @autoclosure right: () -> R) -> Result<(L.Value, R.Value), L.Error> { return left.flatMap { left in right().map { right in (left, right) } } } #endif infix operator >>- { // Left-associativity so that chaining works like you’d expect, and for consistency with Haskell, Runes, swiftz, etc. associativity left // Higher precedence than function application, but lower than function composition. precedence 100 } /// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors. /// /// This is a synonym for `flatMap`. #if swift(>=3) public func >>- (result: T, transform: @noescape (T.Value) -> Result) -> Result { return result.flatMap(transform) } #else public func >>- (result: T, @noescape transform: T.Value -> Result) -> Result { return result.flatMap(transform) } #endif /// Returns `true` if `left` and `right` are both `Success`es and their values are equal, or if `left` and `right` are both `Failure`s and their errors are equal. public func == (left: T, right: T) -> Bool { if let left = left.value, right = right.value { return left == right } else if let left = left.error, right = right.error { return left == right } return false } /// Returns `true` if `left` and `right` represent different cases, or if they represent the same case but different values. public func != (left: T, right: T) -> Bool { return !(left == right) } /// Returns the value of `left` if it is a `Success`, or `right` otherwise. Short-circuits. #if swift(>=3) public func ?? (left: T, right: @autoclosure () -> T.Value) -> T.Value { return left.recover(right()) } #else public func ?? (left: T, @autoclosure right: () -> T.Value) -> T.Value { return left.recover(right()) } #endif /// Returns `left` if it is a `Success`es, or `right` otherwise. Short-circuits. #if swift(>=3) public func ?? (left: T, right: @autoclosure () -> T) -> T { return left.recoverWith(right()) } #else public func ?? (left: T, @autoclosure right: () -> T) -> T { return left.recoverWith(right()) } #endif ================================================ FILE: Carthage/Checkouts/Result/Result.podspec ================================================ Pod::Spec.new do |s| s.name = 'Result' s.version = '2.1.3' s.summary = 'Swift type modelling the success/failure of arbitrary operations' s.homepage = 'https://github.com/antitypical/Result' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Rob Rix' => 'rob.rix@github.com' } s.source = { :git => 'https://github.com/antitypical/Result.git', :tag => s.version } s.source_files = 'Result/*.swift' s.requires_arc = true s.pod_target_xcconfig = { 'SWIFT_VERSION' => '2.3' } s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.9' s.watchos.deployment_target = '2.0' s.tvos.deployment_target = '9.0' end ================================================ FILE: Carthage/Checkouts/Result/Result.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; 57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; 57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; 57FCDE421BA280DC00130C48 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; 57FCDE561BA2814300130C48 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57FCDE471BA280DC00130C48 /* Result.framework */; }; D035799B1B2B788F005D26AE /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; D035799E1B2B788F005D26AE /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; D03579B41B2B78C4005D26AE /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03579A31B2B788F005D26AE /* Result.framework */; }; D454805D1A9572F5009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; D45480681A9572F5009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D45480571A9572F5009D7229 /* Result.framework */; }; D454806F1A9572F5009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; D45480881A957362009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D454807D1A957361009D7229 /* Result.framework */; }; D45480971A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; D45480981A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; }; D45480991A9574B8009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; }; D454809A1A9574BB009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; }; E93621461B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; E93621471B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = 57FCDE3C1BA280DC00130C48; remoteInfo = "Result-tvOS"; }; D03579B21B2B78BB005D26AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = D03579991B2B788F005D26AE; remoteInfo = "Result-watchOS"; }; D45480691A9572F5009D7229 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = D45480561A9572F5009D7229; remoteInfo = Result; }; D45480891A957362009D7229 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D454804E1A9572F5009D7229 /* Project object */; proxyType = 1; remoteGlobalIDString = D454807C1A957361009D7229; remoteInfo = "Result-iOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 57FCDE471BA280DC00130C48 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D03579A31B2B788F005D26AE /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-watchOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D45480571A9572F5009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D454805B1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D454805C1A9572F5009D7229 /* Result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Result.h; sourceTree = ""; }; D45480671A9572F5009D7229 /* Result-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-MacTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D454806D1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D454806E1A9572F5009D7229 /* ResultTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTests.swift; sourceTree = ""; }; D454807D1A957361009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D45480871A957362009D7229 /* Result-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Result-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D45480961A957465009D7229 /* Result.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = ""; }; E93621451B35596200948F2A /* ResultType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultType.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 57FCDE401BA280DC00130C48 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 57FCDE4E1BA280E000130C48 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE561BA2814300130C48 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D035799C1B2B788F005D26AE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D03579AA1B2B78A1005D26AE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D03579B41B2B78C4005D26AE /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480531A9572F5009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480641A9572F5009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D45480681A9572F5009D7229 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480791A957361009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480841A957362009D7229 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D45480881A957362009D7229 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ D454804D1A9572F5009D7229 = { isa = PBXGroup; children = ( D45480591A9572F5009D7229 /* Result */, D454806B1A9572F5009D7229 /* ResultTests */, D45480581A9572F5009D7229 /* Products */, ); sourceTree = ""; usesTabs = 1; }; D45480581A9572F5009D7229 /* Products */ = { isa = PBXGroup; children = ( D45480571A9572F5009D7229 /* Result.framework */, D45480671A9572F5009D7229 /* Result-MacTests.xctest */, D454807D1A957361009D7229 /* Result.framework */, D45480871A957362009D7229 /* Result-iOSTests.xctest */, D03579A31B2B788F005D26AE /* Result.framework */, D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */, 57FCDE471BA280DC00130C48 /* Result.framework */, 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; D45480591A9572F5009D7229 /* Result */ = { isa = PBXGroup; children = ( D454805C1A9572F5009D7229 /* Result.h */, D45480961A957465009D7229 /* Result.swift */, E93621451B35596200948F2A /* ResultType.swift */, D454805A1A9572F5009D7229 /* Supporting Files */, ); path = Result; sourceTree = ""; }; D454805A1A9572F5009D7229 /* Supporting Files */ = { isa = PBXGroup; children = ( D454805B1A9572F5009D7229 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; D454806B1A9572F5009D7229 /* ResultTests */ = { isa = PBXGroup; children = ( D454806E1A9572F5009D7229 /* ResultTests.swift */, D454806C1A9572F5009D7229 /* Supporting Files */, ); name = ResultTests; path = Tests/Result; sourceTree = ""; }; D454806C1A9572F5009D7229 /* Supporting Files */ = { isa = PBXGroup; children = ( D454806D1A9572F5009D7229 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 57FCDE411BA280DC00130C48 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE421BA280DC00130C48 /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D035799D1B2B788F005D26AE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D035799E1B2B788F005D26AE /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480541A9572F5009D7229 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D454805D1A9572F5009D7229 /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D454807A1A957361009D7229 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D454809A1A9574BB009D7229 /* Result.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 57FCDE3C1BA280DC00130C48 /* Result-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget "Result-tvOS" */; buildPhases = ( 57FCDE3D1BA280DC00130C48 /* Sources */, 57FCDE401BA280DC00130C48 /* Frameworks */, 57FCDE411BA280DC00130C48 /* Headers */, 57FCDE431BA280DC00130C48 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-tvOS"; productName = "Result-iOS"; productReference = 57FCDE471BA280DC00130C48 /* Result.framework */; productType = "com.apple.product-type.framework"; }; 57FCDE491BA280E000130C48 /* Result-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget "Result-tvOSTests" */; buildPhases = ( 57FCDE4C1BA280E000130C48 /* Sources */, 57FCDE4E1BA280E000130C48 /* Frameworks */, 57FCDE501BA280E000130C48 /* Resources */, ); buildRules = ( ); dependencies = ( 57FCDE581BA2814A00130C48 /* PBXTargetDependency */, ); name = "Result-tvOSTests"; productName = "Result-iOSTests"; productReference = 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D03579991B2B788F005D26AE /* Result-watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = D03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOS" */; buildPhases = ( D035799A1B2B788F005D26AE /* Sources */, D035799C1B2B788F005D26AE /* Frameworks */, D035799D1B2B788F005D26AE /* Headers */, D035799F1B2B788F005D26AE /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-watchOS"; productName = Result; productReference = D03579A31B2B788F005D26AE /* Result.framework */; productType = "com.apple.product-type.framework"; }; D03579A51B2B78A1005D26AE /* Result-watchOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = D03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOSTests" */; buildPhases = ( D03579A81B2B78A1005D26AE /* Sources */, D03579AA1B2B78A1005D26AE /* Frameworks */, D03579AC1B2B78A1005D26AE /* Resources */, ); buildRules = ( ); dependencies = ( D03579B31B2B78BB005D26AE /* PBXTargetDependency */, ); name = "Result-watchOSTests"; productName = ResultTests; productReference = D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D45480561A9572F5009D7229 /* Result-Mac */ = { isa = PBXNativeTarget; buildConfigurationList = D45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-Mac" */; buildPhases = ( D45480521A9572F5009D7229 /* Sources */, D45480531A9572F5009D7229 /* Frameworks */, D45480541A9572F5009D7229 /* Headers */, D45480551A9572F5009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-Mac"; productName = Result; productReference = D45480571A9572F5009D7229 /* Result.framework */; productType = "com.apple.product-type.framework"; }; D45480661A9572F5009D7229 /* Result-MacTests */ = { isa = PBXNativeTarget; buildConfigurationList = D45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-MacTests" */; buildPhases = ( D45480631A9572F5009D7229 /* Sources */, D45480641A9572F5009D7229 /* Frameworks */, D45480651A9572F5009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( D454806A1A9572F5009D7229 /* PBXTargetDependency */, ); name = "Result-MacTests"; productName = ResultTests; productReference = D45480671A9572F5009D7229 /* Result-MacTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D454807C1A957361009D7229 /* Result-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = D45480941A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOS" */; buildPhases = ( D45480781A957361009D7229 /* Sources */, D45480791A957361009D7229 /* Frameworks */, D454807A1A957361009D7229 /* Headers */, D454807B1A957361009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Result-iOS"; productName = "Result-iOS"; productReference = D454807D1A957361009D7229 /* Result.framework */; productType = "com.apple.product-type.framework"; }; D45480861A957362009D7229 /* Result-iOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = D45480951A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOSTests" */; buildPhases = ( D45480831A957362009D7229 /* Sources */, D45480841A957362009D7229 /* Frameworks */, D45480851A957362009D7229 /* Resources */, ); buildRules = ( ); dependencies = ( D454808A1A957362009D7229 /* PBXTargetDependency */, ); name = "Result-iOSTests"; productName = "Result-iOSTests"; productReference = D45480871A957362009D7229 /* Result-iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ D454804E1A9572F5009D7229 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Rob Rix"; TargetAttributes = { 57FCDE3C1BA280DC00130C48 = { LastSwiftMigration = 0800; }; 57FCDE491BA280E000130C48 = { LastSwiftMigration = 0800; }; D03579991B2B788F005D26AE = { LastSwiftMigration = 0800; }; D03579A51B2B78A1005D26AE = { LastSwiftMigration = 0800; }; D45480561A9572F5009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; D45480661A9572F5009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; D454807C1A957361009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; D45480861A957362009D7229 = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 0800; }; }; }; buildConfigurationList = D45480511A9572F5009D7229 /* Build configuration list for PBXProject "Result" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = D454804D1A9572F5009D7229; productRefGroup = D45480581A9572F5009D7229 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D45480561A9572F5009D7229 /* Result-Mac */, D45480661A9572F5009D7229 /* Result-MacTests */, D454807C1A957361009D7229 /* Result-iOS */, D45480861A957362009D7229 /* Result-iOSTests */, 57FCDE3C1BA280DC00130C48 /* Result-tvOS */, 57FCDE491BA280E000130C48 /* Result-tvOSTests */, D03579991B2B788F005D26AE /* Result-watchOS */, D03579A51B2B78A1005D26AE /* Result-watchOSTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 57FCDE431BA280DC00130C48 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 57FCDE501BA280E000130C48 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D035799F1B2B788F005D26AE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D03579AC1B2B78A1005D26AE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480551A9572F5009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480651A9572F5009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D454807B1A957361009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; D45480851A957362009D7229 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 57FCDE3D1BA280DC00130C48 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */, 57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 57FCDE4C1BA280E000130C48 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D035799A1B2B788F005D26AE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */, D035799B1B2B788F005D26AE /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D03579A81B2B78A1005D26AE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480521A9572F5009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E93621461B35596200948F2A /* ResultType.swift in Sources */, D45480971A957465009D7229 /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480631A9572F5009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D454806F1A9572F5009D7229 /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480781A957361009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E93621471B35596200948F2A /* ResultType.swift in Sources */, D45480981A957465009D7229 /* Result.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D45480831A957362009D7229 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( D45480991A9574B8009D7229 /* ResultTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 57FCDE581BA2814A00130C48 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 57FCDE3C1BA280DC00130C48 /* Result-tvOS */; targetProxy = 57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */; }; D03579B31B2B78BB005D26AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D03579991B2B788F005D26AE /* Result-watchOS */; targetProxy = D03579B21B2B78BB005D26AE /* PBXContainerItemProxy */; }; D454806A1A9572F5009D7229 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D45480561A9572F5009D7229 /* Result-Mac */; targetProxy = D45480691A9572F5009D7229 /* PBXContainerItemProxy */; }; D454808A1A957362009D7229 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D454807C1A957361009D7229 /* Result-iOS */; targetProxy = D45480891A957362009D7229 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 57FCDE451BA280DC00130C48 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; }; 57FCDE461BA280DC00130C48 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; VALIDATE_PRODUCT = YES; }; name = Release; }; 57FCDE521BA280E000130C48 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; }; name = Debug; }; 57FCDE531BA280E000130C48 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; VALIDATE_PRODUCT = YES; }; name = Release; }; D03579A11B2B788F005D26AE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = watchos; SKIP_INSTALL = YES; }; name = Debug; }; D03579A21B2B788F005D26AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = watchos; SKIP_INSTALL = YES; }; name = Release; }; D03579AE1B2B78A1005D26AE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; }; name = Debug; }; D03579AF1B2B78A1005D26AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; }; name = Release; }; D45480701A9572F5009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.antitypical.$(PRODUCT_NAME:rfc1034identifier)"; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; D45480711A9572F5009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.antitypical.$(PRODUCT_NAME:rfc1034identifier)"; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; D45480731A9572F5009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Debug; }; D45480741A9572F5009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "@rpath"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SKIP_INSTALL = YES; VALID_ARCHS = x86_64; }; name = Release; }; D45480761A9572F5009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; D45480771A9572F5009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; D45480901A957362009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; D45480911A957362009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BITCODE_GENERATION_MODE = bitcode; CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = YES; INFOPLIST_FILE = Result/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = Result; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; D45480921A957362009D7229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; }; name = Debug; }; D45480931A957362009D7229 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Tests/Result/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget "Result-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 57FCDE451BA280DC00130C48 /* Debug */, 57FCDE461BA280DC00130C48 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget "Result-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 57FCDE521BA280E000130C48 /* Debug */, 57FCDE531BA280E000130C48 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D03579A11B2B788F005D26AE /* Debug */, D03579A21B2B788F005D26AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget "Result-watchOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D03579AE1B2B78A1005D26AE /* Debug */, D03579AF1B2B78A1005D26AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480511A9572F5009D7229 /* Build configuration list for PBXProject "Result" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480701A9572F5009D7229 /* Debug */, D45480711A9572F5009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-Mac" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480731A9572F5009D7229 /* Debug */, D45480741A9572F5009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget "Result-MacTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480761A9572F5009D7229 /* Debug */, D45480771A9572F5009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480941A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480901A957362009D7229 /* Debug */, D45480911A957362009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; D45480951A957362009D7229 /* Build configuration list for PBXNativeTarget "Result-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D45480921A957362009D7229 /* Debug */, D45480931A957362009D7229 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = D454804E1A9572F5009D7229 /* Project object */; } ================================================ FILE: Carthage/Checkouts/Result/Result.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-Mac.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-watchOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/Result/Result.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/Result/ResultTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Result/ResultTests/ResultTests.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. final class ResultTests: XCTestCase { func testMapTransformsSuccesses() { XCTAssertEqual(success.map { $0.characters.count } ?? 0, 7) } func testMapRewrapsFailures() { XCTAssertEqual(failure.map { $0.characters.count } ?? 0, 0) } func testInitOptionalSuccess() { XCTAssert(Result("success" as String?, failWith: error) == success) } func testInitOptionalFailure() { XCTAssert(Result(nil, failWith: error) == failure) } // MARK: Errors func testErrorsIncludeTheSourceFile() { let file = __FILE__ XCTAssert(Result<(), NSError>.error().file == file) } func testErrorsIncludeTheSourceLine() { let (line, error) = (__LINE__, Result<(), NSError>.error()) XCTAssertEqual(error.line ?? -1, line) } func testErrorsIncludeTheCallingFunction() { let function = __FUNCTION__ XCTAssert(Result<(), NSError>.error().function == function) } // MARK: Try - Catch func testTryCatchProducesSuccesses() { let result: Result = Result(try tryIsSuccess("success")) XCTAssert(result == success) } func testTryCatchProducesFailures() { let result: Result = Result(try tryIsSuccess(nil)) XCTAssert(result.error == error) } func testTryCatchWithFunctionProducesSuccesses() { let function = { try tryIsSuccess("success") } let result: Result = Result(attempt: function) XCTAssert(result == success) } func testTryCatchWithFunctionCatchProducesFailures() { let function = { try tryIsSuccess(nil) } let result: Result = Result(attempt: function) XCTAssert(result.error == error) } func testMaterializeProducesSuccesses() { let result1 = materialize(try tryIsSuccess("success")) XCTAssert(result1 == success) let result2 = materialize { try tryIsSuccess("success") } XCTAssert(result2 == success) } func testMaterializeProducesFailures() { let result1 = materialize(try tryIsSuccess(nil)) XCTAssert(result1.error == error) let result2 = materialize { try tryIsSuccess(nil) } XCTAssert(result2.error == error) } // MARK: Cocoa API idioms func testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference() { let result = `try` { attempt(true, succeed: false, error: $0) } XCTAssertFalse(result ?? false) XCTAssertNotNil(result.error) } func testTryProducesFailuresForOptionalWithErrorReturnedByReference() { let result = `try` { attempt(1, succeed: false, error: $0) } XCTAssertEqual(result ?? 0, 0) XCTAssertNotNil(result.error) } func testTryProducesSuccessesForBooleanAPI() { let result = `try` { attempt(true, succeed: true, error: $0) } XCTAssertTrue(result ?? false) XCTAssertNil(result.error) } func testTryProducesSuccessesForOptionalAPI() { let result = `try` { attempt(1, succeed: true, error: $0) } XCTAssertEqual(result ?? 0, 1) XCTAssertNil(result.error) } func testTryMapProducesSuccess() { let result = success.tryMap(tryIsSuccess) XCTAssert(result == success) } func testTryMapProducesFailure() { let result = Result.Success("fail").tryMap(tryIsSuccess) XCTAssert(result == failure) } // MARK: Operators func testConjunctionOperator() { let resultSuccess = success &&& success if let (x, y) = resultSuccess.value { XCTAssertTrue(x == "success" && y == "success") } else { XCTFail() } let resultFailureBoth = failure &&& failure2 XCTAssert(resultFailureBoth.error == error) let resultFailureLeft = failure &&& success XCTAssert(resultFailureLeft.error == error) let resultFailureRight = success &&& failure2 XCTAssert(resultFailureRight.error == error2) } } // MARK: - Fixtures let success = Result.Success("success") let error = NSError(domain: "com.antitypical.Result", code: 1, userInfo: nil) let error2 = NSError(domain: "com.antitypical.Result", code: 2, userInfo: nil) let failure = Result.Failure(error) let failure2 = Result.Failure(error2) // MARK: - Helpers func attempt(value: T, succeed: Bool, error: NSErrorPointer) -> T? { if succeed { return value } else { error.memory = Result<(), NSError>.error() return nil } } func tryIsSuccess(text: String?) throws -> String { guard let text = text where text == "success" else { throw error } return text } extension NSError { var function: String? { return userInfo[Result<(), NSError>.functionKey as NSString] as? String } var file: String? { return userInfo[Result<(), NSError>.fileKey as NSString] as? String } var line: Int? { return userInfo[Result<(), NSError>.lineKey as NSString] as? Int } } import Result import XCTest ================================================ FILE: Carthage/Checkouts/Result/Tests/LinuxMain.swift ================================================ import XCTest @testable import ResultTestSuite XCTMain([ testCase(ResultTests.allTests), ]) ================================================ FILE: Carthage/Checkouts/Result/Tests/Result/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 2.1.3 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/Result/Tests/Result/ResultTests.swift ================================================ // Copyright (c) 2015 Rob Rix. All rights reserved. final class ResultTests: XCTestCase { func testMapTransformsSuccesses() { XCTAssertEqual(success.map { $0.characters.count } ?? 0, 7) } func testMapRewrapsFailures() { XCTAssertEqual(failure.map { $0.characters.count } ?? 0, 0) } func testInitOptionalSuccess() { XCTAssert(Result("success" as String?, failWith: error) == success) } func testInitOptionalFailure() { XCTAssert(Result(nil, failWith: error) == failure) } // MARK: Errors func testErrorsIncludeTheSourceFile() { let file = #file XCTAssert(Result<(), NSError>.error().file == file) } func testErrorsIncludeTheSourceLine() { let (line, error) = (#line, Result<(), NSError>.error()) XCTAssertEqual(error.line ?? -1, line) } func testErrorsIncludeTheCallingFunction() { let function = #function XCTAssert(Result<(), NSError>.error().function == function) } // MARK: Try - Catch func testTryCatchProducesSuccesses() { let result: Result = Result(try tryIsSuccess("success")) XCTAssert(result == success) } func testTryCatchProducesFailures() { #if os(Linux) /// FIXME: skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a. print("Test Case `\(#function)` skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a.") #else let result: Result = Result(try tryIsSuccess(nil)) XCTAssert(result.error == error) #endif } func testTryCatchWithFunctionProducesSuccesses() { let function = { try tryIsSuccess("success") } let result: Result = Result(attempt: function) XCTAssert(result == success) } func testTryCatchWithFunctionCatchProducesFailures() { #if os(Linux) /// FIXME: skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a. print("Test Case `\(#function)` skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a.") #else let function = { try tryIsSuccess(nil) } let result: Result = Result(attempt: function) XCTAssert(result.error == error) #endif } func testMaterializeProducesSuccesses() { let result1 = materialize(try tryIsSuccess("success")) XCTAssert(result1 == success) let result2: Result = materialize { try tryIsSuccess("success") } XCTAssert(result2 == success) } func testMaterializeProducesFailures() { #if os(Linux) /// FIXME: skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a. print("Test Case `\(#function)` skipped on Linux because of crash with swift-DEVELOPMENT-SNAPSHOT-2016-05-31-a.") #else let result1 = materialize(try tryIsSuccess(nil)) XCTAssert(result1.error == error) let result2: Result = materialize { try tryIsSuccess(nil) } XCTAssert(result2.error == error) #endif } // MARK: Recover func testRecoverProducesLeftForLeftSuccess() { let left = Result.Success("left") XCTAssertEqual(left.recover("right"), "left") } func testRecoverProducesRightForLeftFailure() { struct Error: ResultErrorType {} let left = Result.Failure(Error()) XCTAssertEqual(left.recover("right"), "right") } // MARK: Recover With func testRecoverWithProducesLeftForLeftSuccess() { let left = Result.Success("left") let right = Result.Success("right") XCTAssertEqual(left.recoverWith(right).value, "left") } func testRecoverWithProducesRightSuccessForLeftFailureAndRightSuccess() { struct Error: ResultErrorType {} let left = Result.Failure(Error()) let right = Result.Success("right") XCTAssertEqual(left.recoverWith(right).value, "right") } func testRecoverWithProducesRightFailureForLeftFailureAndRightFailure() { enum Error: ResultErrorType { case Left, Right } let left = Result.Failure(.Left) let right = Result.Failure(.Right) XCTAssertEqual(left.recoverWith(right).error, .Right) } // MARK: Cocoa API idioms #if !os(Linux) func testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference() { let result = `try` { attempt(true, succeed: false, error: $0) } XCTAssertFalse(result ?? false) XCTAssertNotNil(result.error) } func testTryProducesFailuresForOptionalWithErrorReturnedByReference() { let result = `try` { attempt(1, succeed: false, error: $0) } XCTAssertEqual(result ?? 0, 0) XCTAssertNotNil(result.error) } func testTryProducesSuccessesForBooleanAPI() { let result = `try` { attempt(true, succeed: true, error: $0) } XCTAssertTrue(result ?? false) XCTAssertNil(result.error) } func testTryProducesSuccessesForOptionalAPI() { let result = `try` { attempt(1, succeed: true, error: $0) } XCTAssertEqual(result ?? 0, 1) XCTAssertNil(result.error) } func testTryMapProducesSuccess() { let result = success.tryMap(tryIsSuccess) XCTAssert(result == success) } func testTryMapProducesFailure() { let result = Result.Success("fail").tryMap(tryIsSuccess) XCTAssert(result == failure) } #endif // MARK: Operators func testConjunctionOperator() { let resultSuccess = success &&& success if let (x, y) = resultSuccess.value { XCTAssertTrue(x == "success" && y == "success") } else { XCTFail() } let resultFailureBoth = failure &&& failure2 XCTAssert(resultFailureBoth.error == error) let resultFailureLeft = failure &&& success XCTAssert(resultFailureLeft.error == error) let resultFailureRight = success &&& failure2 XCTAssert(resultFailureRight.error == error2) } } // MARK: - Fixtures let success = Result.Success("success") let error = NSError(domain: "com.antitypical.Result", code: 1, userInfo: nil) let error2 = NSError(domain: "com.antitypical.Result", code: 2, userInfo: nil) let failure = Result.Failure(error) let failure2 = Result.Failure(error2) // MARK: - Helpers #if !os(Linux) #if swift(>=3.0) func attempt(_ value: T, succeed: Bool, error: NSErrorPointer) -> T? { if succeed { return value } else { error?.pointee = Result<(), NSError>.error() return nil } } #else func attempt(value: T, succeed: Bool, error: NSErrorPointer) -> T? { if succeed { return value } else { error.memory = Result<(), NSError>.error() return nil } } #endif #endif #if swift(>=3) func tryIsSuccess(_ text: String?) throws -> String { guard let text = text where text == "success" else { throw error } return text } #else func tryIsSuccess(text: String?) throws -> String { guard let text = text where text == "success" else { throw error } return text } #endif extension NSError { var function: String? { return userInfo[Result<(), NSError>.functionKey] as? String } var file: String? { return userInfo[Result<(), NSError>.fileKey] as? String } var line: Int? { return userInfo[Result<(), NSError>.lineKey] as? Int } } #if os(Linux) extension ResultTests { static var allTests: [(String, (ResultTests) -> () throws -> Void)] { return [ ("testMapTransformsSuccesses", testMapTransformsSuccesses), ("testMapRewrapsFailures", testMapRewrapsFailures), ("testInitOptionalSuccess", testInitOptionalSuccess), ("testInitOptionalFailure", testInitOptionalFailure), ("testErrorsIncludeTheSourceFile", testErrorsIncludeTheSourceFile), ("testErrorsIncludeTheSourceLine", testErrorsIncludeTheSourceLine), ("testErrorsIncludeTheCallingFunction", testErrorsIncludeTheCallingFunction), ("testTryCatchProducesSuccesses", testTryCatchProducesSuccesses), ("testTryCatchProducesFailures", testTryCatchProducesFailures), ("testTryCatchWithFunctionProducesSuccesses", testTryCatchWithFunctionProducesSuccesses), ("testTryCatchWithFunctionCatchProducesFailures", testTryCatchWithFunctionCatchProducesFailures), ("testMaterializeProducesSuccesses", testMaterializeProducesSuccesses), ("testMaterializeProducesFailures", testMaterializeProducesFailures), ("testRecoverProducesLeftForLeftSuccess", testRecoverProducesLeftForLeftSuccess), ("testRecoverProducesRightForLeftFailure", testRecoverProducesRightForLeftFailure), ("testRecoverWithProducesLeftForLeftSuccess", testRecoverWithProducesLeftForLeftSuccess), ("testRecoverWithProducesRightSuccessForLeftFailureAndRightSuccess", testRecoverWithProducesRightSuccessForLeftFailureAndRightSuccess), ("testRecoverWithProducesRightFailureForLeftFailureAndRightFailure", testRecoverWithProducesRightFailureForLeftFailureAndRightFailure), // ("testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference", testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference), // ("testTryProducesFailuresForOptionalWithErrorReturnedByReference", testTryProducesFailuresForOptionalWithErrorReturnedByReference), // ("testTryProducesSuccessesForBooleanAPI", testTryProducesSuccessesForBooleanAPI), // ("testTryProducesSuccessesForOptionalAPI", testTryProducesSuccessesForOptionalAPI), // ("testTryMapProducesSuccess", testTryMapProducesSuccess), // ("testTryMapProducesFailure", testTryMapProducesFailure), ("testConjunctionOperator", testConjunctionOperator), ] } } #endif import Foundation import Result import XCTest ================================================ FILE: Carthage/Checkouts/SnapKit/.gitignore ================================================ project.xcworkspace xcuserdata Examples/ .DS_Store Gemfile Gemfile.lock *.sketch ================================================ FILE: Carthage/Checkouts/SnapKit/.travis.yml ================================================ language: objective-c osx_image: xcode7.3 branches: only: - master - develop env: - LC_CTYPE=en_US.UTF-8 LANG=en_US.UTF-8 before_install: - gem install xcpretty -N script: - set -o pipefail - xcodebuild -project SnapKit.xcodeproj -scheme "SnapKit iOS" -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 6" ONLY_ACTIVE_ARCH=NO test | xcpretty -c - xcodebuild -project SnapKit.xcodeproj -scheme "SnapKit OSX" ONLY_ACTIVE_ARCH=YES test | xcpretty -c - pod lib lint --quick ================================================ FILE: Carthage/Checkouts/SnapKit/CHANGELOG.md ================================================ CHANGELOG ======= # 0.21.1 - June 20 2016 * Added support for Swift 2.3 # 0.21.0 - May 11 2016 * Added `equalToSuperview()` convenience * Enabled app extension API for tvOS and OSX # 0.20.0 - March 25 2016 * Swift 2.2 Support * Added a `labeled("Hello")` to constraint chain to label your constraints for debugging output. # 0.19.1 - January 26 2016 * Rebased from 0.16.0 with only desired commits to resolve many unexpected issues # 0.19.0 - January 21 2016 * Improved `.insets()` for `width` and `height` #183 * Added Carthage tvOS support #179 * Added Package.swift #175 * Codesign is set to Distribution on Release #181 # 0.15.0 - September 22 2015 * Fixed issues with layout guides on iOS 9 * Fixed warnings related to `guard #available` statements * Better support for legacy platforms (iOS 7 / OS X 10.9). [Documentation Here](http://snapkit.io/legacy-platforms) # 0.14.0 - September 12 2015 * Swift 2.0 / Xcode 7 GM # 0.13.0 - July 30 2015 * **BREAKING:** Refactored `insets` to `inset` and it now accepts Float/Double/CGFloat/Int/UInt as well as EdgeInsets * Size constraints to fixed constants like `make.width.equalTo(50)` now install directly on the from view rather than it’s superview * Debugging should generate property object pointer descriptions * Debugging now includes file/line number where the closure that created the constraint is in your code # 0.11.0 - April 26 2015 * Removed `final` declarations as they were causing crashes in certain circumstances # 0.10.0 - April 15 2015 * **ANNOUNCEMENT**: Snap is now SnapKit * **BREAKING:** The constraint making chain now utilises protocols to tighten the API's to avoid user error. This may break some syntaxes. * **BREAKING:** Semantic `and` and `with` chain variables were removed * Added `update###` functions to `Constraint` so their constants and priorities can be updated * Added a `SnapKit.Config.interfaceLayoutDirection` variable for richer Leading/Trailing support. * Fixed memory leaks that could occur on long lived views * Ensure Swift 1.2 compatibility # 0.9.x - March 2015 * Re-worked some internal API to allow for future updates * Added `snp_prepareConstraints -> [Constraint]` which allows pre-building of constraints * Added a fatal error to `and` when it is used after relation has been set ================================================ FILE: Carthage/Checkouts/SnapKit/CONTRIBUTING.md ================================================ # Contributing ### Pull Requests We gladly accept any PR's assuming they are well written, documented ( if necessary ) and preferably have test code. If you're unsure if we'll accept a new feature please open an issue requesting it and we can have a discussion before you code and submit a PR. ### Issues Please use the issue tracker *strictly* for bugs you think are caused by a code issue in SnapKit. We’re very busy and as a free open source library do not have the time to adequately help with questions that are more tutorial/training in nature and recommend using Stack Overflow and Google as alternatives. Please do not be offended if we close your issue and reference this document. If you believe the issue is truely a fault in SnapKit’s codebase re-open it. ================================================ FILE: Carthage/Checkouts/SnapKit/CodeSnippets/SnapKit Constraint Make.codesnippet ================================================ IDECodeSnippetCompletionPrefix snp_make IDECodeSnippetCompletionScopes CodeBlock IDECodeSnippetContents <#view#>.snp_makeConstraints { make in <#code#> } IDECodeSnippetIdentifier FF434629-7B96-4AB9-BD96-522275E7B106 IDECodeSnippetLanguage Xcode.SourceCodeLanguage.Swift IDECodeSnippetTitle SnapKit Constraint Make IDECodeSnippetUserSnippet IDECodeSnippetVersion 2 ================================================ FILE: Carthage/Checkouts/SnapKit/CodeSnippets/SnapKit Constraint Remake.codesnippet ================================================ IDECodeSnippetCompletionPrefix snp_remake IDECodeSnippetCompletionScopes TopLevel IDECodeSnippetContents <#view#>.snp_remakeConstraints { make in <#code#> } IDECodeSnippetIdentifier FD093546-D614-4311-82C3-E8FE842F62B1 IDECodeSnippetLanguage Xcode.SourceCodeLanguage.Swift IDECodeSnippetTitle SnapKit Constraint Remake IDECodeSnippetUserSnippet IDECodeSnippetVersion 0 ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/AppDelegate.swift ================================================ // // AppDelegate.swift // Example-iOS // // Created by Spiros Gerokostas on 01/03/16. // Copyright © 2016 SnapKit Team. All rights reserved. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { self.window = UIWindow(frame: UIScreen.mainScreen().bounds) let listViewController:ListViewController = ListViewController() let navigationController:UINavigationController = UINavigationController(rootViewController: listViewController); self.window!.rootViewController = navigationController; self.window!.backgroundColor = UIColor.whiteColor() self.window!.makeKeyAndVisible() return true } } ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/ListViewController.swift ================================================ // // ViewController.swift // Example-iOS // // Created by Spiros Gerokostas on 01/03/16. // Copyright © 2016 SnapKit Team. All rights reserved. // import UIKit import SnapKit class ListViewController: UITableViewController { let kCellIdentifier = "CellIdentifier" let demos = ["Simple Layout", "Basic UIScrollView"] override func viewDidLoad() { super.viewDidLoad() self.title = "SnapKit iOS Demos" self.tableView?.registerClass(UITableViewCell.self, forCellReuseIdentifier: kCellIdentifier) } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier)! as UITableViewCell cell.textLabel?.text = demos[indexPath.row] return cell } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return demos.count } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if indexPath.row == 0 { let viewController = SimpleLayoutViewController() navigationController?.pushViewController(viewController, animated: true) } else if indexPath.row == 1 { let viewController = BasicUIScrollViewController() navigationController?.pushViewController(viewController, animated: true) } } } ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/demos/BasicUIScrollViewController.swift ================================================ // // BasicUIScrollViewController.swift // SnapKit // // Created by Spiros Gerokostas on 01/03/16. // Copyright © 2016 SnapKit Team. All rights reserved. // import UIKit class BasicUIScrollViewController: UIViewController { var didSetupConstraints = false let scrollView = UIScrollView() let contentView = UIView() let label: UILabel = { let label = UILabel() label.backgroundColor = .blueColor() label.numberOfLines = 0 label.lineBreakMode = .ByClipping label.textColor = .whiteColor() label.text = NSLocalizedString("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", comment: "") return label }() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.whiteColor() view.addSubview(scrollView) contentView.backgroundColor = UIColor.lightGrayColor() scrollView.addSubview(contentView) contentView.addSubview(label) view.setNeedsUpdateConstraints() } override func updateViewConstraints() { if (!didSetupConstraints) { scrollView.snp_makeConstraints { make in make.edges.equalTo(view).inset(UIEdgeInsetsZero) } contentView.snp_makeConstraints { make in make.edges.equalTo(scrollView).inset(UIEdgeInsetsZero) make.width.equalTo(scrollView) } label.snp_makeConstraints { make in make.top.equalTo(contentView).inset(20) make.leading.equalTo(contentView).inset(20) make.trailing.equalTo(contentView).inset(20) make.bottom.equalTo(contentView).inset(20) } didSetupConstraints = true } super.updateViewConstraints() } } ================================================ FILE: Carthage/Checkouts/SnapKit/Example-iOS/demos/SimpleLayoutViewController.swift ================================================ // // SimpleLayoutViewController.swift // SnapKit // // Created by Spiros Gerokostas on 01/03/16. // Copyright © 2016 SnapKit Team. All rights reserved. // import UIKit class SimpleLayoutViewController: UIViewController { var didSetupConstraints = false let blackView: UIView = { let view = UIView() view.backgroundColor = .blackColor() return view }() let redView: UIView = { let view = UIView() view.backgroundColor = .redColor() return view }() let yellowView: UIView = { let view = UIView() view.backgroundColor = .yellowColor() return view }() let blueView: UIView = { let view = UIView() view.backgroundColor = .blueColor() return view }() let greenView: UIView = { let view = UIView() view.backgroundColor = .greenColor() return view }() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.whiteColor() view.addSubview(blackView) view.addSubview(redView) view.addSubview(yellowView) view.addSubview(blueView) view.addSubview(greenView) view.setNeedsUpdateConstraints() } override func updateViewConstraints() { if (!didSetupConstraints) { blackView.snp_makeConstraints { make in make.center.equalTo(view) make.size.equalTo(CGSizeMake(100.0, 100.0)) } redView.snp_makeConstraints { make in make.top.equalTo(blackView.snp_bottom).offset(20.0) make.left.equalTo(20.0) make.size.equalTo(CGSizeMake(100.0, 100.0)) } yellowView.snp_makeConstraints { make in make.top.equalTo(blackView.snp_bottom).offset(20.0) make.left.equalTo(blackView.snp_right).offset(20.0) make.size.equalTo(CGSizeMake(100.0, 100.0)) } blueView.snp_makeConstraints { make in make.bottom.equalTo(blackView.snp_top).offset(-20.0) make.left.equalTo(blackView.snp_right).offset(20.0) make.size.equalTo(CGSizeMake(100.0, 100.0)) } greenView.snp_makeConstraints { make in make.bottom.equalTo(blackView.snp_top).offset(-20.0) make.right.equalTo(blackView.snp_left).offset(-20.0) make.size.equalTo(CGSizeMake(100.0, 100.0)) } didSetupConstraints = true } super.updateViewConstraints() } } ================================================ FILE: Carthage/Checkouts/SnapKit/ISSUE_TEMPLATE.md ================================================ ### New Issue Checklist * [ ] I have looked at the [Documentation](http://snapkit.io/docs) * [ ] I have read the [F.A.Q.](http://snapkit.io/faq) ### Issue Info Info | Value | -------------------------|-------------------------------------| Platform | e.g. ios/osx/tvos Platform Version | e.g. 8.0 SnapKit Version | e.g. 0.19.0 Integration Method | e.g. carthage/cocoapods/manually ### Issue Description ================================================ FILE: Carthage/Checkouts/SnapKit/LICENSE ================================================ Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 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: Carthage/Checkouts/SnapKit/Package.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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 PackageDescription let package = Package( name: "SnapKit" ) ================================================ FILE: Carthage/Checkouts/SnapKit/README.md ================================================ SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. [![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) [![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://img.shields.io/cocoapods/v/SnapKit.svg) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ```swift import SnapKit class MyViewController: UIViewController { lazy var box = UIView() override func viewDidLoad() { super.viewDidLoad() self.view.addSubview(box) box.snp_makeConstraints { make in make.width.height.equalTo(50) make.center.equalTo(self.view) } } } ``` ## Resources * [Documentation](http://snapkit.io/docs/) * [F.A.Q.](http://snapkit.io/faq/) * [Legacy Platforms (iOS 7.0, OS X 10.9)](http://snapkit.io/legacy-platforms/) ## License MIT license. See the `LICENSE` file for details. ================================================ FILE: Carthage/Checkouts/SnapKit/SnapKit.podspec ================================================ Pod::Spec.new do |s| s.name = 'SnapKit' s.version = '0.21.1' s.license = 'MIT' s.summary = 'Harness the power of auto layout with a simplified, chainable, and compile time safe syntax.' s.homepage = 'https://github.com/SnapKit/SnapKit' s.authors = { 'Robert Payne' => 'robertpayne@me.com' } s.social_media_url = 'http://twitter.com/robertjpayne' s.source = { :git => 'https://github.com/SnapKit/SnapKit.git', :tag => '0.21.1' } s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.10' s.tvos.deployment_target = '9.0' s.source_files = 'Source/*.swift' s.requires_arc = true end ================================================ FILE: Carthage/Checkouts/SnapKit/SnapKit.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 537DCE9B1C35CD4100B5B899 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 537DCE9A1C35CD4100B5B899 /* UIKit.framework */; }; 537DCE9C1C35CD9A00B5B899 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35E1AC0C95C006BBC11 /* Constraint.swift */; }; 537DCE9D1C35CDA300B5B899 /* SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF32E1AD926AE00A425FA /* SnapKit.swift */; }; 537DCE9E1C35CDAA00B5B899 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF32B1AD910B900A425FA /* Debugging.swift */; }; 537DCE9F1C35CDB700B5B899 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3601AC0C95C006BBC11 /* ConstraintItem.swift */; }; 537DCEA01C35CDF800B5B899 /* SnapKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EECDB3661AC0C95C006BBC11 /* SnapKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; 537DCEA11C35CE0000B5B899 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF3311AD9432400A425FA /* ConstraintDescription.swift */; }; 537DCEA21C35CE0500B5B899 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3611AC0C95C006BBC11 /* ConstraintMaker.swift */; }; 537DCEA31C35CE0900B5B899 /* View+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3671AC0C95C006BBC11 /* View+SnapKit.swift */; }; 537DCEA41C35CE1500B5B899 /* ViewController+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */; }; 537DCEA51C35CE1B00B5B899 /* EdgeInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3631AC0C95C006BBC11 /* EdgeInsets.swift */; }; 537DCEA61C35CE2000B5B899 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3651AC0C95C006BBC11 /* LayoutConstraint.swift */; }; 537DCEA81C35CE3800B5B899 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */; }; 537DCEA91C35CE3E00B5B899 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */; }; 537DCEB41C35D90A00B5B899 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 537DCE921C35CC8800B5B899 /* SnapKit.framework */; }; 537DCEBA1C35DA9700B5B899 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB36A1AC0C95C006BBC11 /* Tests.swift */; }; 56A0DC0E1C859E30005973AB /* ListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A0DC0D1C859E30005973AB /* ListViewController.swift */; }; 56A0DC131C859E30005973AB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 56A0DC121C859E30005973AB /* Assets.xcassets */; }; 56A0DC161C859E30005973AB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 56A0DC141C859E30005973AB /* LaunchScreen.storyboard */; }; 56A0DC1C1C859E9A005973AB /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; }; 56A0DC1D1C859E9A005973AB /* SnapKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 56A0DC221C859F15005973AB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A0DC211C859F15005973AB /* AppDelegate.swift */; }; 56A0DC321C85A2C1005973AB /* BasicUIScrollViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A0DC311C85A2C1005973AB /* BasicUIScrollViewController.swift */; }; 56A0DC341C85AFBF005973AB /* SimpleLayoutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A0DC331C85AFBF005973AB /* SimpleLayoutViewController.swift */; }; EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */; }; EE4910991B19A40200A54F1F /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; }; EE94F6091AC0F10A008767FF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE94F6081AC0F10A008767FF /* UIKit.framework */; }; EE94F60B1AC0F10F008767FF /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE94F60A1AC0F10F008767FF /* AppKit.framework */; }; EE94F6111AC0F146008767FF /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EECDB37A1AC0C9D4006BBC11 /* SnapKit.framework */; }; EECDB36C1AC0C9A6006BBC11 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35E1AC0C95C006BBC11 /* Constraint.swift */; }; EECDB36D1AC0C9A6006BBC11 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */; }; EECDB36E1AC0C9A6006BBC11 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3601AC0C95C006BBC11 /* ConstraintItem.swift */; }; EECDB36F1AC0C9A6006BBC11 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3611AC0C95C006BBC11 /* ConstraintMaker.swift */; }; EECDB3701AC0C9A6006BBC11 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */; }; EECDB3711AC0C9A6006BBC11 /* EdgeInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3631AC0C95C006BBC11 /* EdgeInsets.swift */; }; EECDB3721AC0C9A6006BBC11 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3651AC0C95C006BBC11 /* LayoutConstraint.swift */; }; EECDB3731AC0C9A6006BBC11 /* View+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3671AC0C95C006BBC11 /* View+SnapKit.swift */; }; EECDB3741AC0C9B6006BBC11 /* SnapKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EECDB3661AC0C95C006BBC11 /* SnapKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; EECDB3931AC0CB52006BBC11 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB36A1AC0C95C006BBC11 /* Tests.swift */; }; EECDB3941AC0CB52006BBC11 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB36A1AC0C95C006BBC11 /* Tests.swift */; }; EECDB3951AC0CBFF006BBC11 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35E1AC0C95C006BBC11 /* Constraint.swift */; }; EECDB3961AC0CBFF006BBC11 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */; }; EECDB3971AC0CBFF006BBC11 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3601AC0C95C006BBC11 /* ConstraintItem.swift */; }; EECDB3981AC0CBFF006BBC11 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3611AC0C95C006BBC11 /* ConstraintMaker.swift */; }; EECDB3991AC0CBFF006BBC11 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */; }; EECDB39A1AC0CBFF006BBC11 /* EdgeInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3631AC0C95C006BBC11 /* EdgeInsets.swift */; }; EECDB39B1AC0CBFF006BBC11 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3651AC0C95C006BBC11 /* LayoutConstraint.swift */; }; EECDB39C1AC0CBFF006BBC11 /* View+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB3671AC0C95C006BBC11 /* View+SnapKit.swift */; }; EECDB39D1AC0CC03006BBC11 /* SnapKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EECDB3661AC0C95C006BBC11 /* SnapKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; EEFCF32C1AD910B900A425FA /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF32B1AD910B900A425FA /* Debugging.swift */; }; EEFCF32D1AD9250C00A425FA /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF32B1AD910B900A425FA /* Debugging.swift */; }; EEFCF32F1AD926AE00A425FA /* SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF32E1AD926AE00A425FA /* SnapKit.swift */; }; EEFCF3301AD92C2200A425FA /* SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF32E1AD926AE00A425FA /* SnapKit.swift */; }; EEFCF3321AD9432400A425FA /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF3311AD9432400A425FA /* ConstraintDescription.swift */; }; EEFCF3331AD9432400A425FA /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFCF3311AD9432400A425FA /* ConstraintDescription.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 56A0DC1E1C859E9A005973AB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DDC9FD8D1981B4DD009612C7 /* Project object */; proxyType = 1; remoteGlobalIDString = EEBCC9D719CC627D0083B827; remoteInfo = "SnapKit iOS"; }; EECDB3861AC0C9D4006BBC11 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = DDC9FD8D1981B4DD009612C7 /* Project object */; proxyType = 1; remoteGlobalIDString = EECDB3791AC0C9D4006BBC11; remoteInfo = "SnapKit OSX"; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 56A0DC201C859E9A005973AB /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( 56A0DC1D1C859E9A005973AB /* SnapKit.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 537DCE921C35CC8800B5B899 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 537DCE9A1C35CD4100B5B899 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 537DCEAF1C35D90A00B5B899 /* SnapKit tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SnapKit tvOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 56A0DC091C859E30005973AB /* Example-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 56A0DC0D1C859E30005973AB /* ListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListViewController.swift; sourceTree = ""; }; 56A0DC121C859E30005973AB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 56A0DC151C859E30005973AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 56A0DC171C859E30005973AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56A0DC211C859F15005973AB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 56A0DC311C85A2C1005973AB /* BasicUIScrollViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicUIScrollViewController.swift; sourceTree = ""; }; 56A0DC331C85AFBF005973AB /* SimpleLayoutViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleLayoutViewController.swift; sourceTree = ""; }; EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ViewController+SnapKit.swift"; sourceTree = ""; }; EE94F6081AC0F10A008767FF /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; EE94F60A1AC0F10F008767FF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; EEBCC9D819CC627D0083B827 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EEBCC9E219CC627E0083B827 /* SnapKit iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SnapKit iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; EECDB35E1AC0C95C006BBC11 /* Constraint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constraint.swift; sourceTree = ""; }; EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstraintAttributes.swift; sourceTree = ""; }; EECDB3601AC0C95C006BBC11 /* ConstraintItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstraintItem.swift; sourceTree = ""; }; EECDB3611AC0C95C006BBC11 /* ConstraintMaker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstraintMaker.swift; sourceTree = ""; }; EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstraintRelation.swift; sourceTree = ""; }; EECDB3631AC0C95C006BBC11 /* EdgeInsets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EdgeInsets.swift; sourceTree = ""; }; EECDB3641AC0C95C006BBC11 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EECDB3651AC0C95C006BBC11 /* LayoutConstraint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayoutConstraint.swift; sourceTree = ""; }; EECDB3661AC0C95C006BBC11 /* SnapKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SnapKit.h; sourceTree = ""; }; EECDB3671AC0C95C006BBC11 /* View+SnapKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+SnapKit.swift"; sourceTree = ""; }; EECDB3691AC0C95C006BBC11 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EECDB36A1AC0C95C006BBC11 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; EECDB37A1AC0C9D4006BBC11 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EECDB3841AC0C9D4006BBC11 /* SnapKit OSX Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SnapKit OSX Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; EEFCF32B1AD910B900A425FA /* Debugging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Debugging.swift; sourceTree = ""; }; EEFCF32E1AD926AE00A425FA /* SnapKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SnapKit.swift; sourceTree = ""; }; EEFCF3311AD9432400A425FA /* ConstraintDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConstraintDescription.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 537DCE8E1C35CC8800B5B899 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 537DCE9B1C35CD4100B5B899 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 537DCEAC1C35D90A00B5B899 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 537DCEB41C35D90A00B5B899 /* SnapKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 56A0DC061C859E30005973AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 56A0DC1C1C859E9A005973AB /* SnapKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; EE94F60D1AC0F132008767FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EE94F6111AC0F146008767FF /* SnapKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; EE94F60E1AC0F136008767FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EE4910991B19A40200A54F1F /* SnapKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; EEBCC9D419CC627D0083B827 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EE94F6091AC0F10A008767FF /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; EECDB3761AC0C9D4006BBC11 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EE94F60B1AC0F10F008767FF /* AppKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 56A0DC0A1C859E30005973AB /* Example-iOS */ = { isa = PBXGroup; children = ( 56A0DC301C85A20E005973AB /* demos */, 56A0DC211C859F15005973AB /* AppDelegate.swift */, 56A0DC0D1C859E30005973AB /* ListViewController.swift */, 56A0DC121C859E30005973AB /* Assets.xcassets */, 56A0DC141C859E30005973AB /* LaunchScreen.storyboard */, 56A0DC171C859E30005973AB /* Info.plist */, ); path = "Example-iOS"; sourceTree = ""; }; 56A0DC301C85A20E005973AB /* demos */ = { isa = PBXGroup; children = ( 56A0DC311C85A2C1005973AB /* BasicUIScrollViewController.swift */, 56A0DC331C85AFBF005973AB /* SimpleLayoutViewController.swift */, ); path = demos; sourceTree = ""; }; DDC9FD8C1981B4DD009612C7 = { isa = PBXGroup; children = ( EECDB35D1AC0C95C006BBC11 /* Source */, 56A0DC0A1C859E30005973AB /* Example-iOS */, EE94F60C1AC0F113008767FF /* Frameworks */, DDC9FD961981B4DD009612C7 /* Products */, ); sourceTree = ""; }; DDC9FD961981B4DD009612C7 /* Products */ = { isa = PBXGroup; children = ( EEBCC9D819CC627D0083B827 /* SnapKit.framework */, EEBCC9E219CC627E0083B827 /* SnapKit iOS Tests.xctest */, EECDB37A1AC0C9D4006BBC11 /* SnapKit.framework */, EECDB3841AC0C9D4006BBC11 /* SnapKit OSX Tests.xctest */, 537DCE921C35CC8800B5B899 /* SnapKit.framework */, 537DCEAF1C35D90A00B5B899 /* SnapKit tvOS Tests.xctest */, 56A0DC091C859E30005973AB /* Example-iOS.app */, ); name = Products; sourceTree = ""; }; EE94F60C1AC0F113008767FF /* Frameworks */ = { isa = PBXGroup; children = ( 537DCE9A1C35CD4100B5B899 /* UIKit.framework */, EE94F60A1AC0F10F008767FF /* AppKit.framework */, EE94F6081AC0F10A008767FF /* UIKit.framework */, ); name = Frameworks; sourceTree = ""; }; EECDB35D1AC0C95C006BBC11 /* Source */ = { isa = PBXGroup; children = ( EECDB3661AC0C95C006BBC11 /* SnapKit.h */, EEFCF32E1AD926AE00A425FA /* SnapKit.swift */, EECDB35E1AC0C95C006BBC11 /* Constraint.swift */, EEFCF3311AD9432400A425FA /* ConstraintDescription.swift */, EECDB3611AC0C95C006BBC11 /* ConstraintMaker.swift */, EECDB3671AC0C95C006BBC11 /* View+SnapKit.swift */, EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */, EECDB3601AC0C95C006BBC11 /* ConstraintItem.swift */, EECDB3631AC0C95C006BBC11 /* EdgeInsets.swift */, EECDB3651AC0C95C006BBC11 /* LayoutConstraint.swift */, EEFCF32B1AD910B900A425FA /* Debugging.swift */, EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */, EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */, EECDB36B1AC0C967006BBC11 /* Supporting Files */, EECDB3681AC0C95C006BBC11 /* Tests */, ); path = Source; sourceTree = ""; }; EECDB3681AC0C95C006BBC11 /* Tests */ = { isa = PBXGroup; children = ( EECDB3691AC0C95C006BBC11 /* Info.plist */, EECDB36A1AC0C95C006BBC11 /* Tests.swift */, ); name = Tests; path = ../Tests; sourceTree = ""; }; EECDB36B1AC0C967006BBC11 /* Supporting Files */ = { isa = PBXGroup; children = ( EECDB3641AC0C95C006BBC11 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 537DCE8F1C35CC8800B5B899 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 537DCEA01C35CDF800B5B899 /* SnapKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; EEBCC9D519CC627D0083B827 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( EECDB3741AC0C9B6006BBC11 /* SnapKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; EECDB3771AC0C9D4006BBC11 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( EECDB39D1AC0CC03006BBC11 /* SnapKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 537DCE911C35CC8800B5B899 /* SnapKit tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 537DCE991C35CC8800B5B899 /* Build configuration list for PBXNativeTarget "SnapKit tvOS" */; buildPhases = ( 537DCE8D1C35CC8800B5B899 /* Sources */, 537DCE8E1C35CC8800B5B899 /* Frameworks */, 537DCE8F1C35CC8800B5B899 /* Headers */, 537DCE901C35CC8800B5B899 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "SnapKit tvOS"; productName = "SnapKit tvOS"; productReference = 537DCE921C35CC8800B5B899 /* SnapKit.framework */; productType = "com.apple.product-type.framework"; }; 537DCEAE1C35D90A00B5B899 /* SnapKit tvOS Tests */ = { isa = PBXNativeTarget; buildConfigurationList = 537DCEB91C35D90A00B5B899 /* Build configuration list for PBXNativeTarget "SnapKit tvOS Tests" */; buildPhases = ( 537DCEAB1C35D90A00B5B899 /* Sources */, 537DCEAC1C35D90A00B5B899 /* Frameworks */, 537DCEAD1C35D90A00B5B899 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "SnapKit tvOS Tests"; productName = "SnapKit tvOS Tests"; productReference = 537DCEAF1C35D90A00B5B899 /* SnapKit tvOS Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 56A0DC081C859E30005973AB /* Example-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 56A0DC1A1C859E30005973AB /* Build configuration list for PBXNativeTarget "Example-iOS" */; buildPhases = ( 56A0DC051C859E30005973AB /* Sources */, 56A0DC061C859E30005973AB /* Frameworks */, 56A0DC071C859E30005973AB /* Resources */, 56A0DC201C859E9A005973AB /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( 56A0DC1F1C859E9A005973AB /* PBXTargetDependency */, ); name = "Example-iOS"; productName = "Example-iOS"; productReference = 56A0DC091C859E30005973AB /* Example-iOS.app */; productType = "com.apple.product-type.application"; }; EEBCC9D719CC627D0083B827 /* SnapKit iOS */ = { isa = PBXNativeTarget; buildConfigurationList = EEBCC9E819CC627E0083B827 /* Build configuration list for PBXNativeTarget "SnapKit iOS" */; buildPhases = ( EEBCC9D319CC627D0083B827 /* Sources */, EEBCC9D419CC627D0083B827 /* Frameworks */, EEBCC9D519CC627D0083B827 /* Headers */, EEBCC9D619CC627D0083B827 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "SnapKit iOS"; productName = SnapKit; productReference = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; productType = "com.apple.product-type.framework"; }; EEBCC9E119CC627D0083B827 /* SnapKit iOS Tests */ = { isa = PBXNativeTarget; buildConfigurationList = EEBCC9EB19CC627E0083B827 /* Build configuration list for PBXNativeTarget "SnapKit iOS Tests" */; buildPhases = ( EEBCC9DE19CC627D0083B827 /* Sources */, EE94F60E1AC0F136008767FF /* Frameworks */, EEBCC9E019CC627D0083B827 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "SnapKit iOS Tests"; productName = SnapKitTests; productReference = EEBCC9E219CC627E0083B827 /* SnapKit iOS Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; EECDB3791AC0C9D4006BBC11 /* SnapKit OSX */ = { isa = PBXNativeTarget; buildConfigurationList = EECDB38D1AC0C9D4006BBC11 /* Build configuration list for PBXNativeTarget "SnapKit OSX" */; buildPhases = ( EECDB3751AC0C9D4006BBC11 /* Sources */, EECDB3761AC0C9D4006BBC11 /* Frameworks */, EECDB3771AC0C9D4006BBC11 /* Headers */, EECDB3781AC0C9D4006BBC11 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "SnapKit OSX"; productName = "SnapKit OSX"; productReference = EECDB37A1AC0C9D4006BBC11 /* SnapKit.framework */; productType = "com.apple.product-type.framework"; }; EECDB3831AC0C9D4006BBC11 /* SnapKit OSX Tests */ = { isa = PBXNativeTarget; buildConfigurationList = EECDB3901AC0C9D4006BBC11 /* Build configuration list for PBXNativeTarget "SnapKit OSX Tests" */; buildPhases = ( EECDB3801AC0C9D4006BBC11 /* Sources */, EE94F60D1AC0F132008767FF /* Frameworks */, EECDB3821AC0C9D4006BBC11 /* Resources */, ); buildRules = ( ); dependencies = ( EECDB3871AC0C9D4006BBC11 /* PBXTargetDependency */, ); name = "SnapKit OSX Tests"; productName = "SnapKit OSXTests"; productReference = EECDB3841AC0C9D4006BBC11 /* SnapKit OSX Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ DDC9FD8D1981B4DD009612C7 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; LastUpgradeCheck = 0700; ORGANIZATIONNAME = "SnapKit Team"; TargetAttributes = { 537DCE911C35CC8800B5B899 = { CreatedOnToolsVersion = 7.2; LastSwiftMigration = 0800; }; 537DCEAE1C35D90A00B5B899 = { CreatedOnToolsVersion = 7.2; LastSwiftMigration = 0800; }; 56A0DC081C859E30005973AB = { CreatedOnToolsVersion = 7.2.1; }; EEBCC9D719CC627D0083B827 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; EEBCC9E119CC627D0083B827 = { CreatedOnToolsVersion = 6.0; LastSwiftMigration = 0800; }; EECDB3791AC0C9D4006BBC11 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; EECDB3831AC0C9D4006BBC11 = { CreatedOnToolsVersion = 6.2; LastSwiftMigration = 0800; }; }; }; buildConfigurationList = DDC9FD901981B4DD009612C7 /* Build configuration list for PBXProject "SnapKit" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = DDC9FD8C1981B4DD009612C7; productRefGroup = DDC9FD961981B4DD009612C7 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( EEBCC9D719CC627D0083B827 /* SnapKit iOS */, 537DCE911C35CC8800B5B899 /* SnapKit tvOS */, EECDB3791AC0C9D4006BBC11 /* SnapKit OSX */, EEBCC9E119CC627D0083B827 /* SnapKit iOS Tests */, 537DCEAE1C35D90A00B5B899 /* SnapKit tvOS Tests */, EECDB3831AC0C9D4006BBC11 /* SnapKit OSX Tests */, 56A0DC081C859E30005973AB /* Example-iOS */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 537DCE901C35CC8800B5B899 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 537DCEAD1C35D90A00B5B899 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 56A0DC071C859E30005973AB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 56A0DC161C859E30005973AB /* LaunchScreen.storyboard in Resources */, 56A0DC131C859E30005973AB /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; EEBCC9D619CC627D0083B827 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EEBCC9E019CC627D0083B827 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EECDB3781AC0C9D4006BBC11 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EECDB3821AC0C9D4006BBC11 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 537DCE8D1C35CC8800B5B899 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 537DCEA61C35CE2000B5B899 /* LayoutConstraint.swift in Sources */, 537DCE9F1C35CDB700B5B899 /* ConstraintItem.swift in Sources */, 537DCEA81C35CE3800B5B899 /* ConstraintRelation.swift in Sources */, 537DCE9D1C35CDA300B5B899 /* SnapKit.swift in Sources */, 537DCEA51C35CE1B00B5B899 /* EdgeInsets.swift in Sources */, 537DCE9C1C35CD9A00B5B899 /* Constraint.swift in Sources */, 537DCEA41C35CE1500B5B899 /* ViewController+SnapKit.swift in Sources */, 537DCE9E1C35CDAA00B5B899 /* Debugging.swift in Sources */, 537DCEA11C35CE0000B5B899 /* ConstraintDescription.swift in Sources */, 537DCEA91C35CE3E00B5B899 /* ConstraintAttributes.swift in Sources */, 537DCEA31C35CE0900B5B899 /* View+SnapKit.swift in Sources */, 537DCEA21C35CE0500B5B899 /* ConstraintMaker.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 537DCEAB1C35D90A00B5B899 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 537DCEBA1C35DA9700B5B899 /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 56A0DC051C859E30005973AB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 56A0DC341C85AFBF005973AB /* SimpleLayoutViewController.swift in Sources */, 56A0DC221C859F15005973AB /* AppDelegate.swift in Sources */, 56A0DC321C85A2C1005973AB /* BasicUIScrollViewController.swift in Sources */, 56A0DC0E1C859E30005973AB /* ListViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EEBCC9D319CC627D0083B827 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EECDB36C1AC0C9A6006BBC11 /* Constraint.swift in Sources */, EEFCF32F1AD926AE00A425FA /* SnapKit.swift in Sources */, EEFCF32C1AD910B900A425FA /* Debugging.swift in Sources */, EECDB3701AC0C9A6006BBC11 /* ConstraintRelation.swift in Sources */, EEFCF3321AD9432400A425FA /* ConstraintDescription.swift in Sources */, EECDB3731AC0C9A6006BBC11 /* View+SnapKit.swift in Sources */, EECDB3711AC0C9A6006BBC11 /* EdgeInsets.swift in Sources */, EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */, EECDB36F1AC0C9A6006BBC11 /* ConstraintMaker.swift in Sources */, EECDB36D1AC0C9A6006BBC11 /* ConstraintAttributes.swift in Sources */, EECDB3721AC0C9A6006BBC11 /* LayoutConstraint.swift in Sources */, EECDB36E1AC0C9A6006BBC11 /* ConstraintItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EEBCC9DE19CC627D0083B827 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EECDB3931AC0CB52006BBC11 /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EECDB3751AC0C9D4006BBC11 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EECDB3951AC0CBFF006BBC11 /* Constraint.swift in Sources */, EEFCF3301AD92C2200A425FA /* SnapKit.swift in Sources */, EEFCF32D1AD9250C00A425FA /* Debugging.swift in Sources */, EECDB3991AC0CBFF006BBC11 /* ConstraintRelation.swift in Sources */, EEFCF3331AD9432400A425FA /* ConstraintDescription.swift in Sources */, EECDB39C1AC0CBFF006BBC11 /* View+SnapKit.swift in Sources */, EECDB39A1AC0CBFF006BBC11 /* EdgeInsets.swift in Sources */, EECDB3981AC0CBFF006BBC11 /* ConstraintMaker.swift in Sources */, EECDB3961AC0CBFF006BBC11 /* ConstraintAttributes.swift in Sources */, EECDB39B1AC0CBFF006BBC11 /* LayoutConstraint.swift in Sources */, EECDB3971AC0CBFF006BBC11 /* ConstraintItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EECDB3801AC0C9D4006BBC11 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EECDB3941AC0CB52006BBC11 /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 56A0DC1F1C859E9A005973AB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = EEBCC9D719CC627D0083B827 /* SnapKit iOS */; targetProxy = 56A0DC1E1C859E9A005973AB /* PBXContainerItemProxy */; }; EECDB3871AC0C9D4006BBC11 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = EECDB3791AC0C9D4006BBC11 /* SnapKit OSX */; targetProxy = EECDB3861AC0C9D4006BBC11 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 56A0DC141C859E30005973AB /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( 56A0DC151C859E30005973AB /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 537DCE971C35CC8800B5B899 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = io.snapkit.SnapKit; PRODUCT_NAME = SnapKit; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 537DCE981C35CC8800B5B899 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = io.snapkit.SnapKit; PRODUCT_NAME = SnapKit; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 537DCEB71C35D90A00B5B899 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = dwarf; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Tests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.1; }; name = Debug; }; 537DCEB81C35D90A00B5B899 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Tests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SWIFT_VERSION = 2.3; TVOS_DEPLOYMENT_TARGET = 9.1; }; name = Release; }; 56A0DC181C859E30005973AB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEBUG_INFORMATION_FORMAT = dwarf; EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Example-iOS/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.Example-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 56A0DC191C859E30005973AB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Example-iOS/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.Example-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; DDC9FDAF1981B4DD009612C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; DDC9FDB01981B4DD009612C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; 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 = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; EEBCC9E919CC627E0083B827 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SnapKit; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; EEBCC9EA19CC627E0083B827 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SnapKit; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; EEBCC9EC19CC627E0083B827 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/Tests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 2.3; }; name = Debug; }; EEBCC9ED19CC627E0083B827 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/Tests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 2.3; }; name = Release; }; EECDB38E1AC0C9D4006BBC11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; 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 = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SnapKit; SDKROOT = macosx; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = macosx; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; EECDB38F1AC0C9D4006BBC11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; 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 = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SnapKit; SDKROOT = macosx; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = macosx; SWIFT_VERSION = 2.3; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; EECDB3911AC0C9D4006BBC11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/Tests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SWIFT_VERSION = 2.3; }; name = Debug; }; EECDB3921AC0C9D4006BBC11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/Tests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "io.snapkit.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SWIFT_VERSION = 2.3; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 537DCE991C35CC8800B5B899 /* Build configuration list for PBXNativeTarget "SnapKit tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 537DCE971C35CC8800B5B899 /* Debug */, 537DCE981C35CC8800B5B899 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 537DCEB91C35D90A00B5B899 /* Build configuration list for PBXNativeTarget "SnapKit tvOS Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( 537DCEB71C35D90A00B5B899 /* Debug */, 537DCEB81C35D90A00B5B899 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 56A0DC1A1C859E30005973AB /* Build configuration list for PBXNativeTarget "Example-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 56A0DC181C859E30005973AB /* Debug */, 56A0DC191C859E30005973AB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; DDC9FD901981B4DD009612C7 /* Build configuration list for PBXProject "SnapKit" */ = { isa = XCConfigurationList; buildConfigurations = ( DDC9FDAF1981B4DD009612C7 /* Debug */, DDC9FDB01981B4DD009612C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EEBCC9E819CC627E0083B827 /* Build configuration list for PBXNativeTarget "SnapKit iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( EEBCC9E919CC627E0083B827 /* Debug */, EEBCC9EA19CC627E0083B827 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EEBCC9EB19CC627E0083B827 /* Build configuration list for PBXNativeTarget "SnapKit iOS Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( EEBCC9EC19CC627E0083B827 /* Debug */, EEBCC9ED19CC627E0083B827 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EECDB38D1AC0C9D4006BBC11 /* Build configuration list for PBXNativeTarget "SnapKit OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( EECDB38E1AC0C9D4006BBC11 /* Debug */, EECDB38F1AC0C9D4006BBC11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EECDB3901AC0C9D4006BBC11 /* Build configuration list for PBXNativeTarget "SnapKit OSX Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( EECDB3911AC0C9D4006BBC11 /* Debug */, EECDB3921AC0C9D4006BBC11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = DDC9FD8D1981B4DD009612C7 /* Project object */; } ================================================ FILE: Carthage/Checkouts/SnapKit/SnapKit.xcodeproj/xcshareddata/xcschemes/SnapKit OSX.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/SnapKit/SnapKit.xcodeproj/xcshareddata/xcschemes/SnapKit iOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/SnapKit/SnapKit.xcodeproj/xcshareddata/xcschemes/SnapKit tvOS.xcscheme ================================================ ================================================ FILE: Carthage/Checkouts/SnapKit/SnapKit.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Carthage/Checkouts/SnapKit/Source/Constraint.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to expose API's for a Constraint */ public class Constraint { public func install() -> [LayoutConstraint] { fatalError("Must be implemented by Concrete subclass.") } public func uninstall() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func activate() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func deactivate() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: Float) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: Double) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: CGFloat) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: Int) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: UInt) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: CGPoint) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: CGSize) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateOffset(amount: EdgeInsets) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updateInsets(amount: EdgeInsets) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriority(priority: Float) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriority(priority: Double) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriority(priority: CGFloat) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriority(priority: UInt) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriority(priority: Int) -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriorityRequired() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } internal var makerFile: String = "Unknown" internal var makerLine: UInt = 0 } /** Used internally to implement a ConcreteConstraint */ internal class ConcreteConstraint: Constraint { internal override func updateOffset(amount: Float) -> Void { self.constant = amount } internal override func updateOffset(amount: Double) -> Void { self.updateOffset(Float(amount)) } internal override func updateOffset(amount: CGFloat) -> Void { self.updateOffset(Float(amount)) } internal override func updateOffset(amount: Int) -> Void { self.updateOffset(Float(amount)) } internal override func updateOffset(amount: UInt) -> Void { self.updateOffset(Float(amount)) } internal override func updateOffset(amount: CGPoint) -> Void { self.constant = amount } internal override func updateOffset(amount: CGSize) -> Void { self.constant = amount } internal override func updateOffset(amount: EdgeInsets) -> Void { self.constant = amount } internal override func updateInsets(amount: EdgeInsets) -> Void { self.constant = EdgeInsets(top: amount.top, left: amount.left, bottom: -amount.bottom, right: -amount.right) } internal override func updatePriority(priority: Float) -> Void { self.priority = priority } internal override func updatePriority(priority: Double) -> Void { self.updatePriority(Float(priority)) } internal override func updatePriority(priority: CGFloat) -> Void { self.updatePriority(Float(priority)) } internal override func updatePriority(priority: UInt) -> Void { self.updatePriority(Float(priority)) } internal override func updatePriority(priority: Int) -> Void { self.updatePriority(Float(priority)) } internal override func updatePriorityRequired() -> Void { self.updatePriority(Float(1000.0)) } internal override func updatePriorityHigh() -> Void { self.updatePriority(Float(750.0)) } internal override func updatePriorityMedium() -> Void { #if os(iOS) || os(tvOS) self.updatePriority(Float(500.0)) #else self.updatePriority(Float(501.0)) #endif } internal override func updatePriorityLow() -> Void { self.updatePriority(Float(250.0)) } internal override func install() -> [LayoutConstraint] { return self.installOnView(updateExisting: false, file: self.makerFile, line: self.makerLine) } internal override func uninstall() -> Void { self.uninstallFromView() } internal override func activate() -> Void { guard self.installInfo != nil else { self.install() return } #if SNAPKIT_DEPLOYMENT_LEGACY guard #available(iOS 8.0, OSX 10.10, *) else { self.install() return } #endif let layoutConstraints = self.installInfo!.layoutConstraints.allObjects as! [LayoutConstraint] if layoutConstraints.count > 0 { NSLayoutConstraint.activateConstraints(layoutConstraints) } } internal override func deactivate() -> Void { guard self.installInfo != nil else { return } #if SNAPKIT_DEPLOYMENT_LEGACY guard #available(iOS 8.0, OSX 10.10, *) else { return } #endif let layoutConstraints = self.installInfo!.layoutConstraints.allObjects as! [LayoutConstraint] if layoutConstraints.count > 0 { NSLayoutConstraint.deactivateConstraints(layoutConstraints) } } private let fromItem: ConstraintItem private let toItem: ConstraintItem private let relation: ConstraintRelation private let multiplier: Float private var constant: Any { didSet { if let installInfo = self.installInfo { for layoutConstraint in installInfo.layoutConstraints.allObjects as! [LayoutConstraint] { let attribute = (layoutConstraint.secondAttribute == .NotAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute layoutConstraint.constant = attribute.snp_constantForValue(self.constant) } } } } private var priority: Float { didSet { if let installInfo = self.installInfo { for layoutConstraint in installInfo.layoutConstraints.allObjects as! [LayoutConstraint] { layoutConstraint.priority = self.priority } } } } private let label: String? private var installInfo: ConcreteConstraintInstallInfo? = nil internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float, label: String? = nil) { self.fromItem = fromItem self.toItem = toItem self.relation = relation self.constant = constant self.multiplier = multiplier self.priority = priority self.label = label } internal func installOnView(updateExisting updateExisting: Bool = false, file: String? = nil, line: UInt? = nil) -> [LayoutConstraint] { var installOnView: View? = nil if self.toItem.view != nil { installOnView = closestCommonSuperviewFromView(self.fromItem.view, toView: self.toItem.view) if installOnView == nil { NSException(name: "Cannot Install Constraint", reason: "No common superview between views (@\(self.makerFile)#\(self.makerLine))", userInfo: nil).raise() return [] } } else { if self.fromItem.attributes.isSubsetOf(ConstraintAttributes.Width.union(.Height)) { installOnView = self.fromItem.view } else { installOnView = self.fromItem.view?.superview if installOnView == nil { NSException(name: "Cannot Install Constraint", reason: "Missing superview (@\(self.makerFile)#\(self.makerLine))", userInfo: nil).raise() return [] } } } if let installedOnView = self.installInfo?.view { if installedOnView != installOnView { NSException(name: "Cannot Install Constraint", reason: "Already installed on different view. (@\(self.makerFile)#\(self.makerLine))", userInfo: nil).raise() return [] } return self.installInfo?.layoutConstraints.allObjects as? [LayoutConstraint] ?? [] } var newLayoutConstraints = [LayoutConstraint]() let layoutFromAttributes = self.fromItem.attributes.layoutAttributes let layoutToAttributes = self.toItem.attributes.layoutAttributes // get layout from let layoutFrom: View? = self.fromItem.view // get layout relation let layoutRelation: NSLayoutRelation = self.relation.layoutRelation for layoutFromAttribute in layoutFromAttributes { // get layout to attribute let layoutToAttribute = (layoutToAttributes.count > 0) ? layoutToAttributes[0] : layoutFromAttribute // get layout constant let layoutConstant: CGFloat = layoutToAttribute.snp_constantForValue(self.constant) // get layout to #if os(iOS) || os(tvOS) var layoutTo: AnyObject? = self.toItem.view ?? self.toItem.layoutSupport #else var layoutTo: AnyObject? = self.toItem.view #endif if layoutTo == nil && layoutToAttribute != .Width && layoutToAttribute != .Height { layoutTo = installOnView } // create layout constraint let layoutConstraint = LayoutConstraint( item: layoutFrom!, attribute: layoutFromAttribute, relatedBy: layoutRelation, toItem: layoutTo, attribute: layoutToAttribute, multiplier: CGFloat(self.multiplier), constant: layoutConstant) layoutConstraint.identifier = self.label // set priority layoutConstraint.priority = self.priority // set constraint layoutConstraint.snp_constraint = self newLayoutConstraints.append(layoutConstraint) } // special logic for updating if updateExisting { // get existing constraints for this view let existingLayoutConstraints = layoutFrom!.snp_installedLayoutConstraints.reverse() // array that will contain only new layout constraints to keep var newLayoutConstraintsToKeep = [LayoutConstraint]() // begin looping for layoutConstraint in newLayoutConstraints { // layout constraint that should be updated var updateLayoutConstraint: LayoutConstraint? = nil // loop through existing and check for match for existingLayoutConstraint in existingLayoutConstraints { if existingLayoutConstraint == layoutConstraint { updateLayoutConstraint = existingLayoutConstraint break } } // if we have existing one lets just update the constant if updateLayoutConstraint != nil { updateLayoutConstraint!.constant = layoutConstraint.constant } // otherwise add this layout constraint to new keep list else { newLayoutConstraintsToKeep.append(layoutConstraint) } } // set constraints to only new ones newLayoutConstraints = newLayoutConstraintsToKeep } // add constraints #if SNAPKIT_DEPLOYMENT_LEGACY && !os(OSX) if #available(iOS 8.0, *) { NSLayoutConstraint.activateConstraints(newLayoutConstraints) } else { installOnView!.addConstraints(newLayoutConstraints) } #else NSLayoutConstraint.activateConstraints(newLayoutConstraints) #endif // set install info self.installInfo = ConcreteConstraintInstallInfo(view: installOnView, layoutConstraints: NSHashTable.weakObjectsHashTable()) // store which layout constraints are installed for this constraint for layoutConstraint in newLayoutConstraints { self.installInfo!.layoutConstraints.addObject(layoutConstraint) } // store the layout constraints against the layout from view layoutFrom!.snp_installedLayoutConstraints += newLayoutConstraints // return the new constraints return newLayoutConstraints } internal func uninstallFromView() { if let installInfo = self.installInfo, let installedLayoutConstraints = installInfo.layoutConstraints.allObjects as? [LayoutConstraint] { if installedLayoutConstraints.count > 0 { // remove the constraints from the UIView's storage #if SNAPKIT_DEPLOYMENT_LEGACY && !os(OSX) if #available(iOS 8.0, *) { NSLayoutConstraint.deactivateConstraints(installedLayoutConstraints) } else if let installedOnView = installInfo.view { installedOnView.removeConstraints(installedLayoutConstraints) } #else NSLayoutConstraint.deactivateConstraints(installedLayoutConstraints) #endif // remove the constraints from the from item view if let fromView = self.fromItem.view { fromView.snp_installedLayoutConstraints = fromView.snp_installedLayoutConstraints.filter { return !installedLayoutConstraints.contains($0) } } } } self.installInfo = nil } } private struct ConcreteConstraintInstallInfo { weak var view: View? = nil let layoutConstraints: NSHashTable } private extension NSLayoutAttribute { private func snp_constantForValue(value: Any?) -> CGFloat { // Float if let float = value as? Float { return CGFloat(float) } // Double else if let double = value as? Double { return CGFloat(double) } // UInt else if let int = value as? Int { return CGFloat(int) } // Int else if let uint = value as? UInt { return CGFloat(uint) } // CGFloat else if let float = value as? CGFloat { return float } // CGSize else if let size = value as? CGSize { if self == .Width { return size.width } else if self == .Height { return size.height } } // CGPoint else if let point = value as? CGPoint { #if os(iOS) || os(tvOS) switch self { case .Left, .CenterX, .LeftMargin, .CenterXWithinMargins: return point.x case .Top, .CenterY, .TopMargin, .CenterYWithinMargins, .LastBaseline, .FirstBaseline: return point.y case .Right, .RightMargin: return point.x case .Bottom, .BottomMargin: return point.y case .Leading, .LeadingMargin: return point.x case .Trailing, .TrailingMargin: return point.x case .Width, .Height, .NotAnAttribute: return CGFloat(0) } #else switch self { case .Left, .CenterX: return point.x case .Top, .CenterY, .LastBaseline: return point.y case .Right: return point.x case .Bottom: return point.y case .Leading: return point.x case .Trailing: return point.x case .Width, .Height, .NotAnAttribute: return CGFloat(0) case .FirstBaseline: return point.y } #endif } // EdgeInsets else if let insets = value as? EdgeInsets { #if os(iOS) || os(tvOS) switch self { case .Left, .CenterX, .LeftMargin, .CenterXWithinMargins: return insets.left case .Top, .CenterY, .TopMargin, .CenterYWithinMargins, .LastBaseline, .FirstBaseline: return insets.top case .Right, .RightMargin: return insets.right case .Bottom, .BottomMargin: return insets.bottom case .Leading, .LeadingMargin: return (Config.interfaceLayoutDirection == .LeftToRight) ? insets.left : -insets.right case .Trailing, .TrailingMargin: return (Config.interfaceLayoutDirection == .LeftToRight) ? insets.right : -insets.left case .Width: return -insets.left + insets.right case .Height: return -insets.top + insets.bottom case .NotAnAttribute: return CGFloat(0) } #else switch self { case .Left, .CenterX: return insets.left case .Top, .CenterY, .LastBaseline: return insets.top case .Right: return insets.right case .Bottom: return insets.bottom case .Leading: return (Config.interfaceLayoutDirection == .LeftToRight) ? insets.left : -insets.right case .Trailing: return (Config.interfaceLayoutDirection == .LeftToRight) ? insets.right : -insets.left case .Width: return -insets.left + insets.right case .Height: return -insets.top + insets.bottom case .NotAnAttribute: return CGFloat(0) case .FirstBaseline: return insets.bottom } #endif } return CGFloat(0); } } private func closestCommonSuperviewFromView(fromView: View?, toView: View?) -> View? { var views = Set() var fromView = fromView var toView = toView repeat { if let view = toView { if views.contains(view) { return view } views.insert(view) toView = view.superview } if let view = fromView { if views.contains(view) { return view } views.insert(view) fromView = view.superview } } while (fromView != nil || toView != nil) return nil } private func ==(left: ConcreteConstraint, right: ConcreteConstraint) -> Bool { return (left.fromItem == right.fromItem && left.toItem == right.toItem && left.relation == right.relation && left.multiplier == right.multiplier && left.priority == right.priority) } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/ConstraintAttributes.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to define `NSLayoutAttributes` in a more concise and composite manner */ internal struct ConstraintAttributes: OptionSetType, BooleanType { internal init(rawValue: UInt) { self.rawValue = rawValue } internal init(_ rawValue: UInt) { self.init(rawValue: rawValue) } internal init(nilLiteral: ()) { self.rawValue = 0 } internal private(set) var rawValue: UInt internal static var allZeros: ConstraintAttributes { return self.init(0) } internal static func convertFromNilLiteral() -> ConstraintAttributes { return self.init(0) } internal var boolValue: Bool { return self.rawValue != 0 } internal func toRaw() -> UInt { return self.rawValue } internal static func fromRaw(raw: UInt) -> ConstraintAttributes? { return self.init(raw) } internal static func fromMask(raw: UInt) -> ConstraintAttributes { return self.init(raw) } // normal internal static var None: ConstraintAttributes { return self.init(0) } internal static var Left: ConstraintAttributes { return self.init(1) } internal static var Top: ConstraintAttributes { return self.init(2) } internal static var Right: ConstraintAttributes { return self.init(4) } internal static var Bottom: ConstraintAttributes { return self.init(8) } internal static var Leading: ConstraintAttributes { return self.init(16) } internal static var Trailing: ConstraintAttributes { return self.init(32) } internal static var Width: ConstraintAttributes { return self.init(64) } internal static var Height: ConstraintAttributes { return self.init(128) } internal static var CenterX: ConstraintAttributes { return self.init(256) } internal static var CenterY: ConstraintAttributes { return self.init(512) } internal static var Baseline: ConstraintAttributes { return self.init(1024) } @available(iOS 8.0, *) internal static var FirstBaseline: ConstraintAttributes { return self.init(2048) } @available(iOS 8.0, *) internal static var LeftMargin: ConstraintAttributes { return self.init(4096) } @available(iOS 8.0, *) internal static var RightMargin: ConstraintAttributes { return self.init(8192) } @available(iOS 8.0, *) internal static var TopMargin: ConstraintAttributes { return self.init(16384) } @available(iOS 8.0, *) internal static var BottomMargin: ConstraintAttributes { return self.init(32768) } @available(iOS 8.0, *) internal static var LeadingMargin: ConstraintAttributes { return self.init(65536) } @available(iOS 8.0, *) internal static var TrailingMargin: ConstraintAttributes { return self.init(131072) } @available(iOS 8.0, *) internal static var CenterXWithinMargins: ConstraintAttributes { return self.init(262144) } @available(iOS 8.0, *) internal static var CenterYWithinMargins: ConstraintAttributes { return self.init(524288) } // aggregates internal static var Edges: ConstraintAttributes { return self.init(15) } internal static var Size: ConstraintAttributes { return self.init(192) } internal static var Center: ConstraintAttributes { return self.init(768) } @available(iOS 8.0, *) internal static var Margins: ConstraintAttributes { return self.init(61440) } @available(iOS 8.0, *) internal static var CenterWithinMargins: ConstraintAttributes { return self.init(786432) } internal var layoutAttributes:[NSLayoutAttribute] { var attrs = [NSLayoutAttribute]() if (self.contains(ConstraintAttributes.Left)) { attrs.append(.Left) } if (self.contains(ConstraintAttributes.Top)) { attrs.append(.Top) } if (self.contains(ConstraintAttributes.Right)) { attrs.append(.Right) } if (self.contains(ConstraintAttributes.Bottom)) { attrs.append(.Bottom) } if (self.contains(ConstraintAttributes.Leading)) { attrs.append(.Leading) } if (self.contains(ConstraintAttributes.Trailing)) { attrs.append(.Trailing) } if (self.contains(ConstraintAttributes.Width)) { attrs.append(.Width) } if (self.contains(ConstraintAttributes.Height)) { attrs.append(.Height) } if (self.contains(ConstraintAttributes.CenterX)) { attrs.append(.CenterX) } if (self.contains(ConstraintAttributes.CenterY)) { attrs.append(.CenterY) } if (self.contains(ConstraintAttributes.Baseline)) { #if swift(>=2.3) attrs.append(.LastBaseline) #else attrs.append(.Baseline) #endif } #if os(iOS) || os(tvOS) #if SNAPKIT_DEPLOYMENT_LEGACY guard #available(iOS 8.0, *) else { return attrs } #endif if (self.contains(ConstraintAttributes.FirstBaseline)) { attrs.append(.FirstBaseline) } if (self.contains(ConstraintAttributes.LeftMargin)) { attrs.append(.LeftMargin) } if (self.contains(ConstraintAttributes.RightMargin)) { attrs.append(.RightMargin) } if (self.contains(ConstraintAttributes.TopMargin)) { attrs.append(.TopMargin) } if (self.contains(ConstraintAttributes.BottomMargin)) { attrs.append(.BottomMargin) } if (self.contains(ConstraintAttributes.LeadingMargin)) { attrs.append(.LeadingMargin) } if (self.contains(ConstraintAttributes.TrailingMargin)) { attrs.append(.TrailingMargin) } if (self.contains(ConstraintAttributes.CenterXWithinMargins)) { attrs.append(.CenterXWithinMargins) } if (self.contains(ConstraintAttributes.CenterYWithinMargins)) { attrs.append(.CenterYWithinMargins) } #endif return attrs } } internal func +=(inout left: ConstraintAttributes, right: ConstraintAttributes) { left.unionInPlace(right) } internal func -=(inout left: ConstraintAttributes, right: ConstraintAttributes) { left.subtractInPlace(right) } internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { return left.rawValue == right.rawValue } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/ConstraintDescription.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to expose the final API of a `ConstraintDescription` which allows getting a constraint from it */ public protocol ConstraintDescriptionFinalizable: class { var constraint: Constraint { get } func labeled(label: String) -> ConstraintDescriptionFinalizable } /** Used to expose priority APIs */ public protocol ConstraintDescriptionPriortizable: ConstraintDescriptionFinalizable { func priority(priority: Float) -> ConstraintDescriptionFinalizable func priority(priority: Double) -> ConstraintDescriptionFinalizable func priority(priority: CGFloat) -> ConstraintDescriptionFinalizable func priority(priority: UInt) -> ConstraintDescriptionFinalizable func priority(priority: Int) -> ConstraintDescriptionFinalizable func priorityRequired() -> ConstraintDescriptionFinalizable func priorityHigh() -> ConstraintDescriptionFinalizable func priorityMedium() -> ConstraintDescriptionFinalizable func priorityLow() -> ConstraintDescriptionFinalizable } /** Used to expose multiplier & constant APIs */ public protocol ConstraintDescriptionEditable: ConstraintDescriptionPriortizable { func multipliedBy(amount: Float) -> ConstraintDescriptionEditable func multipliedBy(amount: Double) -> ConstraintDescriptionEditable func multipliedBy(amount: CGFloat) -> ConstraintDescriptionEditable func multipliedBy(amount: Int) -> ConstraintDescriptionEditable func multipliedBy(amount: UInt) -> ConstraintDescriptionEditable func dividedBy(amount: Float) -> ConstraintDescriptionEditable func dividedBy(amount: Double) -> ConstraintDescriptionEditable func dividedBy(amount: CGFloat) -> ConstraintDescriptionEditable func dividedBy(amount: Int) -> ConstraintDescriptionEditable func dividedBy(amount: UInt) -> ConstraintDescriptionEditable func offset(amount: Float) -> ConstraintDescriptionEditable func offset(amount: Double) -> ConstraintDescriptionEditable func offset(amount: CGFloat) -> ConstraintDescriptionEditable func offset(amount: Int) -> ConstraintDescriptionEditable func offset(amount: UInt) -> ConstraintDescriptionEditable func offset(amount: CGPoint) -> ConstraintDescriptionEditable func offset(amount: CGSize) -> ConstraintDescriptionEditable func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable func inset(amount: Float) -> ConstraintDescriptionEditable func inset(amount: Double) -> ConstraintDescriptionEditable func inset(amount: CGFloat) -> ConstraintDescriptionEditable func inset(amount: Int) -> ConstraintDescriptionEditable func inset(amount: UInt) -> ConstraintDescriptionEditable func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable } /** Used to expose relation APIs */ public protocol ConstraintDescriptionRelatable: class { func equalTo(other: ConstraintItem) -> ConstraintDescriptionEditable func equalTo(other: View) -> ConstraintDescriptionEditable func equalToSuperview() -> ConstraintDescriptionEditable @available(iOS 7.0, *) func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable @available(iOS 9.0, OSX 10.11, *) func equalTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable func equalTo(other: Float) -> ConstraintDescriptionEditable func equalTo(other: Double) -> ConstraintDescriptionEditable func equalTo(other: CGFloat) -> ConstraintDescriptionEditable func equalTo(other: Int) -> ConstraintDescriptionEditable func equalTo(other: UInt) -> ConstraintDescriptionEditable func equalTo(other: CGSize) -> ConstraintDescriptionEditable func equalTo(other: CGPoint) -> ConstraintDescriptionEditable func equalTo(other: EdgeInsets) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: View) -> ConstraintDescriptionEditable func lessThanOrEqualToSuperview() -> ConstraintDescriptionEditable @available(iOS 7.0, *) func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable @available(iOS 9.0, OSX 10.11, *) func lessThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable func lessThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: View) -> ConstraintDescriptionEditable func greaterThanOrEqualToSuperview() -> ConstraintDescriptionEditable @available(iOS 7.0, *) func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable @available(iOS 9.0, OSX 10.11, *) func greaterThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable func greaterThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable } /** Used to expose chaining APIs */ public protocol ConstraintDescriptionExtendable: ConstraintDescriptionRelatable { var left: ConstraintDescriptionExtendable { get } var top: ConstraintDescriptionExtendable { get } var bottom: ConstraintDescriptionExtendable { get } var right: ConstraintDescriptionExtendable { get } var leading: ConstraintDescriptionExtendable { get } var trailing: ConstraintDescriptionExtendable { get } var width: ConstraintDescriptionExtendable { get } var height: ConstraintDescriptionExtendable { get } var centerX: ConstraintDescriptionExtendable { get } var centerY: ConstraintDescriptionExtendable { get } var baseline: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var firstBaseline: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var leftMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var rightMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var topMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var bottomMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var leadingMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var trailingMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var centerXWithinMargins: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) var centerYWithinMargins: ConstraintDescriptionExtendable { get } } /** Used to internally manage building constraint */ internal class ConstraintDescription: ConstraintDescriptionExtendable, ConstraintDescriptionEditable, ConstraintDescriptionFinalizable { internal var left: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Left) } internal var top: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Top) } internal var right: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Right) } internal var bottom: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Bottom) } internal var leading: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Leading) } internal var trailing: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Trailing) } internal var width: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Width) } internal var height: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Height) } internal var centerX: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterX) } internal var centerY: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterY) } internal var baseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Baseline) } internal var label: String? @available(iOS 8.0, *) internal var firstBaseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.FirstBaseline) } @available(iOS 8.0, *) internal var leftMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.LeftMargin) } @available(iOS 8.0, *) internal var rightMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.RightMargin) } @available(iOS 8.0, *) internal var topMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.TopMargin) } @available(iOS 8.0, *) internal var bottomMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.BottomMargin) } @available(iOS 8.0, *) internal var leadingMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.LeadingMargin) } @available(iOS 8.0, *) internal var trailingMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.TrailingMargin) } @available(iOS 8.0, *) internal var centerXWithinMargins: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterXWithinMargins) } @available(iOS 8.0, *) internal var centerYWithinMargins: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterYWithinMargins) } // MARK: initializer init(fromItem: ConstraintItem) { self.fromItem = fromItem self.toItem = ConstraintItem(object: nil, attributes: ConstraintAttributes.None) } // MARK: equalTo internal func equalTo(other: ConstraintItem) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } internal func equalTo(other: View) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } internal func equalToSuperview() -> ConstraintDescriptionEditable { guard let superview = fromItem.view?.superview else { fatalError("equalToSuperview() requires the view have a superview before being set.") } return self.equalTo(superview) } @available(iOS 7.0, *) internal func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } @available(iOS 9.0, OSX 10.11, *) internal func equalTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } internal func equalTo(other: Float) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } internal func equalTo(other: Double) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .Equal) } internal func equalTo(other: CGFloat) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .Equal) } internal func equalTo(other: Int) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .Equal) } internal func equalTo(other: UInt) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .Equal) } internal func equalTo(other: CGSize) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } internal func equalTo(other: CGPoint) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } internal func equalTo(other: EdgeInsets) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .Equal) } // MARK: lessThanOrEqualTo internal func lessThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: View) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func lessThanOrEqualToSuperview() -> ConstraintDescriptionEditable { guard let superview = fromItem.view?.superview else { fatalError("lessThanOrEqualToSuperview() requires the view have a superview before being set.") } return self.lessThanOrEqualTo(superview) } @available(iOS 7.0, *) internal func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } @available(iOS 9.0, OSX 10.11, *) internal func lessThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func lessThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } // MARK: greaterThanOrEqualTo internal func greaterThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: View) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualToSuperview() -> ConstraintDescriptionEditable { guard let superview = fromItem.view?.superview else { fatalError("greaterThanOrEqualToSuperview() requires the view have a superview before being set.") } return self.greaterThanOrEqualTo(superview) } @available(iOS 7.0, *) internal func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } @available(iOS 9.0, OSX 10.11, *) internal func greaterThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .LessThanOrEqualTo) } internal func greaterThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable { return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } internal func greaterThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable { return self.constrainTo(other, relation: .GreaterThanOrEqualTo) } // MARK: multiplier internal func multipliedBy(amount: Float) -> ConstraintDescriptionEditable { self.multiplier = amount return self } internal func multipliedBy(amount: Double) -> ConstraintDescriptionEditable { return self.multipliedBy(Float(amount)) } internal func multipliedBy(amount: CGFloat) -> ConstraintDescriptionEditable { return self.multipliedBy(Float(amount)) } internal func multipliedBy(amount: Int) -> ConstraintDescriptionEditable { return self.multipliedBy(Float(amount)) } internal func multipliedBy(amount: UInt) -> ConstraintDescriptionEditable { return self.multipliedBy(Float(amount)) } internal func dividedBy(amount: Float) -> ConstraintDescriptionEditable { self.multiplier = 1.0 / amount; return self } internal func dividedBy(amount: Double) -> ConstraintDescriptionEditable { return self.dividedBy(Float(amount)) } internal func dividedBy(amount: CGFloat) -> ConstraintDescriptionEditable { return self.dividedBy(Float(amount)) } internal func dividedBy(amount: Int) -> ConstraintDescriptionEditable { return self.dividedBy(Float(amount)) } internal func dividedBy(amount: UInt) -> ConstraintDescriptionEditable { return self.dividedBy(Float(amount)) } // MARK: offset internal func offset(amount: Float) -> ConstraintDescriptionEditable { self.constant = amount return self } internal func offset(amount: Double) -> ConstraintDescriptionEditable { return self.offset(Float(amount)) } internal func offset(amount: CGFloat) -> ConstraintDescriptionEditable { return self.offset(Float(amount)) } internal func offset(amount: Int) -> ConstraintDescriptionEditable { return self.offset(Float(amount)) } internal func offset(amount: UInt) -> ConstraintDescriptionEditable { return self.offset(Float(amount)) } internal func offset(amount: CGPoint) -> ConstraintDescriptionEditable { self.constant = amount return self } internal func offset(amount: CGSize) -> ConstraintDescriptionEditable { self.constant = amount return self } internal func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable { self.constant = amount return self } // MARK: inset internal func inset(amount: Float) -> ConstraintDescriptionEditable { let value = CGFloat(amount) self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) return self } internal func inset(amount: Double) -> ConstraintDescriptionEditable { let value = CGFloat(amount) self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) return self } internal func inset(amount: CGFloat) -> ConstraintDescriptionEditable { self.constant = EdgeInsets(top: amount, left: amount, bottom: -amount, right: -amount) return self } internal func inset(amount: Int) -> ConstraintDescriptionEditable { let value = CGFloat(amount) self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) return self } internal func inset(amount: UInt) -> ConstraintDescriptionEditable { let value = CGFloat(amount) self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) return self } internal func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable { self.constant = EdgeInsets(top: amount.top, left: amount.left, bottom: -amount.bottom, right: -amount.right) return self } // MARK: priority internal func priority(priority: Float) -> ConstraintDescriptionFinalizable { self.priority = priority return self } internal func priority(priority: Double) -> ConstraintDescriptionFinalizable { return self.priority(Float(priority)) } internal func priority(priority: CGFloat) -> ConstraintDescriptionFinalizable { return self.priority(Float(priority)) } func priority(priority: UInt) -> ConstraintDescriptionFinalizable { return self.priority(Float(priority)) } internal func priority(priority: Int) -> ConstraintDescriptionFinalizable { return self.priority(Float(priority)) } internal func priorityRequired() -> ConstraintDescriptionFinalizable { return self.priority(1000.0) } internal func priorityHigh() -> ConstraintDescriptionFinalizable { return self.priority(750.0) } internal func priorityMedium() -> ConstraintDescriptionFinalizable { #if os(iOS) || os(tvOS) return self.priority(500.0) #else return self.priority(501.0) #endif } internal func priorityLow() -> ConstraintDescriptionFinalizable { return self.priority(250.0) } // MARK: Constraint internal var constraint: Constraint { if self.concreteConstraint == nil { if self.relation == nil { fatalError("Attempting to create a constraint from a ConstraintDescription before it has been fully chained.") } self.concreteConstraint = ConcreteConstraint( fromItem: self.fromItem, toItem: self.toItem, relation: self.relation!, constant: self.constant, multiplier: self.multiplier, priority: self.priority, label: self.label) } return self.concreteConstraint! } func labeled(label: String) -> ConstraintDescriptionFinalizable { self.label = label return self } // MARK: Private private let fromItem: ConstraintItem private var toItem: ConstraintItem { willSet { if self.concreteConstraint != nil { fatalError("Attempting to modify a ConstraintDescription after its constraint has been created.") } } } private var relation: ConstraintRelation? { willSet { if self.concreteConstraint != nil { fatalError("Attempting to modify a ConstraintDescription after its constraint has been created.") } } } private var constant: Any = Float(0.0) { willSet { if self.concreteConstraint != nil { fatalError("Attempting to modify a ConstraintDescription after its constraint has been created.") } } } private var multiplier: Float = 1.0 { willSet { if self.concreteConstraint != nil { fatalError("Attempting to modify a ConstraintDescription after its constraint has been created.") } } } private var priority: Float = 1000.0 { willSet { if self.concreteConstraint != nil { fatalError("Attempting to modify a ConstraintDescription after its constraint has been created.") } } } private var concreteConstraint: ConcreteConstraint? = nil private func addConstraint(attributes: ConstraintAttributes) -> ConstraintDescription { if self.relation == nil { self.fromItem.attributes += attributes } return self } private func constrainTo(other: ConstraintItem, relation: ConstraintRelation) -> ConstraintDescription { if other.attributes != ConstraintAttributes.None { let toLayoutAttributes = other.attributes.layoutAttributes if toLayoutAttributes.count > 1 { let fromLayoutAttributes = self.fromItem.attributes.layoutAttributes if toLayoutAttributes != fromLayoutAttributes { NSException(name: "Invalid Constraint", reason: "Cannot constrain to multiple non identical attributes", userInfo: nil).raise() return self } other.attributes = ConstraintAttributes.None } } self.toItem = other self.relation = relation return self } private func constrainTo(other: View, relation: ConstraintRelation) -> ConstraintDescription { return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation) } @available(iOS 7.0, *) private func constrainTo(other: LayoutSupport, relation: ConstraintRelation) -> ConstraintDescription { return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation) } @available(iOS 9.0, OSX 10.11, *) private func constrainTo(other: NSLayoutAnchor, relation: ConstraintRelation) -> ConstraintDescription { return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation) } private func constrainTo(other: Float, relation: ConstraintRelation) -> ConstraintDescription { self.constant = other return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) } private func constrainTo(other: Double, relation: ConstraintRelation) -> ConstraintDescription { self.constant = other return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) } private func constrainTo(other: CGSize, relation: ConstraintRelation) -> ConstraintDescription { self.constant = other return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) } private func constrainTo(other: CGPoint, relation: ConstraintRelation) -> ConstraintDescription { self.constant = other return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) } private func constrainTo(other: EdgeInsets, relation: ConstraintRelation) -> ConstraintDescription { self.constant = other return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) } } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/ConstraintItem.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to assist in building a constraint */ public class ConstraintItem { internal init(object: AnyObject?, attributes: ConstraintAttributes) { self.object = object self.attributes = attributes } internal weak var object: AnyObject? internal var attributes: ConstraintAttributes internal var view: View? { return self.object as? View } @available(iOS 7.0, *) internal var layoutSupport: LayoutSupport? { return self.object as? LayoutSupport } } internal func ==(left: ConstraintItem, right: ConstraintItem) -> Bool { if left.object == nil { return false } if right.object == nil { return false } if left.object !== right.object { return false } if left.attributes != right.attributes { return false } return true } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/ConstraintMaker.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to make constraints */ public class ConstraintMaker { /// left edge public var left: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Left) } /// top edge public var top: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Top) } /// right edge public var right: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Right) } /// bottom edge public var bottom: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Bottom) } /// leading edge public var leading: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Leading) } /// trailing edge public var trailing: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Trailing) } /// width dimension public var width: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Width) } /// height dimension public var height: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Height) } /// centerX dimension public var centerX: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterX) } /// centerY dimension public var centerY: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterY) } /// baseline position public var baseline: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Baseline) } /// firse baseline position @available(iOS 8.0, *) public var firstBaseline: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.FirstBaseline) } /// left margin @available(iOS 8.0, *) public var leftMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.LeftMargin) } /// right margin @available(iOS 8.0, *) public var rightMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.RightMargin) } /// top margin @available(iOS 8.0, *) public var topMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.TopMargin) } /// bottom margin @available(iOS 8.0, *) public var bottomMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.BottomMargin) } /// leading margin @available(iOS 8.0, *) public var leadingMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.LeadingMargin) } /// trailing margin @available(iOS 8.0, *) public var trailingMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.TrailingMargin) } /// centerX within margins @available(iOS 8.0, *) public var centerXWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterXWithinMargins) } /// centerY within margins @available(iOS 8.0, *) public var centerYWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterYWithinMargins) } /// top + left + bottom + right edges public var edges: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Edges) } /// width + height dimensions public var size: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Size) } // centerX + centerY positions public var center: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Center) } // top + left + bottom + right margins @available(iOS 8.0, *) public var margins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Margins) } // centerX + centerY within margins @available(iOS 8.0, *) public var centerWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterWithinMargins) } internal init(view: View, file: String, line: UInt) { self.view = view self.file = file self.line = line } internal let file: String internal let line: UInt internal let view: View internal var constraintDescriptions = [ConstraintDescription]() internal func makeConstraintDescription(attributes: ConstraintAttributes) -> ConstraintDescription { let item = ConstraintItem(object: self.view, attributes: attributes) let constraintDescription = ConstraintDescription(fromItem: item) self.constraintDescriptions.append(constraintDescription) return constraintDescription } internal class func prepareConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] { let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) let constraints = maker.constraintDescriptions.map { $0.constraint } for constraint in constraints { constraint.makerFile = maker.file constraint.makerLine = maker.line } return constraints } internal class func makeConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { view.translatesAutoresizingMaskIntoConstraints = false let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint } for constraint in constraints { constraint.makerFile = maker.file constraint.makerLine = maker.line constraint.installOnView(updateExisting: false) } } internal class func remakeConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { view.translatesAutoresizingMaskIntoConstraints = false let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) self.removeConstraints(view: view) let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint } for constraint in constraints { constraint.makerFile = maker.file constraint.makerLine = maker.line constraint.installOnView(updateExisting: false) } } internal class func updateConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { view.translatesAutoresizingMaskIntoConstraints = false let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint} for constraint in constraints { constraint.makerFile = maker.file constraint.makerLine = maker.line constraint.installOnView(updateExisting: true) } } internal class func removeConstraints(view view: View) { for existingLayoutConstraint in view.snp_installedLayoutConstraints { existingLayoutConstraint.snp_constraint?.uninstall() } } } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/ConstraintRelation.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to define `NSLayoutRelation` */ internal enum ConstraintRelation: Int { case Equal = 1, LessThanOrEqualTo, GreaterThanOrEqualTo internal var layoutRelation: NSLayoutRelation { get { switch(self) { case .LessThanOrEqualTo: return .LessThanOrEqual case .GreaterThanOrEqualTo: return .GreaterThanOrEqual default: return .Equal } } } } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/Debugging.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to allow adding a snp_label to a View for debugging purposes */ public extension View { public var snp_label: String? { get { return objc_getAssociatedObject(self, &labelKey) as? String } set { objc_setAssociatedObject(self, &labelKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY_NONATOMIC) } } } /** Used to allow adding a snp_label to a LayoutConstraint for debugging purposes */ public extension LayoutConstraint { public var snp_label: String? { get { return objc_getAssociatedObject(self, &labelKey) as? String } set { objc_setAssociatedObject(self, &labelKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY_NONATOMIC) } } override public var description: String { var description = "<" description += descriptionForObject(self) if let firstItem: AnyObject = self.firstItem { description += " \(descriptionForObject(firstItem))" } if self.firstAttribute != .NotAnAttribute { description += ".\(self.firstAttribute.snp_description)" } description += " \(self.relation.snp_description)" if let secondItem: AnyObject = self.secondItem { description += " \(descriptionForObject(secondItem))" } if self.secondAttribute != .NotAnAttribute { description += ".\(self.secondAttribute.snp_description)" } if self.multiplier != 1.0 { description += " * \(self.multiplier)" } if self.secondAttribute == .NotAnAttribute { description += " \(self.constant)" } else { if self.constant > 0.0 { description += " + \(self.constant)" } else if self.constant < 0.0 { description += " - \(CGFloat.abs(self.constant))" } } if self.priority != 1000.0 { description += " ^\(self.priority)" } description += ">" return description } internal var snp_makerFile: String? { return self.snp_constraint?.makerFile } internal var snp_makerLine: UInt? { return self.snp_constraint?.makerLine } } private var labelKey = "" private func descriptionForObject(object: AnyObject) -> String { let pointerDescription = NSString(format: "%p", ObjectIdentifier(object).uintValue) var desc = "" desc += object.dynamicType.description() if let object = object as? View { desc += ":\(object.snp_label ?? pointerDescription)" } else if let object = object as? LayoutConstraint { desc += ":\(object.snp_label ?? pointerDescription)" } else { desc += ":\(pointerDescription)" } if let object = object as? LayoutConstraint, let file = object.snp_makerFile, let line = object.snp_makerLine { desc += "@\(file)#\(line)" } desc += "" return desc } private extension NSLayoutRelation { private var snp_description: String { switch self { case .Equal: return "==" case .GreaterThanOrEqual: return ">=" case .LessThanOrEqual: return "<=" } } } private extension NSLayoutAttribute { private var snp_description: String { #if os(iOS) || os(tvOS) switch self { case .NotAnAttribute: return "notAnAttribute" case .Top: return "top" case .Left: return "left" case .Bottom: return "bottom" case .Right: return "right" case .Leading: return "leading" case .Trailing: return "trailing" case .Width: return "width" case .Height: return "height" case .CenterX: return "centerX" case .CenterY: return "centerY" case .LastBaseline: return "baseline" case .FirstBaseline: return "firstBaseline" case .TopMargin: return "topMargin" case .LeftMargin: return "leftMargin" case .BottomMargin: return "bottomMargin" case .RightMargin: return "rightMargin" case .LeadingMargin: return "leadingMargin" case .TrailingMargin: return "trailingMargin" case .CenterXWithinMargins: return "centerXWithinMargins" case .CenterYWithinMargins: return "centerYWithinMargins" } #else switch self { case .NotAnAttribute: return "notAnAttribute" case .Top: return "top" case .Left: return "left" case .Bottom: return "bottom" case .Right: return "right" case .Leading: return "leading" case .Trailing: return "trailing" case .Width: return "width" case .Height: return "height" case .CenterX: return "centerX" case .CenterY: return "centerY" case .LastBaseline: return "baseline" default: return "default" } #endif } } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/EdgeInsets.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit public typealias EdgeInsets = UIEdgeInsets public func EdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> EdgeInsets { return EdgeInsets(top: top, left: left, bottom: bottom, right: right) } public let EdgeInsetsZero = EdgeInsets(top: 0, left: 0, bottom: 0, right: 0) #else import AppKit public typealias EdgeInsets = NSEdgeInsets public func EdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> EdgeInsets { return EdgeInsets(top: top, left: left, bottom: bottom, right: right) } public let EdgeInsetsZero = EdgeInsets(top: 0, left: 0, bottom: 0, right: 0) #endif ================================================ FILE: Carthage/Checkouts/SnapKit/Source/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Carthage/Checkouts/SnapKit/Source/LayoutConstraint.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit #else import AppKit #endif /** Used to add extra information to the actual `NSLayoutConstraint`'s that will UIKit/AppKit will utilize */ public class LayoutConstraint: NSLayoutConstraint { internal var snp_constraint: Constraint? = nil } internal func ==(left: LayoutConstraint, right: LayoutConstraint) -> Bool { if left.firstItem !== right.firstItem { return false } if left.secondItem !== right.secondItem { return false } if left.firstAttribute != right.firstAttribute { return false } if left.secondAttribute != right.secondAttribute { return false } if left.relation != right.relation { return false } if left.priority != right.priority { return false } if left.multiplier != right.multiplier { return false } return true } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/SnapKit.h ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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_EXPORT double SnapKitVersionNumber; FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; ================================================ FILE: Carthage/Checkouts/SnapKit/Source/SnapKit.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit public typealias InterfaceLayoutDirection = UIUserInterfaceLayoutDirection public typealias LayoutSupport = UILayoutSupport #else import AppKit public typealias InterfaceLayoutDirection = NSUserInterfaceLayoutDirection public class LayoutSupport {} #endif /** Used to configure different parts of SnapKit */ public struct Config { /// The interface layout direction public static var interfaceLayoutDirection = InterfaceLayoutDirection.LeftToRight } ================================================ FILE: Carthage/Checkouts/SnapKit/Source/View+SnapKit.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit public typealias View = UIView #else import AppKit public typealias View = NSView #endif /** Used to expose public API on views */ public extension View { /// left edge public var snp_left: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Left) } /// top edge public var snp_top: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Top) } /// right edge public var snp_right: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Right) } /// bottom edge public var snp_bottom: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Bottom) } /// leading edge public var snp_leading: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Leading) } /// trailing edge public var snp_trailing: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Trailing) } /// width dimension public var snp_width: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Width) } /// height dimension public var snp_height: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Height) } /// centerX position public var snp_centerX: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.CenterX) } /// centerY position public var snp_centerY: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.CenterY) } /// baseline position public var snp_baseline: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Baseline) } /// first baseline position @available(iOS 8.0, *) public var snp_firstBaseline: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.FirstBaseline) } /// left margin @available(iOS 8.0, *) public var snp_leftMargin: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.LeftMargin) } /// right margin @available(iOS 8.0, *) public var snp_rightMargin: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.RightMargin) } /// top margin @available(iOS 8.0, *) public var snp_topMargin: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.TopMargin) } /// bottom margin @available(iOS 8.0, *) public var snp_bottomMargin: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.BottomMargin) } /// leading margin @available(iOS 8.0, *) public var snp_leadingMargin: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.LeadingMargin) } /// trailing margin @available(iOS 8.0, *) public var snp_trailingMargin: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.TrailingMargin) } /// centerX within margins @available(iOS 8.0, *) public var snp_centerXWithinMargins: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.CenterXWithinMargins) } /// centerY within margins @available(iOS 8.0, *) public var snp_centerYWithinMargins: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.CenterYWithinMargins) } // top + left + bottom + right edges public var snp_edges: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Edges) } // width + height dimensions public var snp_size: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Size) } // centerX + centerY positions public var snp_center: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Center) } // top + left + bottom + right margins @available(iOS 8.0, *) public var snp_margins: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.Margins) } // centerX + centerY within margins @available(iOS 8.0, *) public var snp_centerWithinMargins: ConstraintItem { return ConstraintItem(object: self, attributes: ConstraintAttributes.CenterWithinMargins) } /** Prepares constraints with a `ConstraintMaker` and returns the made constraints but does not install them. - parameter closure that will be passed the `ConstraintMaker` to make the constraints with - returns: the constraints made */ public func snp_prepareConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] { return ConstraintMaker.prepareConstraints(view: self, file: file, line: line, closure: closure) } /** Makes constraints with a `ConstraintMaker` and installs them along side any previous made constraints. - parameter closure that will be passed the `ConstraintMaker` to make the constraints with */ public func snp_makeConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> Void { ConstraintMaker.makeConstraints(view: self, file: file, line: line, closure: closure) } /** Updates constraints with a `ConstraintMaker` that will replace existing constraints that match and install new ones. For constraints to match only the constant can be updated. - parameter closure that will be passed the `ConstraintMaker` to update the constraints with */ public func snp_updateConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> Void { ConstraintMaker.updateConstraints(view: self, file: file, line: line, closure: closure) } /** Remakes constraints with a `ConstraintMaker` that will first remove all previously made constraints and make and install new ones. - parameter closure that will be passed the `ConstraintMaker` to remake the constraints with */ public func snp_remakeConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> Void { ConstraintMaker.remakeConstraints(view: self, file: file, line: line, closure: closure) } /** Removes all previously made constraints. */ public func snp_removeConstraints() { ConstraintMaker.removeConstraints(view: self) } internal var snp_installedLayoutConstraints: [LayoutConstraint] { get { if let constraints = objc_getAssociatedObject(self, &installedLayoutConstraintsKey) as? [LayoutConstraint] { return constraints } return [] } set { objc_setAssociatedObject(self, &installedLayoutConstraintsKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } private var installedLayoutConstraintsKey = "" ================================================ FILE: Carthage/Checkouts/SnapKit/Source/ViewController+SnapKit.swift ================================================ // // SnapKit // // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit // // 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) import UIKit /** Used to expose public API on view controllers */ public extension UIViewController { /// top layout guide top public var snp_topLayoutGuideTop: ConstraintItem { return ConstraintItem(object: self.topLayoutGuide, attributes: ConstraintAttributes.Top) } /// top layout guide bottom public var snp_topLayoutGuideBottom: ConstraintItem { return ConstraintItem(object: self.topLayoutGuide, attributes: ConstraintAttributes.Bottom) } /// bottom layout guide top public var snp_bottomLayoutGuideTop: ConstraintItem { return ConstraintItem(object: self.bottomLayoutGuide, attributes: ConstraintAttributes.Top) } /// bottom layout guide bottom public var snp_bottomLayoutGuideBottom: ConstraintItem { return ConstraintItem(object: self.bottomLayoutGuide, attributes: ConstraintAttributes.Bottom) } } #endif ================================================ FILE: Carthage/Checkouts/SnapKit/Tests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Carthage/Checkouts/SnapKit/Tests/Tests.swift ================================================ #if os(iOS) || os(tvOS) import UIKit typealias View = UIView extension View { var snp_constraints: [AnyObject] { return self.constraints } } #else import AppKit typealias View = NSView extension View { var snp_constraints: [AnyObject] { return self.constraints } } #endif import XCTest import SnapKit class SnapKitTests: XCTestCase { let container = View() override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test method in the class. } override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } func testLayoutGuideConstraints() { #if os(iOS) || os(tvOS) let vc = UIViewController() vc.view = UIView(frame: CGRectMake(0, 0, 300, 300)) vc.view.addSubview(self.container) self.container.snp_makeConstraints { (make) -> Void in make.top.equalTo(vc.snp_topLayoutGuideBottom) make.bottom.equalTo(vc.snp_bottomLayoutGuideTop) } XCTAssertEqual(vc.view.snp_constraints.count, 6, "Should have 6 constraints installed") #endif } func testMakeConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) v1.snp_makeConstraints { (make) -> Void in make.top.equalTo(v2.snp_top).offset(50) make.left.equalTo(v2.snp_top).offset(50) return } XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints installed") v2.snp_makeConstraints { (make) -> Void in make.edges.equalTo(v1) return } XCTAssertEqual(self.container.snp_constraints.count, 6, "Should have 6 constraints installed") } func testUpdateConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) v1.snp_makeConstraints { (make) -> Void in make.top.equalTo(v2.snp_top).offset(50) make.left.equalTo(v2.snp_top).offset(50) return } XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints installed") v1.snp_updateConstraints { (make) -> Void in make.top.equalTo(v2.snp_top).offset(15) return } XCTAssertEqual(self.container.snp_constraints.count, 2, "Should still have 2 constraints installed") } func testRemakeConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) v1.snp_makeConstraints { (make) -> Void in make.top.equalTo(v2.snp_top).offset(50) make.left.equalTo(v2.snp_top).offset(50) return } XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints installed") v1.snp_remakeConstraints { (make) -> Void in make.edges.equalTo(v2) return } XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 4 constraints installed") } func testRemoveConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) v1.snp_makeConstraints { (make) -> Void in make.top.equalTo(v2.snp_top).offset(50) make.left.equalTo(v2.snp_top).offset(50) return } XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints installed") v1.snp_removeConstraints() XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints installed") } func testPrepareConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) let constraints = v1.snp_prepareConstraints { (make) -> Void in make.edges.equalTo(v2) return } XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints installed") for constraint in constraints { constraint.install() } XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 4 constraints installed") for constraint in constraints { constraint.uninstall() } XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints installed") } func testReinstallConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) let constraints = v1.snp_prepareConstraints { (make) -> Void in make.edges.equalTo(v2) return } XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints installed") for constraint in constraints { constraint.install() } XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 4 constraints installed") for constraint in constraints { constraint.install() } XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 0 constraints installed") } func testActivateDeactivateConstraints() { let v1 = View() let v2 = View() self.container.addSubview(v1) self.container.addSubview(v2) var c1: Constraint? = nil var c2: Constraint? = nil v1.snp_prepareConstraints { (make) -> Void in c1 = make.top.equalTo(v2.snp_top).offset(50).constraint c2 = make.left.equalTo(v2.snp_top).offset(50).constraint return } XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints") c1?.activate() c2?.activate() XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints") c1?.deactivate() c2?.deactivate() XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints") c1?.uninstall() c2?.uninstall() XCTAssertEqual(self.container.snp_constraints.count, 0, "Should have 0 constraints") c1?.activate() c2?.activate() XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints") } func testSizeConstraints() { let view = View() self.container.addSubview(view) view.snp_makeConstraints { (make) -> Void in make.size.equalTo(CGSizeMake(50, 50)) make.left.top.equalTo(self.container) } XCTAssertEqual(view.snp_constraints.count, 2, "Should have 2 constraints") XCTAssertEqual(self.container.snp_constraints.count, 2, "Should have 2 constraints") let constraints = view.snp_constraints as! [NSLayoutConstraint] XCTAssertEqual(constraints[0].firstAttribute, NSLayoutAttribute.Width, "Should be width") XCTAssertEqual(constraints[1].firstAttribute, NSLayoutAttribute.Height, "Should be height") XCTAssertEqual(constraints[0].constant, 50, "Should be 50") XCTAssertEqual(constraints[1].constant, 50, "Should be 50") } func testConstraintIdentifier() { let identifier = "Test-Identifier" let view = View() self.container.addSubview(view) view.snp_makeConstraints { (make) -> Void in make.top.equalTo(self.container.snp_top).labeled(identifier) } let constraints = container.snp_constraints as! [NSLayoutConstraint] XCTAssertEqual(constraints[0].identifier, identifier, "Identifier should be 'Test'") } func testSuperviewConstraints() { let view = View() container.addSubview(view) view.snp_makeConstraints { (make) -> Void in make.top.equalToSuperview().inset(10) make.bottom.equalToSuperview().inset(10) } XCTAssertEqual(container.snp_constraints.count, 2, "Should have 2 constraints") let constraints = container.snp_constraints as! [NSLayoutConstraint] XCTAssertEqual(constraints[0].firstAttribute, NSLayoutAttribute.Top, "Should be top") XCTAssertEqual(constraints[1].firstAttribute, NSLayoutAttribute.Bottom, "Should be bottom") XCTAssertEqual(constraints[0].secondAttribute, NSLayoutAttribute.Top, "Should be top") XCTAssertEqual(constraints[1].secondAttribute, NSLayoutAttribute.Bottom, "Should be bottom") XCTAssertEqual(constraints[0].firstItem as? View, view, "Should be added subview") XCTAssertEqual(constraints[1].firstItem as? View, view, "Should be added subview") XCTAssertEqual(constraints[0].secondItem as? View, container, "Should be containerView") XCTAssertEqual(constraints[1].secondItem as? View, container, "Should be containerView") XCTAssertEqual(constraints[0].constant, 10, "Should be 10") XCTAssertEqual(constraints[1].constant, -10, "Should be 10") } } ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Martin Richter 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: README.md ================================================ SwiftGoal ========= [![Sponsored](https://img.shields.io/badge/chilicorn-sponsored-brightgreen.svg)](http://spiceprogram.org/oss-sponsorship/) [![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/) This project showcases the Model-View-ViewModel (MVVM) architecture with [ReactiveCocoa 4][reactive-cocoa], while serving as a digital logbook of [FIFA matches][fifa-wikipedia]. It was inspired on a theoretical level by Justin Spahr-Summers' talk [Enemy of the State][enemy-of-the-state], and on a more practical one by Ash Furrow's [C-41][c-41] app. [reactive-cocoa]: https://github.com/ReactiveCocoa/ReactiveCocoa [fifa-wikipedia]: https://en.wikipedia.org/wiki/FIFA_(video_game_series) [enemy-of-the-state]: https://github.com/jspahrsummers/enemy-of-the-state [c-41]: https://github.com/ashfurrow/C-41 As the Swift language and the ecosystem around it [matured][reactive-cocoa-releases], porting the original [ObjectiveGoal][objective-goal] project became a natural next step, as Swift's type safety makes it a perfect fit for functional reactive programming. [reactive-cocoa-releases]: https://github.com/ReactiveCocoa/ReactiveCocoa/releases [objective-goal]: https://github.com/richeterre/ObjectiveGoal Requirements ------------ SwiftGoal runs on iOS 9+ and requires Xcode 8 with Swift 2.3 to build. Setup ----- No separate backend is required to use the app, as it stores all its data locally in the `Documents` directory by default. Note that things might break in future releases, e.g. if some model fields change! Also, you need to _terminate_ the app to trigger a write to local storage. For serious use and if you want to share data across multiple devices, I recommend you use [Goalbase][goalbase] as a backend. It's easy to get started: 1. Follow the setup instructions in the [Goalbase documentation][goalbase-docs]. 2. Enable the "Use Remote Store" switch under _Settings > SwiftGoal_. 3. Make sure the base URL is set correctly. The default value should be fine if you run `rails server` in your Goalbase directory, but for a remote setup (e.g. on Heroku) you'll need to update this setting. [goalbase]: https://github.com/richeterre/goalbase [goalbase-docs]: https://github.com/richeterre/goalbase/blob/master/README.md Unit Tests ---------- SwiftGoal is thoroughly covered by unit tests, which are written with [Quick][quick] and [Nimble][nimble]. An advantage of such [BDD-style][bdd-wikipedia] frameworks is that they document the behavior of the tested code in plain English. To run the unit tests, simply hit `Cmd + U` in Xcode. [quick]: https://github.com/Quick/Quick [nimble]: https://github.com/Quick/Nimble [bdd-wikipedia]: https://en.wikipedia.org/wiki/Behavior-driven_development User Features ------------- * [x] Create players * [x] Create matches with home/away players and score * [x] View list of matches * [x] Edit existing match information * [x] Delete matches * [x] Pull-to-refresh any list in the app * [x] See animated list changes * [x] Enjoy custom fonts and colors * [x] Get alerts about network and server errors * [x] View player rankings * [ ] Switch between different ranking periods (last month, all time, …) * [ ] See date and time of each match * [ ] See matches grouped by date range (e.g. last week, last month, earlier) * [ ] View more player statistics (e.g. won/drawn/lost count, nemesis player, …) Code Checklist -------------- * [x] Validate player name before creating * [x] Validate match player counts before creating * [x] Move base URL to Settings for easy customization * [ ] Cancel network requests when the associated view becomes inactive * [ ] Retry network requests 1 or 2 times before giving up * [x] Detect and animate match data changes * [x] Write tests for models * [x] Write tests for view models * [ ] Write tests for helpers and store * [x] Deduplicate `isActiveSignal` code on view controllers (via a class extension) * [ ] Create watchOS 2 app for quick match entry [snapkit]: https://github.com/SnapKit/SnapKit Benefits of MVVM ---------------- __High testability:__ The basic premise of testing is to verify correct output for a given input. As a consequence, any class that minimizes the amount of dependencies affecting its output becomes a good candidate for testing. MVVM's separation of logic (the view model layer) from presentation (the view layer) means that the view model can be tested with minimal setup. For instance, injecting a mock `Store` that provides a known amount of `Match` instances is enough to verify that the `MatchesViewModel` reports the correct amount of matches. The view layer becomes trivial, as it simply binds to those outputs. __Better separation of concerns:__ `UIViewController` and its friends have been rightfully [scorned][mvc-tweet] for handling far too many things, from interface rotation to networking to providing table data. MVVM solves this by making a clear cut between UI and business logic. While a view controller would still acts as its table view's data source, it forwards the actual data queries to its own view model. Presentation details, such as animating new rows into the table view, will be handled in the view layer. __Encapsulation of state:__ As suggested by Gary Bernhardt in his famous talk [“Boundaries”][boundaries-talk], view models offer a stateful shell around the stateless core of the app, the model layer. If need be, the app's state can be persisted and restored simply by storing the view model. While the view may be extremely stateful too, its state is ultimately derived from that of the view model, and thus does not require to be stored. [mvc-tweet]: https://twitter.com/colin_campbell/status/293167951132098560 [boundaries-talk]: https://www.destroyallsoftware.com/talks/boundaries Acknowledgements ---------------- This project is kindly sponsored by [Futurice][futurice] as part of their fantastic [open-source program][spice-program]. Kiitos! The icons within the app are courtesy of [Icons8][icons8] – a resource well worth checking out. [futurice]: http://futurice.com/ [spice-program]: http://www.spiceprogram.org/ [icons8]: https://icons8.com/ ================================================ FILE: SwiftGoal/AppDelegate.swift ================================================ // // AppDelegate.swift // SwiftGoal // // Created by Martin Richter on 10/05/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var store: StoreType? let tabBarController = UITabBarController() // Keys and default values for Settings private let useRemoteStoreSettingKey = "use_remote_store_setting" private let useRemoteStoreSettingDefault = false private let baseURLSettingKey = "base_url_setting" private let baseURLSettingDefault = "http://localhost:3000/api/v1/" func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window = UIWindow(frame: UIScreen.mainScreen().bounds) customizeAppAppearance() let userDefaults = NSUserDefaults.standardUserDefaults() registerInitialSettings(userDefaults) // Set tab-level view controllers with appropriate store store = storeForUserDefaults(userDefaults) tabBarController.viewControllers = tabViewControllersForStore(store) // Register for settings changes as store might have changed NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: NSUserDefaultsDidChangeNotification, object: nil) window?.rootViewController = tabBarController window?.makeKeyAndVisible() return true } func applicationWillTerminate(application: UIApplication) { archiveStoreIfLocal() } // MARK: Notifications func userDefaultsDidChange(notification: NSNotification) { if let userDefaults = notification.object as? NSUserDefaults { archiveStoreIfLocal() store = storeForUserDefaults(userDefaults) tabBarController.viewControllers = tabViewControllersForStore(store) } } // MARK: Private Helpers private func customizeAppAppearance() { UIApplication.sharedApplication().statusBarStyle = .LightContent let tintColor = Color.primaryColor window?.tintColor = tintColor UINavigationBar.appearance().barTintColor = tintColor UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().titleTextAttributes = [ NSFontAttributeName: UIFont(name: "OpenSans-Semibold", size: 20)!, NSForegroundColorAttributeName: UIColor.whiteColor() ] UINavigationBar.appearance().translucent = false UIBarButtonItem.appearance().setTitleTextAttributes( [NSFontAttributeName: UIFont(name: "OpenSans", size: 17)!], forState: .Normal ) } private func registerInitialSettings(userDefaults: NSUserDefaults) { if userDefaults.objectForKey(useRemoteStoreSettingKey) == nil { userDefaults.setBool(useRemoteStoreSettingDefault, forKey: useRemoteStoreSettingKey) } if userDefaults.stringForKey(baseURLSettingKey) == nil { userDefaults.setObject(baseURLSettingDefault, forKey: baseURLSettingKey) } } /// Archives the current store to disk if it's a local store. private func archiveStoreIfLocal() { if let localStore = store as? LocalStore { localStore.archiveToDisk() } } private func storeForUserDefaults(userDefaults: NSUserDefaults) -> StoreType { if userDefaults.boolForKey(useRemoteStoreSettingKey) == true { // Create remote store let baseURLString = userDefaults.stringForKey(baseURLSettingKey) ?? baseURLSettingDefault let baseURL = baseURLFromString(baseURLString) return RemoteStore(baseURL: baseURL) } else { // Create local store let store = LocalStore() store.unarchiveFromDisk() return store } } private func baseURLFromString(string: String) -> NSURL { var baseURLString = string // Append forward slash if needed to ensure proper relative URL behavior let forwardSlash: Character = "/" if !baseURLString.hasSuffix(String(forwardSlash)) { baseURLString.append(forwardSlash) } return NSURL(string: baseURLString) ?? NSURL(string: baseURLSettingDefault)! } private func tabViewControllersForStore(store: StoreType?) -> [UIViewController] { guard let store = store else { return [] } let matchesViewModel = MatchesViewModel(store: store) let matchesViewController = MatchesViewController(viewModel: matchesViewModel) let matchesNavigationController = UINavigationController(rootViewController: matchesViewController) matchesNavigationController.tabBarItem = UITabBarItem( title: matchesViewModel.title, image: UIImage(named: "FootballFilled"), selectedImage: UIImage(named: "FootballFilled") ) let rankingsViewModel = RankingsViewModel(store: store) let rankingsViewController = RankingsViewController(viewModel: rankingsViewModel) let rankingsNavigationController = UINavigationController(rootViewController: rankingsViewController) rankingsNavigationController.tabBarItem = UITabBarItem( title: rankingsViewModel.title, image: UIImage(named: "Crown"), selectedImage: UIImage(named: "CrownFilled") ) return [matchesNavigationController, rankingsNavigationController] } } ================================================ FILE: SwiftGoal/Base.lproj/LaunchScreen.xib ================================================ ================================================ FILE: SwiftGoal/Helpers/Color.swift ================================================ // // Color.swift // SwiftGoal // // Created by Martin Richter on 27/07/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import UIKit struct Color { static let primaryColor = UIColor(red:0.99, green:0.54, blue:0.19, alpha:1) static let lighterPrimaryColor = UIColor(red:1, green:0.64, blue:0.29, alpha:1) } ================================================ FILE: SwiftGoal/Helpers/Extensions.swift ================================================ // // Extensions.swift // SwiftGoal // // Created by Martin Richter on 23/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa import Result extension Array { func difference(otherArray: [T]) -> [T] { var result = [T]() for e in self { if let element = e as? T { if !otherArray.contains(element) { result.append(element) } } } return result } func intersection(otherArray: [T]) -> [T] { var result = [T]() for e in self { if let element = e as? T { if otherArray.contains(element) { result.append(element) } } } return result } } extension UIStepper { func signalProducer() -> SignalProducer { return self.rac_newValueChannelWithNilValue(0).toSignalProducer() .map { $0 as! Int } .flatMapError { _ in return SignalProducer.empty } } } extension UITextField { func signalProducer() -> SignalProducer { return self.rac_textSignal().toSignalProducer() .map { $0 as! String } .flatMapError { _ in return SignalProducer.empty } } } extension UIViewController { func isActive() -> SignalProducer { // Track whether view is visible let viewWillAppear = rac_signalForSelector(#selector(viewWillAppear(_:))).toSignalProducer() let viewWillDisappear = rac_signalForSelector(#selector(viewWillDisappear(_:))).toSignalProducer() let viewIsVisible = SignalProducer, NoError>(values: [ viewWillAppear.map { _ in true }, viewWillDisappear.map { _ in false } ]).flatten(.Merge) // Track whether app is in foreground let notificationCenter = NSNotificationCenter.defaultCenter() let didBecomeActive = notificationCenter .rac_addObserverForName(UIApplicationDidBecomeActiveNotification, object: nil) .toSignalProducer() let willBecomeInactive = notificationCenter .rac_addObserverForName(UIApplicationWillResignActiveNotification, object: nil) .toSignalProducer() let appIsActive = SignalProducer, NoError>(values: [ SignalProducer(value: true), // Account for app being initially active without notification didBecomeActive.map { _ in true }, willBecomeInactive.map { _ in false } ]).flatten(.Merge) // View controller is active iff both are true: return combineLatest(viewIsVisible, appIsActive) .map { $0 && $1 } .flatMapError { _ in SignalProducer.empty } } } ================================================ FILE: SwiftGoal/Helpers/RankingEngine.swift ================================================ // // RankingEngine.swift // SwiftGoal // // Created by Martin Richter on 02/01/16. // Copyright © 2016 Martin Richter. All rights reserved. // class RankingEngine { private let pointsForWin = 3 private let pointsForTie = 1 private let pointsForLoss = 0 private enum Side { case Home case Away } func rankingsForPlayers(players: [Player], fromMatches matches: [Match]) -> [Ranking] { if players.isEmpty { return [] } if matches.isEmpty { return players.map { player in return Ranking(player: player, rating: 0) } } let rankings = players.map { (player: Player) -> Ranking in let homeMatches = matches.filter { $0.homePlayers.contains(player) } let awayMatches = matches.filter { $0.awayPlayers.contains(player) } let homePoints = homeMatches.reduce(0, combine: { sum, match in return sum + pointsFromMatch(match, forSide: .Home) }) let awayPoints = awayMatches.reduce(0, combine: { sum, match in return sum + pointsFromMatch(match, forSide: .Away) }) let maxHomePoints = homeMatches.count * pointsForWin let maxAwayPoints = awayMatches.count * pointsForWin let rating = 10 * Float(homePoints + awayPoints) / Float(maxHomePoints + maxAwayPoints) return Ranking(player: player, rating: rating) } return rankings.sort { lhs, rhs in lhs.rating > rhs.rating } } // MARK: Private Helpers private func pointsFromMatch(match: Match, forSide side: Side) -> Int { if match.homeGoals > match.awayGoals { return side == .Home ? pointsForWin : pointsForLoss } else if match.awayGoals > match.homeGoals { return side == .Home ? pointsForLoss : pointsForWin } else { return pointsForTie } } } ================================================ FILE: SwiftGoal/Images.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-Small@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-Small@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-40@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-60@2x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-60@2x-1.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-60@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-Small.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-Small@2x-1.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-40.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-40@2x-1.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-76.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-76@2x.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "Icon-83.5@2x.png", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: SwiftGoal/Images.xcassets/Crown.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x", "filename" : "Crown@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: SwiftGoal/Images.xcassets/CrownFilled.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x", "filename" : "CrownFilled@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: SwiftGoal/Images.xcassets/FootballFilled.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x", "filename" : "FootballFilled@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: SwiftGoal/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 0.1 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS NSAppTransportSecurity NSExceptionDomains localhost NSExceptionAllowsInsecureHTTPLoads UIAppFonts OpenSans-Regular.ttf OpenSans-Semibold.ttf UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UIStatusBarStyle UIStatusBarStyleLightContent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance ================================================ FILE: SwiftGoal/Models/Changeset.swift ================================================ // // Changeset.swift // SwiftGoal // // Created by Martin Richter on 01/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Foundation struct Changeset { var deletions: [NSIndexPath] var modifications: [NSIndexPath] var insertions: [NSIndexPath] typealias ContentMatches = (T, T) -> Bool init(oldItems: [T], newItems: [T], contentMatches: ContentMatches) { deletions = oldItems.difference(newItems).map { item in return Changeset.indexPathForIndex(oldItems.indexOf(item)!) } modifications = oldItems.intersection(newItems) .filter({ item in let newItem = newItems[newItems.indexOf(item)!] return !contentMatches(item, newItem) }) .map({ item in return Changeset.indexPathForIndex(oldItems.indexOf(item)!) }) insertions = newItems.difference(oldItems).map { item in return NSIndexPath(forRow: newItems.indexOf(item)!, inSection: 0) } } private static func indexPathForIndex(index: Int) -> NSIndexPath { return NSIndexPath(forRow: index, inSection: 0) } } ================================================ FILE: SwiftGoal/Models/Encodable.swift ================================================ // // Encodable.swift // SwiftGoal // // Created by Martin Richter on 01/01/16. // Copyright © 2016 Martin Richter. All rights reserved. // protocol Encodable { func encode() -> [String: AnyObject] } ================================================ FILE: SwiftGoal/Models/Match.swift ================================================ // // Match.swift // SwiftGoal // // Created by Martin Richter on 11/05/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Argo import Curry struct Match { let identifier: String let homePlayers: [Player] let awayPlayers: [Player] let homeGoals: Int let awayGoals: Int static private let identifierKey = "id" static private let homePlayersKey = "home_players" static private let awayPlayersKey = "away_players" static private let homeGoalsKey = "home_goals" static private let awayGoalsKey = "away_goals" init(identifier: String, homePlayers: [Player], awayPlayers: [Player], homeGoals: Int, awayGoals: Int) { self.identifier = identifier self.homePlayers = homePlayers self.awayPlayers = awayPlayers self.homeGoals = homeGoals self.awayGoals = awayGoals } // TODO: Decide if content matching should include identifier or not static func contentMatches(lhs: Match, _ rhs: Match) -> Bool { return lhs.identifier == rhs.identifier && Player.contentMatches(lhs.homePlayers, rhs.homePlayers) && Player.contentMatches(lhs.awayPlayers, rhs.awayPlayers) && lhs.homeGoals == rhs.homeGoals && lhs.awayGoals == rhs.awayGoals } } // MARK: Equatable extension Match: Equatable {} func ==(lhs: Match, rhs: Match) -> Bool { return lhs.identifier == rhs.identifier } // MARK: Decodable extension Match: Decodable { static func decode(json: JSON) -> Decoded { return curry(Match.init) <^> json <| identifierKey <*> json <|| homePlayersKey <*> json <|| awayPlayersKey <*> json <| homeGoalsKey <*> json <| awayGoalsKey } } // MARK: Encodable extension Match: Encodable { func encode() -> [String: AnyObject] { return [ Match.identifierKey: identifier, Match.homePlayersKey: homePlayers.map { $0.encode() }, Match.awayPlayersKey: awayPlayers.map { $0.encode() }, Match.homeGoalsKey: homeGoals, Match.awayGoalsKey: awayGoals ] } } ================================================ FILE: SwiftGoal/Models/Player.swift ================================================ // // Player.swift // SwiftGoal // // Created by Martin Richter on 02/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Argo import Curry struct Player { let identifier: String let name: String static private let identifierKey = "id" static private let nameKey = "name" init(identifier: String, name: String) { self.identifier = identifier self.name = name } static func contentMatches(lhs: Player, _ rhs: Player) -> Bool { return lhs.identifier == rhs.identifier && lhs.name == rhs.name } static func contentMatches(lhs: [Player], _ rhs: [Player]) -> Bool { if lhs.count != rhs.count { return false } for (index, player) in lhs.enumerate() { if !contentMatches(rhs[index], player) { return false } } return true } } // MARK: Equatable func ==(lhs: Player, rhs: Player) -> Bool { return lhs.identifier == rhs.identifier } // MARK: Hashable extension Player: Hashable { var hashValue: Int { return identifier.hashValue } } // MARK: Decodable extension Player: Decodable { static func decode(json: JSON) -> Decoded { return curry(Player.init) <^> json <| identifierKey <*> json <| nameKey } } // MARK: Encodable extension Player: Encodable { func encode() -> [String: AnyObject] { return [ Player.identifierKey: identifier, Player.nameKey: name ] } } ================================================ FILE: SwiftGoal/Models/Ranking.swift ================================================ // // Ranking.swift // SwiftGoal // // Created by Martin Richter on 24/07/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Argo import Curry struct Ranking { let player: Player let rating: Float static func contentMatches(lhs: Ranking, _ rhs: Ranking) -> Bool { return Player.contentMatches(lhs.player, rhs.player) && lhs.rating == rhs.rating } static func contentMatches(lhs: [Ranking], _ rhs: [Ranking]) -> Bool { // Make sure arrays have same size guard lhs.count == rhs.count else { return false } // Look at pairs of rankings let hasMismatch = zip(lhs, rhs) .map { contentMatches($0, $1) } // Apply content matcher to each .contains(false) // Check for mismatches return !hasMismatch } } // MARK: Equatable func ==(lhs: Ranking, rhs: Ranking) -> Bool { return lhs.player == rhs.player } // MARK: Decodable extension Ranking: Decodable { static func decode(json: JSON) -> Decoded { return curry(Ranking.init) <^> json <| "player" <*> json <| "rating" } } // MARK: Hashable extension Ranking: Hashable { var hashValue: Int { return player.identifier.hashValue ^ rating.hashValue } } ================================================ FILE: SwiftGoal/Settings.bundle/Root.plist ================================================ PreferenceSpecifiers Title Data Storage Type PSGroupSpecifier FooterText When Remote Store is switched off, the app keeps its data on this device. Type PSToggleSwitchSpecifier Title Use Remote Store Key use_remote_store_setting DefaultValue AutocapitalizationType None AutocorrectionType No DefaultValue http://localhost:3000/api/v1/ Key base_url_setting KeyboardType URL Title Base URL Type PSTextFieldSpecifier ================================================ FILE: SwiftGoal/Stores/LocalStore.swift ================================================ // // LocalStore.swift // SwiftGoal // // Created by Martin Richter on 31/12/15. // Copyright © 2015 Martin Richter. All rights reserved. // import Argo import ReactiveCocoa class LocalStore: StoreType { private var matches = [Match]() private var players = [Player]() private let rankingEngine = RankingEngine() private let matchesKey = "matches" private let playersKey = "players" private let archiveFileName = "LocalStore" // MARK: Matches func fetchMatches() -> SignalProducer<[Match], NSError> { return SignalProducer(value: matches) } func createMatch(parameters: MatchParameters) -> SignalProducer { let identifier = randomIdentifier() let match = matchFromParameters(parameters, withIdentifier: identifier) matches.append(match) return SignalProducer(value: true) } func updateMatch(match: Match, parameters: MatchParameters) -> SignalProducer { if let oldMatchIndex = matches.indexOf(match) { let newMatch = matchFromParameters(parameters, withIdentifier: match.identifier) matches.removeAtIndex(oldMatchIndex) matches.insert(newMatch, atIndex: oldMatchIndex) return SignalProducer(value: true) } else { return SignalProducer(value: false) } } func deleteMatch(match: Match) -> SignalProducer { if let index = matches.indexOf(match) { matches.removeAtIndex(index) return SignalProducer(value: true) } else { return SignalProducer(value: false) } } // MARK: Players func fetchPlayers() -> SignalProducer<[Player], NSError> { return SignalProducer(value: players) } func createPlayerWithName(name: String) -> SignalProducer { let player = Player(identifier: randomIdentifier(), name: name) // Keep alphabetical order when inserting player let alphabeticalIndex = players.indexOf { existingPlayer in existingPlayer.name > player.name } if let index = alphabeticalIndex { players.insert(player, atIndex: index) } else { players.append(player) } return SignalProducer(value: true) } // MARK: Rankings func fetchRankings() -> SignalProducer<[Ranking], NSError> { let rankings = rankingEngine.rankingsForPlayers(players, fromMatches: matches) return SignalProducer(value: rankings) } // MARK: Persistence func archiveToDisk() { let matchesDict = matches.map { $0.encode() } let playersDict = players.map { $0.encode() } let dataDict = [matchesKey: matchesDict, playersKey: playersDict] if let filePath = persistentFilePath() { NSKeyedArchiver.archiveRootObject(dataDict, toFile: filePath) } } func unarchiveFromDisk() { if let path = persistentFilePath(), dataDict = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? [String: AnyObject], matchesDict = dataDict[matchesKey], playersDict = dataDict[playersKey], matches: [Match] = decode(matchesDict), players: [Player] = decode(playersDict) { self.matches = matches self.players = players } } // MARK: Private Helpers private func randomIdentifier() -> String { return NSUUID().UUIDString } private func matchFromParameters(parameters: MatchParameters, withIdentifier identifier: String) -> Match { let sortByName: (Player, Player) -> Bool = { players in players.0.name < players.1.name } return Match( identifier: identifier, homePlayers: parameters.homePlayers.sort(sortByName), awayPlayers: parameters.awayPlayers.sort(sortByName), homeGoals: parameters.homeGoals, awayGoals: parameters.awayGoals ) } private func persistentFilePath() -> String? { let basePath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first as NSString? return basePath?.stringByAppendingPathComponent(archiveFileName) } } ================================================ FILE: SwiftGoal/Stores/RemoteStore.swift ================================================ // // Store.swift // SwiftGoal // // Created by Martin Richter on 10/05/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Argo import ReactiveCocoa class RemoteStore: StoreType { enum RequestMethod { case GET case POST case PUT case DELETE } private let baseURL: NSURL private let matchesURL: NSURL private let playersURL: NSURL private let rankingsURL: NSURL // MARK: Lifecycle init(baseURL: NSURL) { self.baseURL = baseURL self.matchesURL = NSURL(string: "matches", relativeToURL: baseURL)! self.playersURL = NSURL(string: "players", relativeToURL: baseURL)! self.rankingsURL = NSURL(string: "rankings", relativeToURL: baseURL)! } // MARK: - Matches func fetchMatches() -> SignalProducer<[Match], NSError> { let request = mutableRequestWithURL(matchesURL, method: .GET) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []), let matches: [Match] = decode(json) { return matches } else { return [] } } } func createMatch(parameters: MatchParameters) -> SignalProducer { let request = mutableRequestWithURL(matchesURL, method: .POST) request.HTTPBody = httpBodyForMatchParameters(parameters) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let httpResponse = response as? NSHTTPURLResponse { return httpResponse.statusCode == 201 } else { return false } } } func updateMatch(match: Match, parameters: MatchParameters) -> SignalProducer { let request = mutableRequestWithURL(urlForMatch(match), method: .PUT) request.HTTPBody = httpBodyForMatchParameters(parameters) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let httpResponse = response as? NSHTTPURLResponse { return httpResponse.statusCode == 200 } else { return false } } } func deleteMatch(match: Match) -> SignalProducer { let request = mutableRequestWithURL(urlForMatch(match), method: .DELETE) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let httpResponse = response as? NSHTTPURLResponse { return httpResponse.statusCode == 200 } else { return false } } } // MARK: Players func fetchPlayers() -> SignalProducer<[Player], NSError> { let request = NSURLRequest(URL: playersURL) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []), let players: [Player] = decode(json) { return players } else { return [] } } } func createPlayerWithName(name: String) -> SignalProducer { let request = mutableRequestWithURL(playersURL, method: .POST) request.HTTPBody = httpBodyForPlayerName(name) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let httpResponse = response as? NSHTTPURLResponse { return httpResponse.statusCode == 201 } else { return false } } } // MARK: Rankings func fetchRankings() -> SignalProducer<[Ranking], NSError> { let request = NSURLRequest(URL: rankingsURL) return NSURLSession.sharedSession().rac_dataWithRequest(request) .map { data, response in if let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []), let rankings: [Ranking] = decode(json) { return rankings } else { return [] } } } // MARK: Private Helpers private func httpBodyForMatchParameters(parameters: MatchParameters) -> NSData? { let jsonObject = [ "home_player_ids": Array(parameters.homePlayers).map { $0.identifier }, "away_player_ids": Array(parameters.awayPlayers).map { $0.identifier }, "home_goals": parameters.homeGoals, "away_goals": parameters.awayGoals ] return try? NSJSONSerialization.dataWithJSONObject(jsonObject, options: []) } private func httpBodyForPlayerName(name: String) -> NSData? { let jsonObject = [ "name": name ] return try? NSJSONSerialization.dataWithJSONObject(jsonObject, options: []) } private func urlForMatch(match: Match) -> NSURL { return matchesURL.URLByAppendingPathComponent(match.identifier)! } private func mutableRequestWithURL(url: NSURL, method: RequestMethod) -> NSMutableURLRequest { let request = NSMutableURLRequest(URL: url) switch method { case .GET: request.HTTPMethod = "GET" case .POST: request.HTTPMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") case .PUT: request.HTTPMethod = "PUT" request.setValue("application/json", forHTTPHeaderField: "Content-Type") case .DELETE: request.HTTPMethod = "DELETE" } return request } } ================================================ FILE: SwiftGoal/Stores/StoreType.swift ================================================ // // StoreType.swift // SwiftGoal // // Created by Martin Richter on 30/12/15. // Copyright © 2015 Martin Richter. All rights reserved. // import ReactiveCocoa struct MatchParameters { let homePlayers: Set let awayPlayers: Set let homeGoals: Int let awayGoals: Int } protocol StoreType { // Matches func fetchMatches() -> SignalProducer<[Match], NSError> func createMatch(parameters: MatchParameters) -> SignalProducer func updateMatch(match: Match, parameters: MatchParameters) -> SignalProducer func deleteMatch(match: Match) -> SignalProducer // Players func fetchPlayers() -> SignalProducer<[Player], NSError> func createPlayerWithName(name: String) -> SignalProducer // Rankings func fetchRankings() -> SignalProducer<[Ranking], NSError> } ================================================ FILE: SwiftGoal/ViewModels/EditMatchViewModel.swift ================================================ // // EditMatchViewModel.swift // SwiftGoal // // Created by Martin Richter on 22/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa class EditMatchViewModel { // Inputs let homeGoals: MutableProperty let awayGoals: MutableProperty // Outputs let title: String let formattedHomeGoals = MutableProperty("") let formattedAwayGoals = MutableProperty("") let homePlayersString = MutableProperty("") let awayPlayersString = MutableProperty("") let inputIsValid = MutableProperty(false) // Actions lazy var saveAction: Action = { [unowned self] in return Action(enabledIf: self.inputIsValid, { _ in let parameters = MatchParameters( homePlayers: self.homePlayers.value, awayPlayers: self.awayPlayers.value, homeGoals: self.homeGoals.value, awayGoals: self.awayGoals.value ) if let match = self.match { return self.store.updateMatch(match, parameters: parameters) } else { return self.store.createMatch(parameters) } }) }() private let store: StoreType private let match: Match? private let homePlayers: MutableProperty> private let awayPlayers: MutableProperty> // MARK: Lifecycle init(store: StoreType, match: Match?) { self.store = store self.match = match // Set properties based on whether an existing match was passed self.title = (match != nil ? "Edit Match" : "New Match") self.homePlayers = MutableProperty(Set(match?.homePlayers ?? [])) self.awayPlayers = MutableProperty(Set(match?.awayPlayers ?? [])) self.homeGoals = MutableProperty(match?.homeGoals ?? 0) self.awayGoals = MutableProperty(match?.awayGoals ?? 0) self.formattedHomeGoals <~ homeGoals.producer.map { goals in return "\(goals)" } self.formattedAwayGoals <~ awayGoals.producer.map { goals in return "\(goals)" } self.homePlayersString <~ homePlayers.producer .map { players in return players.isEmpty ? "Set Home Players" : players.map({ $0.name }).joinWithSeparator(", ") } self.awayPlayersString <~ awayPlayers.producer .map { players in return players.isEmpty ? "Set Away Players" : players.map({ $0.name }).joinWithSeparator(", ") } self.inputIsValid <~ combineLatest(homePlayers.producer, awayPlayers.producer) .map { (homePlayers, awayPlayers) in return !homePlayers.isEmpty && !awayPlayers.isEmpty } } convenience init(store: StoreType) { self.init(store: store, match: nil) } // MARK: View Models func manageHomePlayersViewModel() -> ManagePlayersViewModel { let homePlayersViewModel = ManagePlayersViewModel( store: store, initialPlayers: homePlayers.value, disabledPlayers: awayPlayers.value ) self.homePlayers <~ homePlayersViewModel.selectedPlayers return homePlayersViewModel } func manageAwayPlayersViewModel() -> ManagePlayersViewModel { let awayPlayersViewModel = ManagePlayersViewModel( store: store, initialPlayers: awayPlayers.value, disabledPlayers: homePlayers.value ) self.awayPlayers <~ awayPlayersViewModel.selectedPlayers return awayPlayersViewModel } } ================================================ FILE: SwiftGoal/ViewModels/ManagePlayersViewModel.swift ================================================ // // ManagePlayersViewModel.swift // SwiftGoal // // Created by Martin Richter on 30/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa import Result class ManagePlayersViewModel { typealias PlayerChangeset = Changeset // Inputs let active = MutableProperty(false) let playerName = MutableProperty("") let refreshObserver: Observer // Outputs let title: String let contentChangesSignal: Signal let isLoading: MutableProperty let alertMessageSignal: Signal let selectedPlayers: MutableProperty> let inputIsValid = MutableProperty(false) // Actions lazy var saveAction: Action = { [unowned self] in return Action(enabledIf: self.inputIsValid, { _ in return self.store.createPlayerWithName(self.playerName.value) }) }() private let store: StoreType private let contentChangesObserver: Observer private let alertMessageObserver: Observer private let disabledPlayers: Set private var players: [Player] // MARK: Lifecycle init(store: StoreType, initialPlayers: Set, disabledPlayers: Set) { self.title = "Players" self.store = store self.players = [] self.selectedPlayers = MutableProperty(initialPlayers) self.disabledPlayers = disabledPlayers let (refreshSignal, refreshObserver) = Signal.pipe() self.refreshObserver = refreshObserver let (contentChangesSignal, contentChangesObserver) = Signal.pipe() self.contentChangesSignal = contentChangesSignal self.contentChangesObserver = contentChangesObserver let isLoading = MutableProperty(false) self.isLoading = isLoading let (alertMessageSignal, alertMessageObserver) = Signal.pipe() self.alertMessageSignal = alertMessageSignal self.alertMessageObserver = alertMessageObserver active.producer .filter { $0 } .map { _ in () } .start(refreshObserver) saveAction.values .filter { $0 } .map { _ in () } .observe(refreshObserver) SignalProducer(signal: refreshSignal) .on(next: { _ in isLoading.value = true }) .flatMap(.Latest, transform: { _ in return store.fetchPlayers() .flatMapError { error in alertMessageObserver.sendNext(error.localizedDescription) return SignalProducer(value: []) } }) .on(next: { _ in isLoading.value = false }) .combinePrevious([]) // Preserve history to calculate changeset .startWithNext({ [weak self] (oldPlayers, newPlayers) in self?.players = newPlayers if let observer = self?.contentChangesObserver { let changeset = Changeset( oldItems: oldPlayers, newItems: newPlayers, contentMatches: Player.contentMatches ) observer.sendNext(changeset) } }) // Feed saving errors into alert message signal saveAction.errors .map { $0.localizedDescription } .observe(alertMessageObserver) inputIsValid <~ playerName.producer.map { $0.characters.count > 0 } } // MARK: Data Source func numberOfSections() -> Int { return 1 } func numberOfPlayersInSection(section: Int) -> Int { return players.count } func playerNameAtIndexPath(indexPath: NSIndexPath) -> String { return playerAtIndexPath(indexPath).name } func isPlayerSelectedAtIndexPath(indexPath: NSIndexPath) -> Bool { let player = playerAtIndexPath(indexPath) return selectedPlayers.value.contains(player) } func canSelectPlayerAtIndexPath(indexPath: NSIndexPath) -> Bool { let player = playerAtIndexPath(indexPath) return !disabledPlayers.contains(player) } // MARK: Player Selection func selectPlayerAtIndexPath(indexPath: NSIndexPath) { let player = playerAtIndexPath(indexPath) selectedPlayers.value.insert(player) } func deselectPlayerAtIndexPath(indexPath: NSIndexPath) { let player = playerAtIndexPath(indexPath) selectedPlayers.value.remove(player) } // MARK: Internal Helpers private func playerAtIndexPath(indexPath: NSIndexPath) -> Player { return players[indexPath.row] } } ================================================ FILE: SwiftGoal/ViewModels/MatchesViewModel.swift ================================================ // // MatchesViewModel.swift // SwiftGoal // // Created by Martin Richter on 10/05/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa import Result class MatchesViewModel { typealias MatchChangeset = Changeset // Inputs let active = MutableProperty(false) let refreshObserver: Observer // Outputs let title: String let contentChangesSignal: Signal let isLoading: MutableProperty let alertMessageSignal: Signal // Actions lazy var deleteAction: Action = { [unowned self] in return Action({ indexPath in let match = self.matchAtIndexPath(indexPath) return self.store.deleteMatch(match) }) }() private let store: StoreType private let contentChangesObserver: Observer private let alertMessageObserver: Observer private var matches: [Match] // MARK: - Lifecycle init(store: StoreType) { self.title = "Matches" self.store = store self.matches = [] let (refreshSignal, refreshObserver) = Signal.pipe() self.refreshObserver = refreshObserver let (contentChangesSignal, contentChangesObserver) = Signal.pipe() self.contentChangesSignal = contentChangesSignal self.contentChangesObserver = contentChangesObserver let isLoading = MutableProperty(false) self.isLoading = isLoading let (alertMessageSignal, alertMessageObserver) = Signal.pipe() self.alertMessageSignal = alertMessageSignal self.alertMessageObserver = alertMessageObserver // Trigger refresh when view becomes active active.producer .filter { $0 } .map { _ in () } .start(refreshObserver) // Trigger refresh after deleting a match deleteAction.values .filter { $0 } .map { _ in () } .observe(refreshObserver) SignalProducer(signal: refreshSignal) .on(next: { _ in isLoading.value = true }) .flatMap(.Latest) { _ in return store.fetchMatches() .flatMapError { error in alertMessageObserver.sendNext(error.localizedDescription) return SignalProducer(value: []) } } .on(next: { _ in isLoading.value = false }) .combinePrevious([]) // Preserve history to calculate changeset .startWithNext({ [weak self] (oldMatches, newMatches) in self?.matches = newMatches if let observer = self?.contentChangesObserver { let changeset = Changeset( oldItems: oldMatches, newItems: newMatches, contentMatches: Match.contentMatches ) observer.sendNext(changeset) } }) // Feed deletion errors into alert message signal deleteAction.errors .map { $0.localizedDescription } .observe(alertMessageObserver) } // MARK: - Data Source func numberOfSections() -> Int { return 1 } func numberOfMatchesInSection(section: Int) -> Int { return matches.count } func homePlayersAtIndexPath(indexPath: NSIndexPath) -> String { let match = matchAtIndexPath(indexPath) return separatedNamesForPlayers(match.homePlayers) } func awayPlayersAtIndexPath(indexPath: NSIndexPath) -> String { let match = matchAtIndexPath(indexPath) return separatedNamesForPlayers(match.awayPlayers) } func resultAtIndexPath(indexPath: NSIndexPath) -> String { let match = matchAtIndexPath(indexPath) return "\(match.homeGoals) : \(match.awayGoals)" } // MARK: View Models func editViewModelForNewMatch() -> EditMatchViewModel { return EditMatchViewModel(store: store) } func editViewModelForMatchAtIndexPath(indexPath: NSIndexPath) -> EditMatchViewModel { let match = matchAtIndexPath(indexPath) return EditMatchViewModel(store: store, match: match) } // MARK: Internal Helpers private func matchAtIndexPath(indexPath: NSIndexPath) -> Match { return matches[indexPath.row] } private func separatedNamesForPlayers(players: [Player]) -> String { let playerNames = players.map { player in player.name } return playerNames.joinWithSeparator(", ") } } ================================================ FILE: SwiftGoal/ViewModels/RankingsViewModel.swift ================================================ // // RankingsViewModel.swift // SwiftGoal // // Created by Martin Richter on 23/07/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa import Result class RankingsViewModel { typealias RankingChangeset = Changeset // Inputs let active = MutableProperty(false) let refreshObserver: Observer // Outputs let title: String let contentChangesSignal: Signal let isLoading: MutableProperty let alertMessageSignal: Signal private let store: StoreType private let contentChangesObserver: Observer private let alertMessageObserver: Observer private var rankings: [Ranking] // MARK: Lifecycle init(store: StoreType) { self.title = "Rankings" self.store = store self.rankings = [] let (refreshSignal, refreshObserver) = Signal.pipe() self.refreshObserver = refreshObserver let (contentChangesSignal, contentChangesObserver) = Signal.pipe() self.contentChangesSignal = contentChangesSignal self.contentChangesObserver = contentChangesObserver let isLoading = MutableProperty(false) self.isLoading = isLoading let (alertMessageSignal, alertMessageObserver) = Signal.pipe() self.alertMessageSignal = alertMessageSignal self.alertMessageObserver = alertMessageObserver active.producer .filter { $0 } .map { _ in () } .start(refreshObserver) SignalProducer(signal: refreshSignal) .on(next: { _ in isLoading.value = true }) .flatMap(.Latest, transform: { _ in return store.fetchRankings() .flatMapError { error in alertMessageObserver.sendNext(error.localizedDescription) return SignalProducer(value: []) } }) .on(next: { _ in isLoading.value = false }) .combinePrevious([]) // Preserve history to calculate changeset .startWithNext({ [weak self] (oldRankings, newRankings) in self?.rankings = newRankings if let observer = self?.contentChangesObserver { let changeset = Changeset( oldItems: oldRankings, newItems: newRankings, contentMatches: Ranking.contentMatches ) observer.sendNext(changeset) } }) } // MARK: Data Source func numberOfSections() -> Int { return 1 } func numberOfRankingsInSection(section: Int) -> Int { return rankings.count } func playerNameAtIndexPath(indexPath: NSIndexPath) -> String { return rankingAtIndexPath(indexPath).player.name } func ratingAtIndexPath(indexPath: NSIndexPath) -> String { let rating = rankingAtIndexPath(indexPath).rating return String(format: "%.2f", rating) } // MARK: Internal Helpers private func rankingAtIndexPath(indexPath: NSIndexPath) -> Ranking { return rankings[indexPath.row] } } ================================================ FILE: SwiftGoal/Views/EditMatchViewController.swift ================================================ // // EditMatchViewController.swift // SwiftGoal // // Created by Martin Richter on 22/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import UIKit import ReactiveCocoa import SnapKit class EditMatchViewController: UIViewController { private let viewModel: EditMatchViewModel private weak var homeGoalsLabel: UILabel! private weak var goalSeparatorLabel: UILabel! private weak var awayGoalsLabel: UILabel! private weak var homeGoalsStepper: UIStepper! private weak var awayGoalsStepper: UIStepper! private weak var homePlayersButton: UIButton! private weak var awayPlayersButton: UIButton! private var saveAction: CocoaAction private let saveButtonItem: UIBarButtonItem // MARK: Lifecycle init(viewModel: EditMatchViewModel) { self.viewModel = viewModel self.saveAction = CocoaAction(viewModel.saveAction, { _ in return () }) self.saveButtonItem = UIBarButtonItem( barButtonSystemItem: .Save, target: self.saveAction, action: CocoaAction.selector ) super.init(nibName: nil, bundle: nil) // Set up navigation item navigationItem.leftBarButtonItem = UIBarButtonItem( barButtonSystemItem: .Cancel, target: self, action: #selector(cancelButtonTapped) ) navigationItem.rightBarButtonItem = self.saveButtonItem } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: View Lifecycle override func loadView() { let view = UIView() view.backgroundColor = UIColor.whiteColor() let labelFont = UIFont(name: "OpenSans-Semibold", size: 70) let homeGoalsLabel = UILabel() homeGoalsLabel.font = labelFont view.addSubview(homeGoalsLabel) self.homeGoalsLabel = homeGoalsLabel let goalSeparatorLabel = UILabel() goalSeparatorLabel.font = labelFont goalSeparatorLabel.text = ":" view.addSubview(goalSeparatorLabel) self.goalSeparatorLabel = goalSeparatorLabel let awayGoalsLabel = UILabel() awayGoalsLabel.font = labelFont view.addSubview(awayGoalsLabel) self.awayGoalsLabel = awayGoalsLabel let homeGoalsStepper = UIStepper() view.addSubview(homeGoalsStepper) self.homeGoalsStepper = homeGoalsStepper let awayGoalsStepper = UIStepper() view.addSubview(awayGoalsStepper) self.awayGoalsStepper = awayGoalsStepper let homePlayersButton = UIButton(type: .System) homePlayersButton.titleLabel?.font = UIFont(name: "OpenSans", size: 15) homePlayersButton.addTarget(self, action: #selector(homePlayersButtonTapped), forControlEvents: .TouchUpInside ) view.addSubview(homePlayersButton) self.homePlayersButton = homePlayersButton let awayPlayersButton = UIButton(type: .System) awayPlayersButton.titleLabel?.font = UIFont(name: "OpenSans", size: 15) awayPlayersButton.addTarget(self, action: #selector(awayPlayersButtonTapped), forControlEvents: .TouchUpInside ) view.addSubview(awayPlayersButton) self.awayPlayersButton = awayPlayersButton self.view = view } override func viewDidLoad() { super.viewDidLoad() bindViewModel() makeConstraints() } // MARK: Bindings private func bindViewModel() { self.title = viewModel.title // Initial values homeGoalsStepper.value = Double(viewModel.homeGoals.value) awayGoalsStepper.value = Double(viewModel.awayGoals.value) viewModel.homeGoals <~ homeGoalsStepper.signalProducer() viewModel.awayGoals <~ awayGoalsStepper.signalProducer() viewModel.formattedHomeGoals.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] formattedHomeGoals in self?.homeGoalsLabel.text = formattedHomeGoals }) viewModel.formattedAwayGoals.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] formattedAwayGoals in self?.awayGoalsLabel.text = formattedAwayGoals }) viewModel.homePlayersString.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] homePlayersString in self?.homePlayersButton.setTitle(homePlayersString, forState: .Normal) }) viewModel.awayPlayersString.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] awayPlayersString in self?.awayPlayersButton.setTitle(awayPlayersString, forState: .Normal) }) viewModel.inputIsValid.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] inputIsValid in self?.saveButtonItem.enabled = inputIsValid }) viewModel.saveAction.events.observeNext({ [weak self] event in switch event { case let .Next(success): if success { self?.dismissViewControllerAnimated(true, completion: nil) } else { self?.presentErrorMessage("The match could not be saved.") } case let .Failed(error): self?.presentErrorMessage(error.localizedDescription) default: return } }) } // MARK: Layout private func makeConstraints() { let superview = self.view homeGoalsLabel.snp_makeConstraints { make in make.trailing.equalTo(goalSeparatorLabel.snp_leading).offset(-10) make.baseline.equalTo(goalSeparatorLabel.snp_baseline) } goalSeparatorLabel.snp_makeConstraints { make in make.centerX.equalTo(superview.snp_centerX) make.centerY.equalTo(superview.snp_centerY).offset(-50) } awayGoalsLabel.snp_makeConstraints { make in make.leading.equalTo(goalSeparatorLabel.snp_trailing).offset(10) make.baseline.equalTo(goalSeparatorLabel.snp_baseline) } homeGoalsStepper.snp_makeConstraints { make in make.top.equalTo(goalSeparatorLabel.snp_bottom).offset(10) make.trailing.equalTo(homeGoalsLabel.snp_trailing) } awayGoalsStepper.snp_makeConstraints { make in make.top.equalTo(goalSeparatorLabel.snp_bottom).offset(10) make.leading.equalTo(awayGoalsLabel.snp_leading) } homePlayersButton.snp_makeConstraints { make in make.top.equalTo(homeGoalsStepper.snp_bottom).offset(30) make.leading.greaterThanOrEqualTo(superview.snp_leadingMargin) make.trailing.equalTo(homeGoalsLabel.snp_trailing) } awayPlayersButton.snp_makeConstraints { make in make.top.equalTo(awayGoalsStepper.snp_bottom).offset(30) make.leading.equalTo(awayGoalsLabel.snp_leading) make.trailing.lessThanOrEqualTo(superview.snp_trailingMargin) } } // MARK: User Interaction func cancelButtonTapped() { dismissViewControllerAnimated(true, completion: nil) } func homePlayersButtonTapped() { let homePlayersViewModel = viewModel.manageHomePlayersViewModel() let homePlayersViewController = ManagePlayersViewController(viewModel: homePlayersViewModel) self.navigationController?.pushViewController(homePlayersViewController, animated: true) } func awayPlayersButtonTapped() { let awayPlayersViewModel = viewModel.manageAwayPlayersViewModel() let awayPlayersViewController = ManagePlayersViewController(viewModel: awayPlayersViewModel) self.navigationController?.pushViewController(awayPlayersViewController, animated: true) } // MARK: Private Helpers func presentErrorMessage(message: String) { let alertController = UIAlertController( title: "Oops!", message: message, preferredStyle: .Alert ) let cancelAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil) alertController.addAction(cancelAction) self.presentViewController(alertController, animated: true, completion: nil) } } ================================================ FILE: SwiftGoal/Views/ManagePlayersViewController.swift ================================================ // // ManagePlayersViewController.swift // SwiftGoal // // Created by Martin Richter on 30/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa import Result class ManagePlayersViewController: UITableViewController { private let playerCellIdentifier = "PlayerCell" private let viewModel: ManagePlayersViewModel // MARK: Lifecycle init(viewModel: ManagePlayersViewModel) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: View Lifecycle override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = 60 tableView.tableFooterView = UIView() // Prevent empty rows at bottom tableView.registerClass(PlayerCell.self, forCellReuseIdentifier: playerCellIdentifier) self.refreshControl = UIRefreshControl() self.refreshControl?.addTarget(self, action: #selector(refreshControlTriggered), forControlEvents: .ValueChanged ) self.navigationItem.rightBarButtonItem = UIBarButtonItem( barButtonSystemItem: .Add, target: self, action: #selector(addPlayerButtonTapped) ) bindViewModel() } // MARK: Bindings private func bindViewModel() { self.title = viewModel.title viewModel.active <~ isActive() viewModel.contentChangesSignal .observeOn(UIScheduler()) .observeNext({ [weak self] changeset in guard let tableView = self?.tableView else { return } tableView.beginUpdates() tableView.deleteRowsAtIndexPaths(changeset.deletions, withRowAnimation: .Automatic) tableView.reloadRowsAtIndexPaths(changeset.modifications, withRowAnimation: .Automatic) tableView.insertRowsAtIndexPaths(changeset.insertions, withRowAnimation: .Automatic) tableView.endUpdates() }) viewModel.isLoading.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] isLoading in if !isLoading { self?.refreshControl?.endRefreshing() } }) viewModel.alertMessageSignal .observeOn(UIScheduler()) .observeNext({ [weak self] alertMessage in let alertController = UIAlertController( title: "Oops!", message: alertMessage, preferredStyle: .Alert ) alertController.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil)) self?.presentViewController(alertController, animated: true, completion: nil) }) } // MARK: User Interaction func addPlayerButtonTapped() { let newPlayerViewController = self.newPlayerViewController() presentViewController(newPlayerViewController, animated: true, completion: nil) } func refreshControlTriggered() { viewModel.refreshObserver.sendNext(()) } // MARK: UITableViewDataSource override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return viewModel.numberOfSections() } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.numberOfPlayersInSection(section) } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(playerCellIdentifier, forIndexPath: indexPath) as! PlayerCell cell.nameLabel.enabled = viewModel.canSelectPlayerAtIndexPath(indexPath) cell.nameLabel.text = viewModel.playerNameAtIndexPath(indexPath) cell.accessoryType = viewModel.isPlayerSelectedAtIndexPath(indexPath) ? .Checkmark : .None return cell } // MARK: UITableViewDelegate override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { return viewModel.canSelectPlayerAtIndexPath(indexPath) ? indexPath : nil } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) let cell = tableView.cellForRowAtIndexPath(indexPath) if viewModel.isPlayerSelectedAtIndexPath(indexPath) { viewModel.deselectPlayerAtIndexPath(indexPath) cell?.accessoryType = .None } else { viewModel.selectPlayerAtIndexPath(indexPath) cell?.accessoryType = .Checkmark } } // MARK: Private Helpers private func newPlayerViewController() -> UIViewController { let newPlayerViewController = UIAlertController( title: "New Player", message: nil, preferredStyle: .Alert ) // Add user actions newPlayerViewController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)) let saveAction = UIAlertAction(title: "Save", style: .Default, handler: { [weak self] _ in self?.viewModel.saveAction.apply().start() }) newPlayerViewController.addAction(saveAction) // Allow saving only with valid input viewModel.inputIsValid.producer.startWithNext({ isValid in saveAction.enabled = isValid }) // Add user input fields newPlayerViewController.addTextFieldWithConfigurationHandler { textField in textField.placeholder = "Player name" } // Forward text input to view model if let nameField = newPlayerViewController.textFields?.first { viewModel.playerName <~ nameField.signalProducer() } return newPlayerViewController } } ================================================ FILE: SwiftGoal/Views/MatchCell.swift ================================================ // // MatchCell.swift // SwiftGoal // // Created by Martin Richter on 08/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import UIKit import SnapKit class MatchCell: UITableViewCell { let homePlayersLabel: UILabel let resultLabel: UILabel let awayPlayersLabel: UILabel // MARK: Lifecycle override init(style: UITableViewCellStyle, reuseIdentifier: String?) { homePlayersLabel = UILabel() homePlayersLabel.font = UIFont(name: "OpenSans", size: 20) homePlayersLabel.textAlignment = .Left resultLabel = UILabel() resultLabel.font = UIFont(name: "OpenSans-Semibold", size: 20) resultLabel.textAlignment = .Center awayPlayersLabel = UILabel() awayPlayersLabel.font = UIFont(name: "OpenSans", size: 20) awayPlayersLabel.textAlignment = .Right super.init(style: style, reuseIdentifier: reuseIdentifier) self.contentView.addSubview(homePlayersLabel) self.contentView.addSubview(resultLabel) self.contentView.addSubview(awayPlayersLabel) makeConstraints() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: Layout private func makeConstraints() { let superview = self.contentView homePlayersLabel.snp_makeConstraints { make in make.leading.equalTo(superview.snp_leadingMargin) make.trailing.equalTo(resultLabel.snp_leading).offset(-10) make.centerY.equalTo(superview.snp_centerY) } resultLabel.snp_makeConstraints { make in make.centerX.equalTo(superview.snp_centerX) make.centerY.equalTo(superview.snp_centerY) } awayPlayersLabel.snp_makeConstraints { make in make.leading.equalTo(resultLabel.snp_trailing).offset(10) make.trailing.equalTo(superview.snp_trailingMargin) make.centerY.equalTo(superview.snp_centerY) } } } ================================================ FILE: SwiftGoal/Views/MatchesViewController.swift ================================================ // // MatchesViewController.swift // SwiftGoal // // Created by Martin Richter on 10/05/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import DZNEmptyDataSet import ReactiveCocoa import Result class MatchesViewController: UITableViewController, DZNEmptyDataSetDelegate, DZNEmptyDataSetSource { private let matchCellIdentifier = "MatchCell" private let viewModel: MatchesViewModel // MARK: - Lifecycle init(viewModel: MatchesViewModel) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) } required init?(coder aDecoder: NSCoder) { fatalError("NSCoding is not supported") } // MARK: - View Lifecycle override func viewDidLoad() { super.viewDidLoad() tableView.allowsSelection = false tableView.allowsSelectionDuringEditing = true tableView.rowHeight = 60 tableView.tableFooterView = UIView() // Prevent empty rows at bottom tableView.emptyDataSetDelegate = self tableView.emptyDataSetSource = self self.refreshControl = UIRefreshControl() self.refreshControl?.addTarget(self, action: #selector(refreshControlTriggered), forControlEvents: .ValueChanged ) tableView.registerClass(MatchCell.self, forCellReuseIdentifier: matchCellIdentifier) self.navigationItem.leftBarButtonItem = self.editButtonItem() self.navigationItem.rightBarButtonItem = UIBarButtonItem( barButtonSystemItem: .Add, target: self, action: #selector(addMatchButtonTapped) ) bindViewModel() } // MARK: - Bindings private func bindViewModel() { self.title = viewModel.title viewModel.active <~ isActive() viewModel.contentChangesSignal .observeOn(UIScheduler()) .observeNext({ [weak self] changeset in guard let tableView = self?.tableView else { return } tableView.beginUpdates() tableView.deleteRowsAtIndexPaths(changeset.deletions, withRowAnimation: .Automatic) tableView.reloadRowsAtIndexPaths(changeset.modifications, withRowAnimation: .Automatic) tableView.insertRowsAtIndexPaths(changeset.insertions, withRowAnimation: .Automatic) tableView.endUpdates() }) viewModel.isLoading.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] isLoading in if !isLoading { self?.refreshControl?.endRefreshing() } }) viewModel.alertMessageSignal .observeOn(UIScheduler()) .observeNext({ [weak self] alertMessage in let alertController = UIAlertController( title: "Oops!", message: alertMessage, preferredStyle: .Alert ) alertController.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil)) self?.presentViewController(alertController, animated: true, completion: nil) }) } // MARK: User Interaction func addMatchButtonTapped() { let newMatchViewModel = viewModel.editViewModelForNewMatch() let newMatchViewController = EditMatchViewController(viewModel: newMatchViewModel) let newMatchNavigationController = UINavigationController(rootViewController: newMatchViewController) self.presentViewController(newMatchNavigationController, animated: true, completion: nil) } func refreshControlTriggered() { viewModel.refreshObserver.sendNext(()) } // MARK: DZNEmptyDataSetDelegate func emptyDataSetDidTapButton(scrollView: UIScrollView!) { if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString) { UIApplication.sharedApplication().openURL(settingsURL) } } // MARK: DZNEmptyDataSetSource func titleForEmptyDataSet(scrollView: UIScrollView!) -> NSAttributedString! { let text = "No matches yet!" let attributes = [ NSFontAttributeName: UIFont(name: "OpenSans-Semibold", size: 30)! ] return NSAttributedString(string: text, attributes: attributes) } func descriptionForEmptyDataSet(scrollView: UIScrollView!) -> NSAttributedString! { let text = "Check your storage settings, then tap the “+” button to get started." let attributes = [ NSFontAttributeName: UIFont(name: "OpenSans", size: 20)!, NSForegroundColorAttributeName: UIColor.lightGrayColor() ] return NSAttributedString(string: text, attributes: attributes) } func buttonTitleForEmptyDataSet(scrollView: UIScrollView!, forState state: UIControlState) -> NSAttributedString! { let text = "Open App Settings" let attributes = [ NSFontAttributeName: UIFont(name: "OpenSans", size: 20)!, NSForegroundColorAttributeName: (state == .Normal ? Color.primaryColor : Color.lighterPrimaryColor) ] return NSAttributedString(string: text, attributes: attributes) } // MARK: - UITableViewDataSource override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return viewModel.numberOfSections() } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.numberOfMatchesInSection(section) } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(matchCellIdentifier, forIndexPath: indexPath) as! MatchCell cell.homePlayersLabel.text = viewModel.homePlayersAtIndexPath(indexPath) cell.resultLabel.text = viewModel.resultAtIndexPath(indexPath) cell.awayPlayersLabel.text = viewModel.awayPlayersAtIndexPath(indexPath) return cell } override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { viewModel.deleteAction.apply(indexPath).start() } } // MARK: UITableViewDelegate override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) let editMatchViewModel = viewModel.editViewModelForMatchAtIndexPath(indexPath) let editMatchViewController = EditMatchViewController(viewModel: editMatchViewModel) let editMatchNavigationController = UINavigationController(rootViewController: editMatchViewController) self.presentViewController(editMatchNavigationController, animated: true, completion: nil) } } ================================================ FILE: SwiftGoal/Views/PlayerCell.swift ================================================ // // PlayerCell.swift // SwiftGoal // // Created by Martin Richter on 30/06/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import UIKit class PlayerCell: UITableViewCell { let nameLabel: UILabel // MARK: Lifecycle override init(style: UITableViewCellStyle, reuseIdentifier: String?) { nameLabel = UILabel() nameLabel.font = UIFont(name: "OpenSans", size: 19) super.init(style: style, reuseIdentifier: reuseIdentifier) contentView.addSubview(nameLabel) makeConstraints() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: Layout private func makeConstraints() { let superview = self.contentView nameLabel.snp_makeConstraints { make in make.leading.equalTo(superview.snp_leadingMargin) make.trailing.equalTo(superview.snp_trailingMargin) make.centerY.equalTo(superview.snp_centerY) } } } ================================================ FILE: SwiftGoal/Views/RankingCell.swift ================================================ // // RankingCell.swift // SwiftGoal // // Created by Martin Richter on 23/07/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import UIKit class RankingCell: UITableViewCell { let playerNameLabel: UILabel let ratingLabel: UILabel // MARK: Lifecycle override init(style: UITableViewCellStyle, reuseIdentifier: String?) { playerNameLabel = UILabel() playerNameLabel.font = UIFont(name: "OpenSans", size: 19) ratingLabel = UILabel() ratingLabel.font = UIFont(name: "OpenSans", size: 19) super.init(style: style, reuseIdentifier: reuseIdentifier) contentView.addSubview(playerNameLabel) contentView.addSubview(ratingLabel) makeConstraints() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: Layout private func makeConstraints() { let superview = self.contentView playerNameLabel.snp_makeConstraints { make in make.leading.equalTo(superview.snp_leadingMargin) make.centerY.equalTo(superview.snp_centerY) } ratingLabel.snp_makeConstraints { make in make.leading.equalTo(playerNameLabel.snp_trailingMargin) make.trailing.equalTo(superview.snp_trailingMargin) make.centerY.equalTo(superview.snp_centerY) } } } ================================================ FILE: SwiftGoal/Views/RankingsViewController.swift ================================================ // // RankingsViewController.swift // SwiftGoal // // Created by Martin Richter on 23/07/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa import Result class RankingsViewController: UITableViewController { private let rankingCellIdentifier = "RankingCell" private let viewModel: RankingsViewModel // MARK: Lifecycle init(viewModel: RankingsViewModel) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: View Lifecycle override func viewDidLoad() { super.viewDidLoad() tableView.allowsSelection = false tableView.rowHeight = 60 tableView.tableFooterView = UIView() // Prevent empty rows at bottom tableView.registerClass(RankingCell.self, forCellReuseIdentifier: rankingCellIdentifier) self.refreshControl = UIRefreshControl() self.refreshControl?.addTarget(self, action: #selector(refreshControlTriggered), forControlEvents: .ValueChanged ) bindViewModel() } // MARK: Bindings private func bindViewModel() { self.title = viewModel.title viewModel.active <~ isActive() viewModel.contentChangesSignal .observeOn(UIScheduler()) .observeNext({ [weak self] changeset in guard let tableView = self?.tableView else { return } tableView.beginUpdates() tableView.deleteRowsAtIndexPaths(changeset.deletions, withRowAnimation: .Automatic) tableView.reloadRowsAtIndexPaths(changeset.modifications, withRowAnimation: .Automatic) tableView.insertRowsAtIndexPaths(changeset.insertions, withRowAnimation: .Automatic) tableView.endUpdates() }) viewModel.isLoading.producer .observeOn(UIScheduler()) .startWithNext({ [weak self] isLoading in if !isLoading { self?.refreshControl?.endRefreshing() } }) viewModel.alertMessageSignal .observeOn(UIScheduler()) .observeNext({ [weak self] alertMessage in let alertController = UIAlertController( title: "Oops!", message: alertMessage, preferredStyle: .Alert ) alertController.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil)) self?.presentViewController(alertController, animated: true, completion: nil) }) } // MARK: User Interaction func refreshControlTriggered() { viewModel.refreshObserver.sendNext(()) } // MARK: UITableViewDataSource override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return viewModel.numberOfSections() } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.numberOfRankingsInSection(section) } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(rankingCellIdentifier, forIndexPath: indexPath) as! RankingCell cell.playerNameLabel.text = viewModel.playerNameAtIndexPath(indexPath) cell.ratingLabel.text = viewModel.ratingAtIndexPath(indexPath) return cell } } ================================================ FILE: SwiftGoal.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 0F2EF8281B24FBF800BABC20 /* MatchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F2EF8271B24FBF800BABC20 /* MatchCell.swift */; }; 0F2EF82A1B24FE9400BABC20 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F2EF8291B24FE9400BABC20 /* SnapKit.framework */; }; 0F2EF82C1B25000600BABC20 /* OpenSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0F2EF82B1B25000600BABC20 /* OpenSans-Regular.ttf */; }; 0F3289EE1B1CF8340068DF12 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3289ED1B1CF8340068DF12 /* Changeset.swift */; }; 0F691B3E1B1D19DC00FD5AC1 /* Player.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F691B3D1B1D19DC00FD5AC1 /* Player.swift */; }; 0F74F6F01B0002C400F963E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F74F6EF1B0002C400F963E0 /* AppDelegate.swift */; }; 0F74F6F71B0002C400F963E0 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0F74F6F61B0002C400F963E0 /* Images.xcassets */; }; 0F74F6FA1B0002C400F963E0 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0F74F6F81B0002C400F963E0 /* LaunchScreen.xib */; }; 0F74F7061B0002C400F963E0 /* ChangesetSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F74F7051B0002C400F963E0 /* ChangesetSpec.swift */; }; 0F74F7121B00053D00F963E0 /* MatchesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F74F7111B00053D00F963E0 /* MatchesViewController.swift */; }; 0F74F7141B00058D00F963E0 /* MatchesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F74F7131B00058D00F963E0 /* MatchesViewModel.swift */; }; 0F74F7171B0009B300F963E0 /* RemoteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F74F7161B0009B300F963E0 /* RemoteStore.swift */; }; 0F79DAEA1BCDBB170073988A /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F79DAE81BCDBB170073988A /* Nimble.framework */; }; 0F79DAEB1BCDBB170073988A /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F79DAE91BCDBB170073988A /* Quick.framework */; }; 0F79DAEC1BCDBB250073988A /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0F79DAE81BCDBB170073988A /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 0F79DAED1BCDBB250073988A /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0F79DAE91BCDBB170073988A /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 0F89040C1BF8B2B4007135C9 /* MatchSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F89040B1BF8B2B4007135C9 /* MatchSpec.swift */; }; 0F89040E1BF8B907007135C9 /* PlayerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F89040D1BF8B907007135C9 /* PlayerSpec.swift */; }; 0F8904101BF8BACF007135C9 /* RankingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F89040F1BF8BACF007135C9 /* RankingSpec.swift */; }; 0F98C4F51B658B8B00C39E4C /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0F98C4F41B658B8B00C39E4C /* Settings.bundle */; }; 0F9D10B31B614099002B9A20 /* RankingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F9D10B21B614099002B9A20 /* RankingsViewController.swift */; }; 0F9D10B51B6140FC002B9A20 /* RankingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F9D10B41B6140FC002B9A20 /* RankingsViewModel.swift */; }; 0F9D10B71B614B71002B9A20 /* RankingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F9D10B61B614B71002B9A20 /* RankingCell.swift */; }; 0F9D10B91B625124002B9A20 /* Ranking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F9D10B81B625124002B9A20 /* Ranking.swift */; }; 0FA80BDE1B013F33000531E3 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FA80BDB1B013F33000531E3 /* ReactiveCocoa.framework */; }; 0FA80BDF1B013F33000531E3 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FA80BDC1B013F33000531E3 /* Result.framework */; }; 0FA80BE41B014001000531E3 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA80BE31B014001000531E3 /* Match.swift */; }; 0FB81C491B72C44A00432698 /* MatchesViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB81C481B72C44A00432698 /* MatchesViewModelSpec.swift */; }; 0FB81C4C1B72CAFE00432698 /* MockStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB81C4B1B72CAFE00432698 /* MockStore.swift */; }; 0FE2A7481B66CE17001F5C5B /* DZNEmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FE2A7461B66CD06001F5C5B /* DZNEmptyDataSet.framework */; }; 0FE2A74A1B66E139001F5C5B /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FE2A7491B66E139001F5C5B /* Color.swift */; }; 0FE4EB731B38760B007F9349 /* EditMatchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FE4EB721B38760B007F9349 /* EditMatchViewModel.swift */; }; 0FE4EB751B3876C2007F9349 /* EditMatchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FE4EB741B3876C2007F9349 /* EditMatchViewController.swift */; }; 0FE96BEA1B24D77700506E60 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FE96BE81B24D77700506E60 /* Argo.framework */; }; 0FE96BEE1B24F0EB00506E60 /* OpenSans-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0FE96BED1B24F0B700506E60 /* OpenSans-Semibold.ttf */; }; 0FF57F341B431E17001DD570 /* ManagePlayersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF57F331B431E17001DD570 /* ManagePlayersViewController.swift */; }; 0FF57F361B431E41001DD570 /* ManagePlayersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF57F351B431E41001DD570 /* ManagePlayersViewModel.swift */; }; 0FF57F381B433EFD001DD570 /* PlayerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF57F371B433EFD001DD570 /* PlayerCell.swift */; }; 0FF7B8B81B3A0CB300808433 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF7B8B71B3A0CB300808433 /* Extensions.swift */; }; 0FFA97041B76C9D900DD4F58 /* EditMatchViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FFA97031B76C9D900DD4F58 /* EditMatchViewModelSpec.swift */; }; 5B459DFA1C3A4C8A00B37AD2 /* RankingsViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B459DF91C3A4C8A00B37AD2 /* RankingsViewModelSpec.swift */; }; 5B459DFC1C3A551000B37AD2 /* ManagePlayersViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B459DFB1C3A551000B37AD2 /* ManagePlayersViewModelSpec.swift */; }; 5BB3F7921CAC61C700985038 /* Curry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BB3F7911CAC61C700985038 /* Curry.framework */; }; 5BF62C941C3819E5006E97C6 /* RankingEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF62C931C3819E5006E97C6 /* RankingEngine.swift */; }; 5BF62C971C381AA8006E97C6 /* RankingEngineSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF62C961C381AA8006E97C6 /* RankingEngineSpec.swift */; }; 5BFD9FA01C340B1C00FDEBC6 /* StoreType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFD9F9F1C340B1C00FDEBC6 /* StoreType.swift */; }; 5BFD9FA21C35AFC700FDEBC6 /* LocalStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFD9FA11C35AFC700FDEBC6 /* LocalStore.swift */; }; 5BFD9FA41C36CF9E00FDEBC6 /* Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFD9FA31C36CF9E00FDEBC6 /* Encodable.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 0F74F7001B0002C400F963E0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0F74F6E21B0002C400F963E0 /* Project object */; proxyType = 1; remoteGlobalIDString = 0F74F6E91B0002C400F963E0; remoteInfo = SwiftGoal; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 0FD2EED61BCDB15000D4F80E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( 0F79DAEC1BCDBB250073988A /* Nimble.framework in CopyFiles */, 0F79DAED1BCDBB250073988A /* Quick.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 0F2EF8271B24FBF800BABC20 /* MatchCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchCell.swift; sourceTree = ""; }; 0F2EF8291B24FE9400BABC20 /* SnapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SnapKit.framework; path = Carthage/Build/iOS/SnapKit.framework; sourceTree = ""; }; 0F2EF82B1B25000600BABC20 /* OpenSans-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Regular.ttf"; sourceTree = ""; }; 0F3289ED1B1CF8340068DF12 /* Changeset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Changeset.swift; sourceTree = ""; }; 0F691B3D1B1D19DC00FD5AC1 /* Player.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Player.swift; sourceTree = ""; }; 0F74F6EA1B0002C400F963E0 /* SwiftGoal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftGoal.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0F74F6EE1B0002C400F963E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 0F74F6EF1B0002C400F963E0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 0F74F6F61B0002C400F963E0 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 0F74F6F91B0002C400F963E0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 0F74F6FF1B0002C400F963E0 /* SwiftGoalTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftGoalTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 0F74F7041B0002C400F963E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 0F74F7051B0002C400F963E0 /* ChangesetSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangesetSpec.swift; sourceTree = ""; }; 0F74F7111B00053D00F963E0 /* MatchesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchesViewController.swift; sourceTree = ""; }; 0F74F7131B00058D00F963E0 /* MatchesViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchesViewModel.swift; sourceTree = ""; }; 0F74F7161B0009B300F963E0 /* RemoteStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemoteStore.swift; sourceTree = ""; }; 0F79DAE81BCDBB170073988A /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = ""; }; 0F79DAE91BCDBB170073988A /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/iOS/Quick.framework; sourceTree = ""; }; 0F89040B1BF8B2B4007135C9 /* MatchSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchSpec.swift; sourceTree = ""; }; 0F89040D1BF8B907007135C9 /* PlayerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlayerSpec.swift; sourceTree = ""; }; 0F89040F1BF8BACF007135C9 /* RankingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingSpec.swift; sourceTree = ""; }; 0F98C4F41B658B8B00C39E4C /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; 0F9D10B21B614099002B9A20 /* RankingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingsViewController.swift; sourceTree = ""; }; 0F9D10B41B6140FC002B9A20 /* RankingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingsViewModel.swift; sourceTree = ""; }; 0F9D10B61B614B71002B9A20 /* RankingCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingCell.swift; sourceTree = ""; }; 0F9D10B81B625124002B9A20 /* Ranking.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Ranking.swift; sourceTree = ""; }; 0FA80BDB1B013F33000531E3 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveCocoa.framework; path = Carthage/Build/iOS/ReactiveCocoa.framework; sourceTree = ""; }; 0FA80BDC1B013F33000531E3 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Result.framework; path = Carthage/Build/iOS/Result.framework; sourceTree = ""; }; 0FA80BE31B014001000531E3 /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Match.swift; sourceTree = ""; }; 0FB81C481B72C44A00432698 /* MatchesViewModelSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchesViewModelSpec.swift; sourceTree = ""; }; 0FB81C4B1B72CAFE00432698 /* MockStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockStore.swift; sourceTree = ""; }; 0FE2A7461B66CD06001F5C5B /* DZNEmptyDataSet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DZNEmptyDataSet.framework; path = Carthage/Build/iOS/DZNEmptyDataSet.framework; sourceTree = ""; }; 0FE2A7491B66E139001F5C5B /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = ""; }; 0FE4EB721B38760B007F9349 /* EditMatchViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditMatchViewModel.swift; sourceTree = ""; }; 0FE4EB741B3876C2007F9349 /* EditMatchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditMatchViewController.swift; sourceTree = ""; }; 0FE96BE81B24D77700506E60 /* Argo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Argo.framework; path = Carthage/Build/iOS/Argo.framework; sourceTree = ""; }; 0FE96BED1B24F0B700506E60 /* OpenSans-Semibold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Semibold.ttf"; sourceTree = ""; }; 0FF57F331B431E17001DD570 /* ManagePlayersViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagePlayersViewController.swift; sourceTree = ""; }; 0FF57F351B431E41001DD570 /* ManagePlayersViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagePlayersViewModel.swift; sourceTree = ""; }; 0FF57F371B433EFD001DD570 /* PlayerCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlayerCell.swift; sourceTree = ""; }; 0FF7B8B71B3A0CB300808433 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 0FFA97031B76C9D900DD4F58 /* EditMatchViewModelSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditMatchViewModelSpec.swift; sourceTree = ""; }; 5B459DF91C3A4C8A00B37AD2 /* RankingsViewModelSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingsViewModelSpec.swift; sourceTree = ""; }; 5B459DFB1C3A551000B37AD2 /* ManagePlayersViewModelSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagePlayersViewModelSpec.swift; sourceTree = ""; }; 5BB3F7911CAC61C700985038 /* Curry.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Curry.framework; path = Carthage/Build/iOS/Curry.framework; sourceTree = ""; }; 5BF62C931C3819E5006E97C6 /* RankingEngine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingEngine.swift; sourceTree = ""; }; 5BF62C961C381AA8006E97C6 /* RankingEngineSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingEngineSpec.swift; sourceTree = ""; }; 5BFD9F9F1C340B1C00FDEBC6 /* StoreType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreType.swift; sourceTree = ""; }; 5BFD9FA11C35AFC700FDEBC6 /* LocalStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalStore.swift; sourceTree = ""; }; 5BFD9FA31C36CF9E00FDEBC6 /* Encodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Encodable.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 0F74F6E71B0002C400F963E0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 0FE96BEA1B24D77700506E60 /* Argo.framework in Frameworks */, 5BB3F7921CAC61C700985038 /* Curry.framework in Frameworks */, 0FE2A7481B66CE17001F5C5B /* DZNEmptyDataSet.framework in Frameworks */, 0FA80BDE1B013F33000531E3 /* ReactiveCocoa.framework in Frameworks */, 0FA80BDF1B013F33000531E3 /* Result.framework in Frameworks */, 0F2EF82A1B24FE9400BABC20 /* SnapKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 0F74F6FC1B0002C400F963E0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 0F79DAEA1BCDBB170073988A /* Nimble.framework in Frameworks */, 0F79DAEB1BCDBB170073988A /* Quick.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 0F74F6E11B0002C400F963E0 = { isa = PBXGroup; children = ( 0FA80BE01B013F3A000531E3 /* Frameworks */, 0F74F6EC1B0002C400F963E0 /* SwiftGoal */, 0F74F7021B0002C400F963E0 /* SwiftGoalTests */, 0F74F6EB1B0002C400F963E0 /* Products */, ); sourceTree = ""; }; 0F74F6EB1B0002C400F963E0 /* Products */ = { isa = PBXGroup; children = ( 0F74F6EA1B0002C400F963E0 /* SwiftGoal.app */, 0F74F6FF1B0002C400F963E0 /* SwiftGoalTests.xctest */, ); name = Products; sourceTree = ""; }; 0F74F6EC1B0002C400F963E0 /* SwiftGoal */ = { isa = PBXGroup; children = ( 0F74F6EF1B0002C400F963E0 /* AppDelegate.swift */, 0F74F6F61B0002C400F963E0 /* Images.xcassets */, 0F74F6F81B0002C400F963E0 /* LaunchScreen.xib */, 0FA80BE21B013FE4000531E3 /* Models */, 0F74F70F1B0004EE00F963E0 /* Views */, 0F74F7101B0004FD00F963E0 /* ViewModels */, 0F74F7151B00096000F963E0 /* Stores */, 0FF7B8B61B3A0B3300808433 /* Helpers */, 0F74F6ED1B0002C400F963E0 /* Supporting Files */, ); path = SwiftGoal; sourceTree = ""; }; 0F74F6ED1B0002C400F963E0 /* Supporting Files */ = { isa = PBXGroup; children = ( 0FE96BEC1B24F09100506E60 /* Fonts */, 0F74F6EE1B0002C400F963E0 /* Info.plist */, 0F98C4F41B658B8B00C39E4C /* Settings.bundle */, ); name = "Supporting Files"; sourceTree = ""; }; 0F74F7021B0002C400F963E0 /* SwiftGoalTests */ = { isa = PBXGroup; children = ( 0FB1AD931B72B5B000A8A3E4 /* Models */, 0FB81C471B72C3FE00432698 /* ViewModels */, 5BF62C951C381A25006E97C6 /* Helpers */, 0F74F7031B0002C400F963E0 /* Supporting Files */, ); path = SwiftGoalTests; sourceTree = ""; }; 0F74F7031B0002C400F963E0 /* Supporting Files */ = { isa = PBXGroup; children = ( 0FB81C4B1B72CAFE00432698 /* MockStore.swift */, 0F74F7041B0002C400F963E0 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 0F74F70F1B0004EE00F963E0 /* Views */ = { isa = PBXGroup; children = ( 0F2EF8271B24FBF800BABC20 /* MatchCell.swift */, 0FF57F371B433EFD001DD570 /* PlayerCell.swift */, 0F9D10B61B614B71002B9A20 /* RankingCell.swift */, 0F74F7111B00053D00F963E0 /* MatchesViewController.swift */, 0FE4EB741B3876C2007F9349 /* EditMatchViewController.swift */, 0FF57F331B431E17001DD570 /* ManagePlayersViewController.swift */, 0F9D10B21B614099002B9A20 /* RankingsViewController.swift */, ); path = Views; sourceTree = ""; }; 0F74F7101B0004FD00F963E0 /* ViewModels */ = { isa = PBXGroup; children = ( 0F74F7131B00058D00F963E0 /* MatchesViewModel.swift */, 0FE4EB721B38760B007F9349 /* EditMatchViewModel.swift */, 0FF57F351B431E41001DD570 /* ManagePlayersViewModel.swift */, 0F9D10B41B6140FC002B9A20 /* RankingsViewModel.swift */, ); path = ViewModels; sourceTree = ""; }; 0F74F7151B00096000F963E0 /* Stores */ = { isa = PBXGroup; children = ( 5BFD9F9F1C340B1C00FDEBC6 /* StoreType.swift */, 5BFD9FA11C35AFC700FDEBC6 /* LocalStore.swift */, 0F74F7161B0009B300F963E0 /* RemoteStore.swift */, ); path = Stores; sourceTree = ""; }; 0FA80BE01B013F3A000531E3 /* Frameworks */ = { isa = PBXGroup; children = ( 5BB3F7911CAC61C700985038 /* Curry.framework */, 0FE96BE81B24D77700506E60 /* Argo.framework */, 0FE2A7461B66CD06001F5C5B /* DZNEmptyDataSet.framework */, 0F79DAE81BCDBB170073988A /* Nimble.framework */, 0F79DAE91BCDBB170073988A /* Quick.framework */, 0FA80BDB1B013F33000531E3 /* ReactiveCocoa.framework */, 0FA80BDC1B013F33000531E3 /* Result.framework */, 0F2EF8291B24FE9400BABC20 /* SnapKit.framework */, ); name = Frameworks; sourceTree = ""; }; 0FA80BE21B013FE4000531E3 /* Models */ = { isa = PBXGroup; children = ( 5BFD9FA31C36CF9E00FDEBC6 /* Encodable.swift */, 0F3289ED1B1CF8340068DF12 /* Changeset.swift */, 0FA80BE31B014001000531E3 /* Match.swift */, 0F691B3D1B1D19DC00FD5AC1 /* Player.swift */, 0F9D10B81B625124002B9A20 /* Ranking.swift */, ); path = Models; sourceTree = ""; }; 0FB1AD931B72B5B000A8A3E4 /* Models */ = { isa = PBXGroup; children = ( 0F74F7051B0002C400F963E0 /* ChangesetSpec.swift */, 0F89040B1BF8B2B4007135C9 /* MatchSpec.swift */, 0F89040D1BF8B907007135C9 /* PlayerSpec.swift */, 0F89040F1BF8BACF007135C9 /* RankingSpec.swift */, ); path = Models; sourceTree = ""; }; 0FB81C471B72C3FE00432698 /* ViewModels */ = { isa = PBXGroup; children = ( 0FB81C481B72C44A00432698 /* MatchesViewModelSpec.swift */, 0FFA97031B76C9D900DD4F58 /* EditMatchViewModelSpec.swift */, 5B459DFB1C3A551000B37AD2 /* ManagePlayersViewModelSpec.swift */, 5B459DF91C3A4C8A00B37AD2 /* RankingsViewModelSpec.swift */, ); path = ViewModels; sourceTree = ""; }; 0FE96BEC1B24F09100506E60 /* Fonts */ = { isa = PBXGroup; children = ( 0F2EF82B1B25000600BABC20 /* OpenSans-Regular.ttf */, 0FE96BED1B24F0B700506E60 /* OpenSans-Semibold.ttf */, ); path = Fonts; sourceTree = ""; }; 0FF7B8B61B3A0B3300808433 /* Helpers */ = { isa = PBXGroup; children = ( 0FE2A7491B66E139001F5C5B /* Color.swift */, 0FF7B8B71B3A0CB300808433 /* Extensions.swift */, 5BF62C931C3819E5006E97C6 /* RankingEngine.swift */, ); path = Helpers; sourceTree = ""; }; 5BF62C951C381A25006E97C6 /* Helpers */ = { isa = PBXGroup; children = ( 5BF62C961C381AA8006E97C6 /* RankingEngineSpec.swift */, ); path = Helpers; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 0F74F6E91B0002C400F963E0 /* SwiftGoal */ = { isa = PBXNativeTarget; buildConfigurationList = 0F74F7091B0002C400F963E0 /* Build configuration list for PBXNativeTarget "SwiftGoal" */; buildPhases = ( 0F74F6E61B0002C400F963E0 /* Sources */, 0F74F6E71B0002C400F963E0 /* Frameworks */, 0F74F6E81B0002C400F963E0 /* Resources */, 0FA80BE11B013F70000531E3 /* ShellScript */, ); buildRules = ( ); dependencies = ( ); name = SwiftGoal; productName = SwiftGoal; productReference = 0F74F6EA1B0002C400F963E0 /* SwiftGoal.app */; productType = "com.apple.product-type.application"; }; 0F74F6FE1B0002C400F963E0 /* SwiftGoalTests */ = { isa = PBXNativeTarget; buildConfigurationList = 0F74F70C1B0002C400F963E0 /* Build configuration list for PBXNativeTarget "SwiftGoalTests" */; buildPhases = ( 0F74F6FB1B0002C400F963E0 /* Sources */, 0F74F6FC1B0002C400F963E0 /* Frameworks */, 0F74F6FD1B0002C400F963E0 /* Resources */, 0FD2EED61BCDB15000D4F80E /* CopyFiles */, ); buildRules = ( ); dependencies = ( 0F74F7011B0002C400F963E0 /* PBXTargetDependency */, ); name = SwiftGoalTests; productName = SwiftGoalTests; productReference = 0F74F6FF1B0002C400F963E0 /* SwiftGoalTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0F74F6E21B0002C400F963E0 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftMigration = 0700; LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Martin Richter"; TargetAttributes = { 0F74F6E91B0002C400F963E0 = { CreatedOnToolsVersion = 6.3.1; LastSwiftMigration = 0800; }; 0F74F6FE1B0002C400F963E0 = { CreatedOnToolsVersion = 6.3.1; LastSwiftMigration = 0800; TestTargetID = 0F74F6E91B0002C400F963E0; }; }; }; buildConfigurationList = 0F74F6E51B0002C400F963E0 /* Build configuration list for PBXProject "SwiftGoal" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 0F74F6E11B0002C400F963E0; productRefGroup = 0F74F6EB1B0002C400F963E0 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 0F74F6E91B0002C400F963E0 /* SwiftGoal */, 0F74F6FE1B0002C400F963E0 /* SwiftGoalTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 0F74F6E81B0002C400F963E0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 0FE96BEE1B24F0EB00506E60 /* OpenSans-Semibold.ttf in Resources */, 0F74F6FA1B0002C400F963E0 /* LaunchScreen.xib in Resources */, 0F98C4F51B658B8B00C39E4C /* Settings.bundle in Resources */, 0F2EF82C1B25000600BABC20 /* OpenSans-Regular.ttf in Resources */, 0F74F6F71B0002C400F963E0 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 0F74F6FD1B0002C400F963E0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 0FA80BE11B013F70000531E3 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework", "$(SRCROOT)/Carthage/Build/iOS/Result.framework", "$(SRCROOT)/Carthage/Build/iOS/Argo.framework", "$(SRCROOT)/Carthage/Build/iOS/SnapKit.framework", "$(SRCROOT)/Carthage/Build/iOS/DZNEmptyDataSet.framework", "$(SRCROOT)/Carthage/Build/iOS/Curry.framework", ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "/usr/local/bin/carthage copy-frameworks "; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 0F74F6E61B0002C400F963E0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0FF57F361B431E41001DD570 /* ManagePlayersViewModel.swift in Sources */, 0FF57F341B431E17001DD570 /* ManagePlayersViewController.swift in Sources */, 0F9D10B31B614099002B9A20 /* RankingsViewController.swift in Sources */, 0FF57F381B433EFD001DD570 /* PlayerCell.swift in Sources */, 0F9D10B71B614B71002B9A20 /* RankingCell.swift in Sources */, 5BFD9FA01C340B1C00FDEBC6 /* StoreType.swift in Sources */, 0FE4EB751B3876C2007F9349 /* EditMatchViewController.swift in Sources */, 0F74F7141B00058D00F963E0 /* MatchesViewModel.swift in Sources */, 5BFD9FA21C35AFC700FDEBC6 /* LocalStore.swift in Sources */, 0F74F7171B0009B300F963E0 /* RemoteStore.swift in Sources */, 0F3289EE1B1CF8340068DF12 /* Changeset.swift in Sources */, 0F74F7121B00053D00F963E0 /* MatchesViewController.swift in Sources */, 0F691B3E1B1D19DC00FD5AC1 /* Player.swift in Sources */, 0FE2A74A1B66E139001F5C5B /* Color.swift in Sources */, 0FA80BE41B014001000531E3 /* Match.swift in Sources */, 0F9D10B51B6140FC002B9A20 /* RankingsViewModel.swift in Sources */, 0FE4EB731B38760B007F9349 /* EditMatchViewModel.swift in Sources */, 0F74F6F01B0002C400F963E0 /* AppDelegate.swift in Sources */, 5BF62C941C3819E5006E97C6 /* RankingEngine.swift in Sources */, 0FF7B8B81B3A0CB300808433 /* Extensions.swift in Sources */, 0F9D10B91B625124002B9A20 /* Ranking.swift in Sources */, 0F2EF8281B24FBF800BABC20 /* MatchCell.swift in Sources */, 5BFD9FA41C36CF9E00FDEBC6 /* Encodable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 0F74F6FB1B0002C400F963E0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0F74F7061B0002C400F963E0 /* ChangesetSpec.swift in Sources */, 0F8904101BF8BACF007135C9 /* RankingSpec.swift in Sources */, 0FFA97041B76C9D900DD4F58 /* EditMatchViewModelSpec.swift in Sources */, 0FB81C491B72C44A00432698 /* MatchesViewModelSpec.swift in Sources */, 5B459DFA1C3A4C8A00B37AD2 /* RankingsViewModelSpec.swift in Sources */, 0FB81C4C1B72CAFE00432698 /* MockStore.swift in Sources */, 5BF62C971C381AA8006E97C6 /* RankingEngineSpec.swift in Sources */, 0F89040C1BF8B2B4007135C9 /* MatchSpec.swift in Sources */, 5B459DFC1C3A551000B37AD2 /* ManagePlayersViewModelSpec.swift in Sources */, 0F89040E1BF8B907007135C9 /* PlayerSpec.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 0F74F7011B0002C400F963E0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 0F74F6E91B0002C400F963E0 /* SwiftGoal */; targetProxy = 0F74F7001B0002C400F963E0 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 0F74F6F81B0002C400F963E0 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; children = ( 0F74F6F91B0002C400F963E0 /* Base */, ); name = LaunchScreen.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 0F74F7071B0002C400F963E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 0F74F7081B0002C400F963E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 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 = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; 0F74F70A1B0002C400F963E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = SwiftGoal/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "net.martinrichter.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 2.3; }; name = Debug; }; 0F74F70B1B0002C400F963E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = SwiftGoal/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "net.martinrichter.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 2.3; }; name = Release; }; 0F74F70D1B0002C400F963E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = SwiftGoalTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "net.martinrichter.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 2.3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftGoal.app/SwiftGoal"; }; name = Debug; }; 0F74F70E1B0002C400F963E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = SwiftGoalTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "net.martinrichter.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 2.3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftGoal.app/SwiftGoal"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 0F74F6E51B0002C400F963E0 /* Build configuration list for PBXProject "SwiftGoal" */ = { isa = XCConfigurationList; buildConfigurations = ( 0F74F7071B0002C400F963E0 /* Debug */, 0F74F7081B0002C400F963E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 0F74F7091B0002C400F963E0 /* Build configuration list for PBXNativeTarget "SwiftGoal" */ = { isa = XCConfigurationList; buildConfigurations = ( 0F74F70A1B0002C400F963E0 /* Debug */, 0F74F70B1B0002C400F963E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 0F74F70C1B0002C400F963E0 /* Build configuration list for PBXNativeTarget "SwiftGoalTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 0F74F70D1B0002C400F963E0 /* Debug */, 0F74F70E1B0002C400F963E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0F74F6E21B0002C400F963E0 /* Project object */; } ================================================ FILE: SwiftGoal.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: SwiftGoal.xcodeproj/xcshareddata/xcschemes/SwiftGoal.xcscheme ================================================ ================================================ FILE: SwiftGoalTests/Helpers/RankingEngineSpec.swift ================================================ // // RankingEngineSpec.swift // SwiftGoal // // Created by Martin Richter on 02/01/16. // Copyright © 2016 Martin Richter. All rights reserved. // import Quick import Nimble @testable import SwiftGoal class RankingEngineSpec: QuickSpec { override func spec() { describe("A RankingEngine") { let rankingEngine = RankingEngine() describe("for empty input") { it("returns an empty array") { let rankings = rankingEngine.rankingsForPlayers([], fromMatches: []) expect(rankings).to(equal([])) } } describe("for one player") { let p1 = Player(identifier: "a", name: "A") it("gives a zero rating when the player has no matches") { let rankings = rankingEngine.rankingsForPlayers([p1], fromMatches: []) let expectedRankings = [ Ranking(player: p1, rating: 0) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } it("returns only that player's ranking") { let p2 = Player(identifier: "b", name: "B") let match = Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 1, awayGoals: 0) let rankings = rankingEngine.rankingsForPlayers([p1], fromMatches: [match]) let expectedRankings = [ Ranking(player: p1, rating: 10) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } } describe("for two players") { let p1 = Player(identifier: "a", name: "A") let p2 = Player(identifier: "b", name: "B") it("provides correct ratings for a home win") { let match = Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 1, awayGoals: 0) let rankings = rankingEngine.rankingsForPlayers([p1, p2], fromMatches: [match]) let expectedRankings = [ Ranking(player: p1, rating: 10), Ranking(player: p2, rating: 0) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } it("provides correct ratings for a tie") { let match = Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 1, awayGoals: 1) let rankings = rankingEngine.rankingsForPlayers([p1, p2], fromMatches: [match]) let expectedRankings = [ Ranking(player: p1, rating: 10/3), Ranking(player: p2, rating: 10/3) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } it("provides correct ratings for an away win") { let match = Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 0, awayGoals: 1) let rankings = rankingEngine.rankingsForPlayers([p1, p2], fromMatches: [match]) let expectedRankings = [ Ranking(player: p2, rating: 10), Ranking(player: p1, rating: 0) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } it("provides correct ratings for a mixed set of matches") { let m1 = Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 1, awayGoals: 0) let m2 = Match(identifier: "2", homePlayers: [p1], awayPlayers: [p2], homeGoals: 0, awayGoals: 1) let m3 = Match(identifier: "3", homePlayers: [p1], awayPlayers: [p2], homeGoals: 0, awayGoals: 0) let m4 = Match(identifier: "4", homePlayers: [p2], awayPlayers: [p1], homeGoals: 1, awayGoals: 0) let m5 = Match(identifier: "5", homePlayers: [p2], awayPlayers: [p1], homeGoals: 0, awayGoals: 1) let rankings = rankingEngine.rankingsForPlayers([p1, p2], fromMatches: [m1, m2, m3, m4, m5]) let expectedRankings = [ Ranking(player: p1, rating: 10 * 7/15), Ranking(player: p2, rating: 10 * 7/15) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } } describe("for more than two players") { let p1 = Player(identifier: "a", name: "A") let p2 = Player(identifier: "b", name: "B") let p3 = Player(identifier: "c", name: "C") it("take only a player's own matches into account for their rating") { let matches = [ Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 1, awayGoals: 0), Match(identifier: "2", homePlayers: [p2], awayPlayers: [p1], homeGoals: 1, awayGoals: 0), Match(identifier: "3", homePlayers: [p1], awayPlayers: [p3], homeGoals: 1, awayGoals: 0), Match(identifier: "4", homePlayers: [p3], awayPlayers: [p1], homeGoals: 1, awayGoals: 0), Match(identifier: "5", homePlayers: [p2], awayPlayers: [p3], homeGoals: 1, awayGoals: 0), Match(identifier: "6", homePlayers: [p3], awayPlayers: [p2], homeGoals: 1, awayGoals: 0) ] let rankings = rankingEngine.rankingsForPlayers([p1, p2, p3], fromMatches: matches) let expectedRankings = [ Ranking(player: p1, rating: 5), Ranking(player: p2, rating: 5), Ranking(player: p3, rating: 5) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } it("orders the rankings by descending rating") { let m1 = Match(identifier: "1", homePlayers: [p1], awayPlayers: [p2], homeGoals: 0, awayGoals: 1) let m2 = Match(identifier: "2", homePlayers: [p2], awayPlayers: [p3], homeGoals: 0, awayGoals: 0) let rankings = rankingEngine.rankingsForPlayers([p1, p2, p3], fromMatches: [m1, m2]) let expectedRankings = [ Ranking(player: p2, rating: 10 * 2/3), Ranking(player: p3, rating: 10/3), Ranking(player: p1, rating: 0) ] expect(Ranking.contentMatches(rankings, expectedRankings)).to(beTrue()) } } } } } ================================================ FILE: SwiftGoalTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: SwiftGoalTests/MockStore.swift ================================================ // // MockStore.swift // SwiftGoal // // Created by Martin Richter on 06/08/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import ReactiveCocoa @testable import SwiftGoal class MockStore: StoreType { // nil is used to cause fetch error var players: [Player]? var matches: [Match]? var rankings: [Ranking]? var didFetchMatches = false var deletedMatch: Match? var didFetchPlayers = false var didFetchRankings = false init() { let player1 = Player(identifier: "player1", name: "C") let player2 = Player(identifier: "player2", name: "A") let player3 = Player(identifier: "player3", name: "D") let player4 = Player(identifier: "player4", name: "B") self.players = [player1, player2, player3, player4] self.matches = [ Match( identifier: "1", homePlayers: [player1, player2], awayPlayers: [player3, player4], homeGoals: 2, awayGoals: 1 ), Match( identifier: "2", homePlayers: [player1, player4], awayPlayers: [player2, player3], homeGoals: 0, awayGoals: 1 ) ] self.rankings = [ Ranking(player: player2, rating: 10), Ranking(player: player1, rating: 5), Ranking(player: player3, rating: 5), Ranking(player: player4, rating: 0) ] } // MARK: Matches func fetchMatches() -> SignalProducer<[Match], NSError> { didFetchMatches = true if let matches = self.matches { return SignalProducer(value: matches) } else { let error = NSError(domain: "", code: 0, userInfo: nil) return SignalProducer(error: error) } } func createMatch(parameters: MatchParameters) -> SignalProducer { return SignalProducer(value: false) } func updateMatch(match: Match, parameters: MatchParameters) -> SignalProducer { return SignalProducer(value: false) } func deleteMatch(match: Match) -> SignalProducer { deletedMatch = match return SignalProducer(value: true) } // MARK: Players func fetchPlayers() -> SignalProducer<[Player], NSError> { didFetchPlayers = true if let players = self.players { return SignalProducer(value: players) } else { let error = NSError(domain: "", code: 0, userInfo: nil) return SignalProducer(error: error) } } func createPlayerWithName(name: String) -> SignalProducer { return SignalProducer(value: false) } // MARK: Rankings func fetchRankings() -> SignalProducer<[Ranking], NSError> { didFetchRankings = true if let rankings = self.rankings { return SignalProducer(value: rankings) } else { let error = NSError(domain: "", code: 0, userInfo: nil) return SignalProducer(error: error) } } } ================================================ FILE: SwiftGoalTests/Models/ChangesetSpec.swift ================================================ // // SwiftGoalTests.swift // SwiftGoalTests // // Created by Martin Richter on 10/05/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Quick import Nimble @testable import SwiftGoal private struct Item: Equatable { let identifier: String let value: String } private func ==(lhs: Item, rhs: Item) -> Bool { return lhs.identifier == rhs.identifier } class ChangesetSpec: QuickSpec { override func spec() { let oldItems = [ Item(identifier: "cat", value: "Cat"), Item(identifier: "dog", value: "Dog"), Item(identifier: "fox", value: "Fox"), Item(identifier: "rat", value: "Rat"), Item(identifier: "yak", value: "Yak") ] describe("A Changeset") { it("should have the correct insertions, deletions and modifications") { let newItems = [ Item(identifier: "bat", value: "Bat"), Item(identifier: "cow", value: "Cow"), Item(identifier: "dog", value: "A different dog"), Item(identifier: "fox", value: "Fox"), Item(identifier: "pig", value: "Pig"), Item(identifier: "yak", value: "A different yak") ] let changeset = Changeset( oldItems: oldItems, newItems: newItems, contentMatches: { item1, item2 in item1.value == item2.value } ) let deletion1 = NSIndexPath(forRow: 0, inSection: 0) let deletion2 = NSIndexPath(forRow: 3, inSection: 0) let modification1 = NSIndexPath(forRow: 1, inSection: 0) let modification2 = NSIndexPath(forRow: 4, inSection: 0) let insertion1 = NSIndexPath(forRow: 0, inSection: 0) let insertion2 = NSIndexPath(forRow: 1, inSection: 0) let insertion3 = NSIndexPath(forRow: 4, inSection: 0) expect(changeset.deletions).to(equal([deletion1, deletion2])) expect(changeset.modifications).to(equal([modification1, modification2])) expect(changeset.insertions).to(equal([insertion1, insertion2, insertion3])) } } } } ================================================ FILE: SwiftGoalTests/Models/MatchSpec.swift ================================================ // // MatchSpec.swift // SwiftGoal // // Created by Martin Richter on 15/11/15. // Copyright © 2015 Martin Richter. All rights reserved. // import Quick import Nimble @testable import SwiftGoal class MatchSpec: QuickSpec { override func spec() { describe("A Match") { it("is equal to another Match iff (if and only if) their identifiers match") { let m1 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) let m3 = Match(identifier: "b", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) expect(m1).to(equal(m2)) expect(m1).notTo(equal(m3)) } context("when compared by content to another Match") { let basePlayers = [ Player(identifier: "p1", name: "John"), Player(identifier: "p2", name: "Mary") ] // Different amount of players (some player missing) let differentCountPlayers = [ Player(identifier: "p1", name: "John") ] // Different content of players let differentContentPlayers = [ Player(identifier: "p1", name: "Jack"), Player(identifier: "p2", name: "Mary") ] // Different identity of players who have the same content let differentIdentityPlayers = [ Player(identifier: "p3", name: "John"), Player(identifier: "p4", name: "Mary") ] it("does not match when the identifiers differ") { let m1 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "b", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) expect(Match.contentMatches(m1, m2)).to(beFalse()) } it("does not match when the home players differ") { let m1 = Match(identifier: "a", homePlayers: basePlayers, awayPlayers: [], homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "a", homePlayers: differentCountPlayers, awayPlayers: [], homeGoals: 0, awayGoals: 0) let m3 = Match(identifier: "a", homePlayers: differentContentPlayers, awayPlayers: [], homeGoals: 0, awayGoals: 0) let m4 = Match(identifier: "a", homePlayers: differentIdentityPlayers, awayPlayers: [], homeGoals: 0, awayGoals: 0) expect(Match.contentMatches(m1, m2)).to(beFalse()) expect(Match.contentMatches(m1, m3)).to(beFalse()) expect(Match.contentMatches(m1, m4)).to(beFalse()) } it("does not match when the away players differ") { let m1 = Match(identifier: "a", homePlayers: [], awayPlayers: basePlayers, homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "a", homePlayers: [], awayPlayers: differentCountPlayers, homeGoals: 0, awayGoals: 0) let m3 = Match(identifier: "a", homePlayers: [], awayPlayers: differentContentPlayers, homeGoals: 0, awayGoals: 0) let m4 = Match(identifier: "a", homePlayers: [], awayPlayers: differentIdentityPlayers, homeGoals: 0, awayGoals: 0) expect(Match.contentMatches(m1, m2)).to(beFalse()) expect(Match.contentMatches(m1, m3)).to(beFalse()) expect(Match.contentMatches(m1, m4)).to(beFalse()) } it("does not match when the home goals differ") { let m1 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 1, awayGoals: 0) expect(Match.contentMatches(m1, m2)).to(beFalse()) } it("does not match when the away goals differ") { let m1 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "a", homePlayers: [], awayPlayers: [], homeGoals: 0, awayGoals: 1) expect(Match.contentMatches(m1, m2)).to(beFalse()) } it("matches when all properties match") { let m1 = Match(identifier: "a", homePlayers: basePlayers, awayPlayers: basePlayers, homeGoals: 0, awayGoals: 0) let m2 = Match(identifier: "a", homePlayers: basePlayers, awayPlayers: basePlayers, homeGoals: 0, awayGoals: 0) expect(Match.contentMatches(m1, m2)).to(beTrue()) } } } } } ================================================ FILE: SwiftGoalTests/Models/PlayerSpec.swift ================================================ // // PlayerSpec.swift // SwiftGoal // // Created by Martin Richter on 15/11/15. // Copyright © 2015 Martin Richter. All rights reserved. // import Quick import Nimble @testable import SwiftGoal class PlayerSpec: QuickSpec { override func spec() { describe("A Player") { it("is equal to another Player iff (if and only if) their identifiers match") { let p1 = Player(identifier: "a", name: "") let p2 = Player(identifier: "a", name: "") let p3 = Player(identifier: "b", name: "") expect(p1).to(equal(p2)) expect(p1).notTo(equal(p3)) } context("when compared by content to another Player") { it("does not match when the identifiers differ") { let p1 = Player(identifier: "a", name: "") let p2 = Player(identifier: "b", name: "") expect(Player.contentMatches(p1, p2)).to(beFalse()) } it("does not match when the names differ") { let p1 = Player(identifier: "a", name: "John") let p2 = Player(identifier: "a", name: "Jack") expect(Player.contentMatches(p1, p2)).to(beFalse()) } it("matches when all properties match") { let p1 = Player(identifier: "a", name: "John") let p2 = Player(identifier: "a", name: "John") expect(Player.contentMatches(p1, p2)).to(beTrue()) } } } describe("An array of Players") { context("when compared by content to another array of Players") { let p1 = Player(identifier: "a", name: "John") let p2 = Player(identifier: "b", name: "Mary") it("does not match when item counts differ") { expect(Player.contentMatches([p1, p2], [p1])).to(beFalse()) } it("does not match when the item order differs") { expect(Player.contentMatches([p1, p2], [p2, p1])).to(beFalse()) } it("does not match when player contents differ") { let p3 = Player(identifier: "a", name: "Jack") expect(Player.contentMatches([p1], [p3])).to(beFalse()) } it("matches when the contents of all players match") { expect(Player.contentMatches([p1, p2], [p1, p2])).to(beTrue()) } } } } } ================================================ FILE: SwiftGoalTests/Models/RankingSpec.swift ================================================ // // RankingSpec.swift // SwiftGoal // // Created by Martin Richter on 15/11/15. // Copyright © 2015 Martin Richter. All rights reserved. // import Quick import Nimble @testable import SwiftGoal class RankingSpec: QuickSpec { override func spec() { describe("A Ranking") { it("is not equal to another Ranking if its players are not equal") { let player1 = Player(identifier: "p1", name: "John") let player2 = Player(identifier: "p2", name: "Mary") let r1 = Ranking(player: player1, rating: 0) let r2 = Ranking(player: player2, rating: 0) expect(r1).notTo(equal(r2)) } it("is equal to another Ranking if its players are equal, no matter the rest") { let player1 = Player(identifier: "p1", name: "John") let player2 = Player(identifier: "p1", name: "Jack") let r1 = Ranking(player: player1, rating: 0) let r2 = Ranking(player: player2, rating: 1) expect(r1).to(equal(r2)) } context("when compared by content to another Ranking") { it("does not match when the players differ in content") { let player1 = Player(identifier: "p1", name: "John") let player2 = Player(identifier: "p1", name: "Jack") let r1 = Ranking(player: player1, rating: 0) let r2 = Ranking(player: player2, rating: 0) expect(Ranking.contentMatches(r1, r2)).to(beFalse()) } it("does not match when the ratings differ") { let player = Player(identifier: "p1", name: "John") let r1 = Ranking(player: player, rating: 0) let r2 = Ranking(player: player, rating: 1) expect(Ranking.contentMatches(r1, r2)).to(beFalse()) } it("matches when all properties match") { let player = Player(identifier: "p1", name: "John") let r1 = Ranking(player: player, rating: 0) let r2 = Ranking(player: player, rating: 0) expect(Ranking.contentMatches(r1, r2)).to(beTrue()) } } context("when compared in bulk to another Ranking array") { let player = Player(identifier: "p1", name: "John") let r1 = Ranking(player: player, rating: 0) let r2 = Ranking(player: player, rating: 1) it("does not match when the array counts differ") { let array1 = [r1, r1] let array2 = [r1] expect(Ranking.contentMatches(array1, array2)).to(beFalse()) } it("does not match when the array order differs") { let array1 = [r1, r2] let array2 = [r2, r1] expect(Ranking.contentMatches(array1, array2)).to(beFalse()) } it("does not match when any item differs") { let array1 = [r1, r1] let array2 = [r1, r2] expect(Ranking.contentMatches(array1, array2)).to(beFalse()) } it("matches when all items match") { let array1 = [r1, r2] let array2 = [r1, r2] expect(Ranking.contentMatches(array1, array2)).to(beTrue()) } } } } } ================================================ FILE: SwiftGoalTests/ViewModels/EditMatchViewModelSpec.swift ================================================ // // EditMatchViewModelSpec.swift // SwiftGoal // // Created by Martin Richter on 09/08/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Quick import Nimble @testable import SwiftGoal class EditMatchViewModelSpec: QuickSpec { override func spec() { describe("EditMatchViewModel") { var mockStore: MockStore! var viewModel: EditMatchViewModel! context("when initialized without an existing match") { beforeEach { mockStore = MockStore() viewModel = EditMatchViewModel(store: mockStore) } it("has the correct title") { expect(viewModel.title).to(equal("New Match")) } it("formats the home goals correctly") { viewModel.homeGoals.value = 1 expect(viewModel.formattedHomeGoals.value).to(equal("1")) } it("formats the away goals correctly") { viewModel.awayGoals.value = 1 expect(viewModel.formattedAwayGoals.value).to(equal("1")) } describe("validation") { it("fails initially") { expect(viewModel.inputIsValid.value).to(beFalse()) } it("fails when there are no home players") { let awayPlayersViewModel = viewModel.manageAwayPlayersViewModel() let awayPlayerIndexPath = NSIndexPath(forRow: 1, inSection: 0) awayPlayersViewModel.active.value = true awayPlayersViewModel.selectPlayerAtIndexPath(awayPlayerIndexPath) expect(viewModel.inputIsValid.value).to(beFalse()) } it("fails when there are no away players") { let homePlayersViewModel = viewModel.manageHomePlayersViewModel() let homePlayerIndexPath = NSIndexPath(forRow: 0, inSection: 0) homePlayersViewModel.active.value = true homePlayersViewModel.selectPlayerAtIndexPath(homePlayerIndexPath) expect(viewModel.inputIsValid.value).to(beFalse()) } it("passes when there are both home and away players") { let homePlayersViewModel = viewModel.manageHomePlayersViewModel() let homePlayerIndexPath = NSIndexPath(forRow: 0, inSection: 0) homePlayersViewModel.active.value = true homePlayersViewModel.selectPlayerAtIndexPath(homePlayerIndexPath) let awayPlayersViewModel = viewModel.manageAwayPlayersViewModel() let awayPlayerIndexPath = NSIndexPath(forRow: 1, inSection: 0) awayPlayersViewModel.active.value = true awayPlayersViewModel.selectPlayerAtIndexPath(awayPlayerIndexPath) expect(viewModel.inputIsValid.value).to(beTrue()) } } } } } } ================================================ FILE: SwiftGoalTests/ViewModels/ManagePlayersViewModelSpec.swift ================================================ // // ManagePlayersViewModelSpec.swift // SwiftGoal // // Created by Martin Richter on 04/01/16. // Copyright © 2016 Martin Richter. All rights reserved. // import Quick import Nimble import ReactiveCocoa @testable import SwiftGoal class ManagePlayersViewModelSpec: QuickSpec { override func spec() { describe("ManagePlayersViewModel") { var mockStore: MockStore! var managePlayersViewModel: ManagePlayersViewModel! beforeEach { mockStore = MockStore() managePlayersViewModel = ManagePlayersViewModel(store: mockStore, initialPlayers: [], disabledPlayers: []) } it("has the correct title") { expect(managePlayersViewModel.title).to(equal("Players")) } it("initially has a only single, empty section") { expect(managePlayersViewModel.numberOfSections()).to(equal(1)) expect(managePlayersViewModel.numberOfPlayersInSection(0)).to(equal(0)) } context("when initialized with a set of initial players") { beforeEach { let p1 = Player(identifier: "a", name: "A") let p2 = Player(identifier: "b", name: "B") let p3 = Player(identifier: "c", name: "C") mockStore.players = [p1, p2, p3] managePlayersViewModel = ManagePlayersViewModel(store: mockStore, initialPlayers: [p1, p2], disabledPlayers: []) } it("has the right players selected") { managePlayersViewModel.active.value = true let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) let indexPath3 = NSIndexPath(forRow: 2, inSection: 0) expect(managePlayersViewModel.isPlayerSelectedAtIndexPath(indexPath1)).to(beTrue()) expect(managePlayersViewModel.isPlayerSelectedAtIndexPath(indexPath2)).to(beTrue()) expect(managePlayersViewModel.isPlayerSelectedAtIndexPath(indexPath3)).to(beFalse()) } } context("when initialized with a set of disabled players") { beforeEach { let p1 = Player(identifier: "a", name: "A") let p2 = Player(identifier: "b", name: "B") let p3 = Player(identifier: "c", name: "C") mockStore.players = [p1, p2, p3] managePlayersViewModel = ManagePlayersViewModel(store: mockStore, initialPlayers: [], disabledPlayers: [p1, p2]) } it("allows the right players to be selected") { managePlayersViewModel.active.value = true let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) let indexPath3 = NSIndexPath(forRow: 2, inSection: 0) expect(managePlayersViewModel.canSelectPlayerAtIndexPath(indexPath1)).to(beFalse()) expect(managePlayersViewModel.canSelectPlayerAtIndexPath(indexPath2)).to(beFalse()) expect(managePlayersViewModel.canSelectPlayerAtIndexPath(indexPath3)).to(beTrue()) } } context("after becoming active") { beforeEach { managePlayersViewModel.active.value = true } it("fetches a list of players") { expect(mockStore.didFetchPlayers).to(beTrue()) } it("has only a single section") { expect(managePlayersViewModel.numberOfSections()).to(equal(1)) } it("has the right number of players") { expect(managePlayersViewModel.numberOfPlayersInSection(0)).to(equal(4)) } it("displays the right player names") { let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) let indexPath3 = NSIndexPath(forRow: 2, inSection: 0) let indexPath4 = NSIndexPath(forRow: 3, inSection: 0) expect(managePlayersViewModel.playerNameAtIndexPath(indexPath1)).to(equal("C")) expect(managePlayersViewModel.playerNameAtIndexPath(indexPath2)).to(equal("A")) expect(managePlayersViewModel.playerNameAtIndexPath(indexPath3)).to(equal("D")) expect(managePlayersViewModel.playerNameAtIndexPath(indexPath4)).to(equal("B")) } it("allows selecting and deselecting a player") { let indexPath = NSIndexPath(forRow: 0, inSection: 0) managePlayersViewModel.selectPlayerAtIndexPath(indexPath) expect(managePlayersViewModel.isPlayerSelectedAtIndexPath(indexPath)).to(beTrue()) managePlayersViewModel.deselectPlayerAtIndexPath(indexPath) expect(managePlayersViewModel.isPlayerSelectedAtIndexPath(indexPath)).to(beFalse()) } } context("when asked to refresh") { it("fetches a list of players") { managePlayersViewModel.refreshObserver.sendNext(()) expect(mockStore.didFetchPlayers).to(beTrue()) } } context("when becoming active and upon refresh") { it("indicates its loading state") { // Aggregate loading states into an array var loadingStates: [Bool] = [] managePlayersViewModel.isLoading.producer .take(5) .collect() .startWithNext({ values in loadingStates = values }) managePlayersViewModel.active.value = true managePlayersViewModel.refreshObserver.sendNext(()) expect(loadingStates).to(equal([false, true, false, true, false])) } it("notifies subscribers about content changes") { var changeset: Changeset? managePlayersViewModel.contentChangesSignal.observeNext { contentChanges in changeset = contentChanges } let expectedInsertions = [ NSIndexPath(forRow: 0, inSection: 0), NSIndexPath(forRow: 1, inSection: 0), NSIndexPath(forRow: 2, inSection: 0), NSIndexPath(forRow: 3, inSection: 0) ] managePlayersViewModel.active.value = true expect(changeset?.deletions).to(beEmpty()) expect(changeset?.insertions).to(equal(expectedInsertions)) managePlayersViewModel.refreshObserver.sendNext(()) expect(changeset?.deletions).to(beEmpty()) expect(changeset?.insertions).to(beEmpty()) } } it("raises an alert when players cannot be fetched") { mockStore.players = nil // will cause fetch error var didRaiseAlert = false managePlayersViewModel.alertMessageSignal.observeNext({ alertMessage in didRaiseAlert = true }) managePlayersViewModel.active.value = true expect(didRaiseAlert).to(beTrue()) } } } } ================================================ FILE: SwiftGoalTests/ViewModels/MatchesViewModelSpec.swift ================================================ // // MatchesViewModelSpec.swift // SwiftGoal // // Created by Martin Richter on 06/08/15. // Copyright (c) 2015 Martin Richter. All rights reserved. // import Quick import Nimble import ReactiveCocoa import Result @testable import SwiftGoal class MatchesViewModelSpec: QuickSpec { override func spec() { describe("MatchesViewModel") { var mockStore: MockStore! var matchesViewModel: MatchesViewModel! beforeEach { mockStore = MockStore() matchesViewModel = MatchesViewModel(store: mockStore) } it("has the correct title") { expect(matchesViewModel.title).to(equal("Matches")) } it("initially has a only single, empty section") { expect(matchesViewModel.numberOfSections()).to(equal(1)) expect(matchesViewModel.numberOfMatchesInSection(0)).to(equal(0)) } context("after becoming active") { beforeEach { matchesViewModel.active.value = true } it("fetches a list of matches") { expect(mockStore.didFetchMatches).to(beTrue()) } it("has only a single section") { expect(matchesViewModel.numberOfSections()).to(equal(1)) } it("has the right number of matches") { expect(matchesViewModel.numberOfMatchesInSection(0)).to(equal(2)) } it("returns the home players in alphabetical order") { let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) expect(matchesViewModel.homePlayersAtIndexPath(indexPath1)).to(equal("C, A")) expect(matchesViewModel.homePlayersAtIndexPath(indexPath2)).to(equal("C, B")) } it("returns the away players in alphabetical order") { let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) expect(matchesViewModel.awayPlayersAtIndexPath(indexPath1)).to(equal("D, B")) expect(matchesViewModel.awayPlayersAtIndexPath(indexPath2)).to(equal("A, D")) } it("displays the right match results") { let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) expect(matchesViewModel.resultAtIndexPath(indexPath1)).to(equal("2 : 1")) expect(matchesViewModel.resultAtIndexPath(indexPath2)).to(equal("0 : 1")) } } context("when asked to refresh") { it("fetches a list of matches") { matchesViewModel.refreshObserver.sendNext(()) expect(mockStore.didFetchMatches).to(beTrue()) } } context("when becoming active and upon refresh") { it("indicates its loading state") { // Aggregate loading states into an array var loadingStates: [Bool] = [] matchesViewModel.isLoading.producer .take(5) .collect() .startWithNext({ values in loadingStates = values }) matchesViewModel.active.value = true matchesViewModel.refreshObserver.sendNext(()) expect(loadingStates).to(equal([false, true, false, true, false])) } it("notifies subscribers about content changes") { var changeset: Changeset? matchesViewModel.contentChangesSignal.observeNext { contentChanges in changeset = contentChanges } let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) matchesViewModel.active.value = true expect(changeset?.deletions).to(beEmpty()) expect(changeset?.insertions).to(equal([indexPath1, indexPath2])) matchesViewModel.refreshObserver.sendNext(()) expect(changeset?.deletions).to(beEmpty()) expect(changeset?.insertions).to(beEmpty()) } } it("raises an alert when matches cannot be fetched") { mockStore.matches = nil // will cause fetch error var didRaiseAlert = false matchesViewModel.alertMessageSignal.observeNext({ alertMessage in didRaiseAlert = true }) matchesViewModel.active.value = true expect(didRaiseAlert).to(beTrue()) } it("deletes the correct match when asked to") { let match = mockStore.matches![1] let indexPath = NSIndexPath(forRow: 1, inSection: 0) var deletedSuccessfully = false matchesViewModel.active.value = true matchesViewModel.deleteAction.apply(indexPath).startWithResult({ result in deletedSuccessfully = result.value ?? false }) expect(mockStore.deletedMatch).to(equal(match)) expect(deletedSuccessfully).to(beTrue()) } it("provides a view model for creating a new match") { let createMatchViewModel = matchesViewModel.editViewModelForNewMatch() expect(createMatchViewModel.title).to(equal("New Match")) } it("provides the correct view model for editing an existing match") { matchesViewModel.active.value = true let indexPath = NSIndexPath(forRow: 0, inSection: 0) let editMatchViewModel = matchesViewModel.editViewModelForMatchAtIndexPath(indexPath) expect(editMatchViewModel.title).to(equal("Edit Match")) expect(editMatchViewModel.formattedHomeGoals.value).to(equal("2")) expect(editMatchViewModel.formattedAwayGoals.value).to(equal("1")) } } } } ================================================ FILE: SwiftGoalTests/ViewModels/RankingsViewModelSpec.swift ================================================ // // RankingsViewModelSpec.swift // SwiftGoal // // Created by Martin Richter on 04/01/16. // Copyright © 2016 Martin Richter. All rights reserved. // import Quick import Nimble import ReactiveCocoa @testable import SwiftGoal class RankingsViewModelSpec: QuickSpec { override func spec() { describe("RankingsViewModel") { var mockStore: MockStore! var rankingsViewModel: RankingsViewModel! beforeEach { mockStore = MockStore() rankingsViewModel = RankingsViewModel(store: mockStore) } it("has the correct title") { expect(rankingsViewModel.title).to(equal("Rankings")) } it("initially has a only single, empty section") { expect(rankingsViewModel.numberOfSections()).to(equal(1)) expect(rankingsViewModel.numberOfRankingsInSection(0)).to(equal(0)) } context("after becoming active") { beforeEach { rankingsViewModel.active.value = true } it("fetches a list of rankings") { expect(mockStore.didFetchRankings).to(beTrue()) } it("has only a single section") { expect(rankingsViewModel.numberOfSections()).to(equal(1)) } it("has the right number of rankings") { expect(rankingsViewModel.numberOfRankingsInSection(0)).to(equal(4)) } it("displays the right player names") { let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) let indexPath3 = NSIndexPath(forRow: 2, inSection: 0) let indexPath4 = NSIndexPath(forRow: 3, inSection: 0) expect(rankingsViewModel.playerNameAtIndexPath(indexPath1)).to(equal("A")) expect(rankingsViewModel.playerNameAtIndexPath(indexPath2)).to(equal("C")) expect(rankingsViewModel.playerNameAtIndexPath(indexPath3)).to(equal("D")) expect(rankingsViewModel.playerNameAtIndexPath(indexPath4)).to(equal("B")) } it("displays the right ratings") { let indexPath1 = NSIndexPath(forRow: 0, inSection: 0) let indexPath2 = NSIndexPath(forRow: 1, inSection: 0) let indexPath3 = NSIndexPath(forRow: 2, inSection: 0) let indexPath4 = NSIndexPath(forRow: 3, inSection: 0) expect(rankingsViewModel.ratingAtIndexPath(indexPath1)).to(equal("10.00")) expect(rankingsViewModel.ratingAtIndexPath(indexPath2)).to(equal("5.00")) expect(rankingsViewModel.ratingAtIndexPath(indexPath3)).to(equal("5.00")) expect(rankingsViewModel.ratingAtIndexPath(indexPath4)).to(equal("0.00")) } } context("when asked to refresh") { it("fetches a list of rankings") { rankingsViewModel.refreshObserver.sendNext(()) expect(mockStore.didFetchRankings).to(beTrue()) } } context("when becoming active and upon refresh") { it("indicates its loading state") { // Aggregate loading states into an array var loadingStates: [Bool] = [] rankingsViewModel.isLoading.producer .take(5) .collect() .startWithNext({ values in loadingStates = values }) rankingsViewModel.active.value = true rankingsViewModel.refreshObserver.sendNext(()) expect(loadingStates).to(equal([false, true, false, true, false])) } it("notifies subscribers about content changes") { var changeset: Changeset? rankingsViewModel.contentChangesSignal.observeNext { contentChanges in changeset = contentChanges } let expectedInsertions = [ NSIndexPath(forRow: 0, inSection: 0), NSIndexPath(forRow: 1, inSection: 0), NSIndexPath(forRow: 2, inSection: 0), NSIndexPath(forRow: 3, inSection: 0) ] rankingsViewModel.active.value = true expect(changeset?.deletions).to(beEmpty()) expect(changeset?.insertions).to(equal(expectedInsertions)) rankingsViewModel.refreshObserver.sendNext(()) expect(changeset?.deletions).to(beEmpty()) expect(changeset?.insertions).to(beEmpty()) } } it("raises an alert when rankings cannot be fetched") { mockStore.rankings = nil // will cause fetch error var didRaiseAlert = false rankingsViewModel.alertMessageSignal.observeNext({ alertMessage in didRaiseAlert = true }) rankingsViewModel.active.value = true expect(didRaiseAlert).to(beTrue()) } } } }